У Arch Linux я хотів би, щоб eth0 (підключений до мостового маршрутизатора) поділився з’єднанням, отриманим від wlan0, я читав підручники, але я не знаю розуму, як інші користувачі і не повністю розуміють.
У Arch Linux я хотів би, щоб eth0 (підключений до мостового маршрутизатора) поділився з’єднанням, отриманим від wlan0, я читав підручники, але я не знаю розуму, як інші користувачі і не повністю розуміють.
Відповіді:
ОНОВЛЕННЯ
Неможливо провести міст між бездротовим (клієнтським режимом станції станції) та провідним інтерфейсами відповідно до цього потоку на linux-ath5k-devel .
Натомість слід встановити NAT:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Потім вам потрібно призначити IP-адреси:
ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up
Встановіть сервер dhcp і додайте наступний текст у його конфігураційний файл (у /etc/dhcpd.conf чи щось подібне)
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.100 10.0.0.120;
option routers 10.0.0.1;
option domain-name-servers the-ip-address-you-have-in-etc-resolv.conf;
}
Потім запустіть його /etc/init.d/dhcpd start
І це все!
brctl addbr mybridge
brctl addif mybridge eth0
brctl addif mybridge wlan0
Спочатку ви створюєте інтерфейс мосту, я вибираю довільну назву mybridge, потім додаю до нього інтерфейси.
Вам слід надіслати запит на нову ip-адресу (це потрібно лише в тому випадку, якщо ви хочете отримати дійсний IP-адресу для самого мобільного пристрою):
dhclient -d mybridge
Для з'єднання інтерфейсу Wi-Fi ви можете використовувати iw
інструмент для включення 4addr так само:
# iw dev <wifiInterface> set 4addr on
тобто:
# brctl addif <bridgename> <wifiInterface>
can't add <wifiInterface> to bridge <bridgename>: Operation not supported
# iw dev <wifiInterface> set 4addr on
# brctl addif <bridgename> <wifiInterface>
Тепер це має працювати. Ви можете показати мости, використовуючи:
# brctl show
4addr
Режим змушує WiFi вести себе досить, як провідний Ethernet, що мостинг працюватиме. Без нього мости не працюватимуть без NAT.
4addr
вимагає, щоб обидві сторони бездротового зв’язку підтримували його (припускаючи, що ви намагаєтеся реалізувати розширення Wi-Fi)
Залежить від того, наскільки погане для вас AP:
1) Можливо, захочеться бачити лише пакети, що надходять від вас, з відомою вами адресною версією посилань (а значить, не зв'язаними пакетами) 2) Насправді вона може бути ще розумнішою, і знати, яка IP-адреса повинна належати до адреси адреси рівня посилання (причина він знає DHCP і перевіряє його)
Якщо 1 + 2 істинні, вам дійсно потрібно щось на зразок IP NAT, DHCP, ..
Але якщо це лише 1), ви можете підробити адресу шару посилання та повернути його на потрібне в іншому напрямку, як описано тут:
https://wiki.debian.org/BridgeNetworkConnections#Bridging_with_a_wireless_NIC
4addr, як описано в інших відповідях, безумовно, найкращий спосіб, коли він підтримується адаптером / драйвером, але не всі вони. NAT може працювати для деяких речей, але отримати належну комунікацію в обох напрямках на LAN стане проблематично (наприклад, підключення принтера або доступ до інших пристроїв IoT з іншого боку NAT). Все, що покладається на трансляцію / багатоадресну передачу (наприклад, автоматичне відкриття, bonjour), пройде через NAT.
Альтернативою є використання проксі-сервера ARP (парпурований), як описано в https://wiki.debian.org/BridgeNetworkConnectionsProxyArp . Я встановив це на Raspberry Pi для принтера, і він працює як шарм (я додав 10-секундний сон у post-up
команди, щоб дозволити йому отримати IP-адресу спочатку, це може мати відношення до повільності моєї старої RPi ...)
Міст і 4addr:
З'єднання wlan0 - це біль. Зазвичай ви не можете додати його до мостового інтерфейсу (brctl повертає "Операція не дозволена"), а використання "мостового" фільтра VirtualBox призводить до великого безладу конфліктів ARP та DHCP. Причиною цього є те, що 802.11 кадри містять лише три адреси за замовчуванням: MAC адреси як бездротових пристроїв (ноутбук та AP), так і кінцевого одержувача (як в Ethernet). Завжди передбачається, що існує лише один можливий джерело.
802.11 може містити MAC-адресу четвертого, оригінатора, і це використовується в режимі WDS ретрансляторами. Цю функцію можна ввімкнути і в Linux, використовуючи iw, і включення цього режиму дозволить використовувати wlan0 у мостових інтерфейсах, а також у мостових мережах VirtualBox:
iw dev wlan0 set 4addr on
Однак з увімкненою 4addr ви, ймовірно, повністю ігноруєте AP: асоціація вдається, але всі кадри даних зникають в ефір. Це може бути з міркувань безпеки (тому що чорт важко підробити MAC-адресу джерела. Так.) У моєму маршрутизаторі (працює OpenRG) потрібно включити режим "WDS" для бездротового інтерфейсу AP, додати пристрій WDS, обмежений моїм MAC-адреса ноутбука та додайте її до мосту локальної мережі. Зараз працюють пакети 4addr.
З цим є ще одна проблема - маршрутизатор тепер відхиляє пакети трьох адрес з ноутбука, що може бути досить незручно (доводиться перемикати 4addr щоразу, коли мережу WLAN змінюється). Вирішення проблеми полягає в тому, щоб додати на ноутбуці другий бездротовий інтерфейс, підключений до того ж пристрою, але з іншою MAC-адресою. Спочатку скасуйте попередню конфігурацію:
iw dev wlan0 set 4addr off
Потім додайте другий інтерфейс - ім'я було вибрано довільно - з іншою MAC-адресою:
iw dev wlan0 interface add wds.wlan0 type managed 4addr on
ip link set dev wds.wlan0 addr <addr>
ip link set dev wds.wlan0 up
Тут повинна відповідати адреса пристрою WDS, налаштована в маршрутизаторі; крім цього, це може бути будь-яка дійсна MAC-адреса. Оригінальний MAC wlan0 потім залишається для "нормального" використання.
Можна одночасно використовувати і wlan0, і wds.wlan0, хоча я лише два рази перевіряв асоціацію з тим же AP, а не з різними AP. Я здогадуюсь, що їм потрібно було б хоча б бути на одному каналі.
Деякі люди запитують, навіщо використовувати це, коли VirtualBox може передати WiFi "просто чудово". Відповідь полягає в тому, що VirtualBox не надсилає MAC-адреси віртуальної машини; швидше, він виконує NAT і на шарі MAC. - 2014-08-22
Прямий міст Улана
За певних обставин ви також можете використовувати wlan_kabel. Він використовує пакетні розетки, щоб безпосередньо передати wlan * -пристрої з Ethernet-пристроями. Однак ви можете одночасно з'єднати один єдиний MAC за допомогою wlan_kabel. У нього немає недоліку, якщо його забороняють точки доступу, оскільки використовується лише оригінальний MAC пристрою wlan. У вашому випадку це означатиме, що wlan0 може використовуватись лише одним ВМ, а не хостом. Ви можете отримати wlan_kabel тут . Це схоже на розчин маквлана .
З’єднання з ipvlan
IP Vlan не має обмеження мосту, який би використовувався для перенесення деталей мережі про те, як його використовувати, можна знайти тут
Альтернатива маскараду
Маршрутизацію Linux можна використовувати замість iptables-masquerade та ip_forward для досягнення мосту, але, як згадувалося, для цього потрібно ввімкнути ip_forward і змусити Linux діяти як маршрутизатор.
# bridge setup
brctl addbr br0
ifconfig br0 10.10.20.1/24 up
# enable ipv4 forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward
# netfilter cleanup
iptables --flush
iptables -t nat -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# netfilter network address translation
iptables -t nat -A POSTROUTING -o wlan0 -s 10.10.20.0/24 -j MASQUERADE
Потім інтерфейс br0 матиме доступ до мережі wlan0
Важливі та супутні
Крім того, і що дуже важливо, ви не повинні використовувати застарілі, застарілі команди, такі як ifconfig, brctl тощо. Набір iproute2 містить команди для всього цього, включаючи налаштування віртуальних інтерфейсів (те, для чого нам колись довелося використовувати openvpn) та створення мостів. Якщо ви не знаєте, як встановити міст з ip, ми переходимо
ip tuntap add tap0 mode tap user root
ip link set tap0 up
ip link add br0 type bridge
ip link set tap0 master br0
ip link set eth0 master br0
ip addr add 10.173.10.1/24 dev br0
ip link set br0 up
За допомогою цього набору команд ми створюємо віртуальний інтерфейс під назвою tap0, потім міст, який називається br0, потім закріплюємо eth0 і tap0 до мосту, якому ми призначаємо IP-адресу 10.173.10.1, потім підводимо все це. Потрібні три окремі екземпляри підведення інтерфейсів (для tap0, eth0 та br0).
Хитрість зробити цю роботу полягає у використанні proxy.arp, який дозволяє вашому ПК (не вашому VM / Linux контейнеру / мережевому простору імен) відповідати на запити ARP замість них.
Іншими словами, використовуючи переадресацію IPv4 між вашим апаратним інтерфейсом та віртуальним інтерфейсом, ви думаєте, що можете підключити свій VM / LXC / NNS до локальної мережі так, як якщо б це був фізичний інтерфейс, але це неправда: ви абсолютно забуваєте фундаментальний трафік ARP, саме це дійсно дозволяє локальній мережі працювати. Отже, проблема полягає в тому, що: якщо я правильно пересилаю трафік IPv4, як я можу також пересилати трафік ARP, щоб мій VM / LXC / NNS працював? Хитрість полягає у використанні проксі-арп.
Повна відповідь на це - у Блозі Бохді Зазена з викривчою назвою: Bridge wireless cards. Він використовує застарілий пакет, uml-утиліти, щоб створити віртуальний інтерфейс за допомогою команди tunctl: це єдина команда, для якої він використовує uml-утиліти, так що ви можете сміливо нехтувати завантаженням пакета та використовувати команду I писав вище, щоб створити інтерфейс для натискання або налаштування, залежно від того, що вам подобається, просто змініть команду відповідно. потім створіть пару для VX для свого LXC, а тепер створіть міст між tap0 і veth0. Цей міст, який називається br0, - це те, що вам потрібно проксі-арп, замість простого інтерфейсу tap0, описаного Богда Зазен.
Джерела: askubuntu.com , nullroute.eu.org , firejail.wordpress.com , superuser.com
Мені сподобався підхід Proxy Arp , але в оригінальному питанні було вказано Arch Linux. Ось версія Linux Linux для програми Raspbian . Я дуже намагався адаптувати оригінальний підхід із згаданої тут Debian Wiki до netctl з використанням ExecUpPost
та ExecDownPre
без успіху. Все працювало в командному рядку, але не в профілі.
Етапи:
IPForward=yes
. Я використовував WPA Supplicant для управління інтерфейсом бездротової мережі.enable-reflector=yes
всередині /etc/avahi/avahi-daemon.conf
; запустіть і ввімкніть, avahi-daemon.service
якщо цього ще немає.[Unit]
Description=proxy arp routing service
Documentation=/raspberrypi//q/88954/79866
[Service]
Type=forking
# Restart until wlan0 gained carrier
Restart=on-failure
RestartSec=5
TimeoutStartSec=30
ExecStartPre=/lib/systemd/systemd-networkd-wait-online --interface=wlan0 --timeout=6 --quiet
ExecStartPre=/usr/bin/echo 'systemd-networkd-wait-online: wlan0 is online'
# clone the dhcp-allocated IP to eth0 so dhcrelay will relay for the correct subnet
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip addr add $(/usr/bin/ip -4 -br addr show wlan0 | /usr/bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0'
ExecStartPre=/usr/bin/ip link set dev eth0 up
# v minus sign
ExecStart=-/usr/bin/parprouted eth0 wlan0
ExecStopPost=/usr/bin/ip link set dev eth0 down
ExecStopPost=/usr/bin/bash -c '/usr/bin/ip addr del $(/usr/bin/ip -4 -br addr show eth0 | /usr/bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0'
[Install]
WantedBy=wpa_supplicant@wlan0.service
[Unit]
Description=DHCRelay Service
After=network-online.target parprouted_bridge.service
Type=simple
[Service]
ExecStart=/usr/bin/bash -c '/usr/bin/dhcrelay -d -4 -iu wlan0 -id eth0 $(/usr/bin/journalctl -b -u systemd-networkd.service | /usr/bin/grep -Po "via\s+\K\\d+\\.\\d+\\.\\d+\\.\\d+")'
[Install]
WantedBy=multi-user.target
Такий підхід працював для мене на Raspberry Pi Model B + w / ArchLinuxArm, на якому встановлений USB-адаптер WiFi з чіпсетом RT5370. Оскільки Pi буде надавати WiFi принтеру лише з мережею Ethernet, я хотів би, щоб він був надійним для грубого поводження, тому наступним моїм кроком буде налаштування SD-карти як лише для читання .