
В Arch Linux я хотел бы, чтобы eth0 (подключенный к мостовому маршрутизатору) использовал соединение, полученное от wlan0. Я читал руководства, но я не так хорошо разбираюсь в командах, как другие пользователи, и не до конца понимаю.
решение1
ОБНОВЛЯТЬ
Невозможно создать мост между беспроводными (клиентский режим, также известный как режим станции) и проводными интерфейсами.согласно этой теме на linux-ath5k-devel.
Настроить NAT
Вместо этого следует настроить NAT:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Назначение IP
Затем вам необходимо назначить себе IP-адреса:
ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up
Установить демон dhcp
Установите сервер 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;
}
Запустить dhcpd
Затем запустите его /etc/init.d/dhcpd start
Вот и все!
Читайте только то, что написано ниже, если вас интересует нерабочая настройка моста.
brctl addbr mybridge
brctl addif mybridge eth0
brctl addif mybridge wlan0
Сначала вы создаете интерфейс моста. Я выбираю произвольное имя.моймостзатем добавьте к нему интерфейсы.
Вам следует запросить новый IP-адрес (это необходимо только в том случае, если вы хотите получить действительный IP-адрес для самого мостового устройства):
dhclient -d mybridge
решение2
Кмост 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
решение3
Мост WLAN и 4 адреса:
Мост wlan0 — это больно. Обычно вы не можете добавить его к интерфейсу моста (brctl возвращает «Операция не разрешена»), а использование фильтра VirtualBox «bridged» приводит к большому беспорядку конфликтов ARP и DHCP. Причина этого в том, что кадры 802.11 по умолчанию содержат только три адреса: MAC-адреса обоих беспроводных устройств (ноутбука и точки доступа) и конечного получателя (как в Ethernet). Всегда предполагается, что есть только один возможный отправитель.
802.11 может переносить четвертый MAC-адрес, адрес отправителя, и он используется в режиме WDS ретрансляторами. Эту функцию можно включить и в Linux, используя iw, а включение этого режима позволит использовать wlan0 в интерфейсах моста, а также в сетях моста VirtualBox:
iw dev wlan0 set 4addr on
Однако при включенном 4addr вы, скорее всего, будете полностью проигнорированы точкой доступа: ассоциация проходит успешно, но все кадры данных исчезают в эфире. Это может быть сделано из соображений безопасности (потому что подделать исходный MAC-адрес чертовски сложно. Да.) В моем маршрутизаторе (работающем под управлением OpenRG) необходимо включить режим "WDS" для интерфейса беспроводной точки доступа, добавить устройство WDS, ограниченное MAC-адресом моего ноутбука, и добавить его в мост LAN. Пакеты 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 одновременно – хотя я только дважды тестировал привязку к одной и той же точке доступа, а не к разным точкам доступа. Я предполагаю, что они должны быть по крайней мере на одном канале.
Некоторые спрашивают, зачем это использовать, если VirtualBox может "просто отлично" организовать мост WiFi. Ответ в том, что VirtualBox не отправляет MAC-адреса виртуальных машин; вместо этого он также выполняет NAT на уровне MAC. – 2014-08-22
Прямой мост WLAN
При определенных обстоятельствах вы также можете использовать wlan_kabel. Он использует пакетные сокеты для прямого моста wlan*-устройств с устройствами ethernet. Однако вы можете мостить только один MAC за раз с помощью wlan_kabel. У него нет недостатка в виде блокировки точками доступа, поскольку используется только исходный MAC устройства wlan. В вашем случае это означало бы, что wlan0 может использоваться только одной виртуальной машиной, а не хостом. Вы можете получитьwlan_kabel здесь. Это похоже наmacvlansрешение.
Мост с 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, который позволяет вашему ПК (а не вашей виртуальной машине/контейнеру Linux/сетевому пространству имен) отвечать на запросы ARP вместо них.
Другими словами, используя пересылку IPv4 между вашим аппаратным интерфейсом и вашим виртуальным интерфейсом, вы думаете, что можете подключить вашу VM/LXC/NNS к вашей LAN, как если бы это был физический интерфейс, но это не так: вы забываете абсолютно фундаментальный трафик ARP, который действительно позволяет LAN работать. Итак, проблема в следующем: если я правильно пересылаю трафик IPv4, как я могу также пересылать трафик ARP, чтобы моя VM/LXC/NNS работала? Хитрость в том, чтобы использовать proxy-arp.
Полный ответ на этот вопрос находится вБлог Бохди Зазена, с говорящим названием: Bridge wireless cards. Он использует устаревший пакет uml-utilities для создания виртуального интерфейса с помощью команды tunctl: это единственная команда, для которой он использует uml-utilities, так что вы можете спокойно проигнорировать загрузку пакета и использовать команду, которую я написал выше, для создания интерфейса tap или tun, как вам больше нравится, просто измените команду соответствующим образом. затем создайте пару veth для вашего LXC, а теперь создайте мост между tap0 и veth0. Этот мост, называемый br0, — это то, для чего вы должны использовать proxy-arp вместо простого интерфейса tap0, описанного Бохди Зазеном.
Источники:askubuntu.com,nullroute.eu.org,firejail.wordpress.com,суперпользователь.com
решение4
4addr, как описано в других ответах, безусловно, является лучшим способом, если поддерживается адаптером/драйвером, но не все из них это делают. NAT может работать для некоторых вещей, но получение надлежащей связи в обоих направлениях по локальной сети станет проблематичным (например, подключение принтера или доступ к другим устройствам IoT по другую сторону NAT). Все, что полагается на широковещательную/многоадресную рассылку (например, автоматическое обнаружение, bonjour), не будет работать через NAT.
Альтернативой является использование ARP-прокси (parprouted), как описано вhttps://wiki.debian.org/BridgeNetworkConnectionsProxyArp. Я настроил это на Raspberry Pi для принтера, и это работает как часы (я добавил 10-секундный сон в команды, post-up
чтобы дать ему сначала получить IP-адрес, это может быть связано с медлительностью моего старого RPi...)