Linux Ethernet/ беспроводное мостовое соединение
Одним из наших новых требований к продукту, над которым я работаю, является поддержка мостов Ethernet-Wireless. Предположим, у нас есть два сетевых интерфейса: eth0 и ath0 (мы используем драйвер Madwifi). Какие варианты у меня есть, чтобы компьютеры, подключенные к eth0, могли иметь доступ к беспроводной сети?
Первое, что я попробовал, было brctl
полезность. Казалось, это именно то, что я хочу. И в проводных сетях это так. Но в беспроводных сетях это не совсем работало. Некоторые проволоки выявили, что исходный MAC-адрес пакета для моста был (правильно) установлен на компьютере за мостом. Тем не менее, AP, никогда не видевшая этого MAC-ассоциированного, отбросит пакет. Если я включу пакеты WDS (iwpriv ath0 wds 1
), затем пакет отправляется с адресами отправителя и получателя, но AP, похоже, не разрешает его (он очень старый, и мы не можем его изменить). Не все AP должны принимать WDS, верно?
Таким образом, мне интересно, если мы должны сделать какой-то Ethernet NATing или тому подобное. Тем не менее, я не вижу, как это может работать - как один MAC-адрес может быть разделен между n компьютерами? ebtables
появляется слишком низкий уровень. Простая перезапись MAC-адресов на выходе и обратном пути делает его таким, чтобы компьютер-мостик не мог использовать сеть. Кроме того, как он узнает конечный пункт назначения для входящего пакета? По крайней мере, вам потребуются подробности со уровней IP и TCP/UDP.
5 ответов
Да, мост не работает с Wi-Fi. Самое простое решение - использовать маршрутизацию. Вы можете настроить "прозрачный маршрутизатор", который выглядит как мост, но на самом деле это маршрутизация пакетов. Для этого сделайте одну сеть подмножеством другой.
например, если ваша проводная сеть 192.168.183.0/24
, вы могли бы использовать беспроводную локальную сеть 192.168.183.192/26
,
Вам также может понадобиться включить "proxy arp". Просто добавьте echo 1 > /proc/sys/net/ipv4/conf/all/proxy_arp
в какой-то скрипт запуска.
Такая конфигурация прекрасно подойдет для подключения двух сетевых интерфейсов.
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 192.168.0.10
network 192.160.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 212.27.39.2
dns-search home
auto eth0
iface wlan0 inet static
address 192.168.0.9
network 192.160.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 212.27.39.2
dns-search home
wireless_keymode open
wireless_mode managed
wireless_nick srvolivier
wireless-essid SMC2870
wireless-key wepkey
auto wlan0
iface br0 inet static
address 192.168.0.8
network 192.160.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 212.27.39.2
dns-search home
bridge_ports eth0 wlan0
auto br0
Не знаю с "нормальными" настольными дистрибутивами, но на dd-wrt на сетевых маршрутизаторах я могу легко соединить беспроводные (виртуальные) интерфейсы с интерфейсами ehternet и vlan. подобно
brctl addif br0 wl0.1
brctl addif br0 vlan1
brctl addif br1 wl0.2
brctl addif br1 eth0
поэтому у меня есть беспроводная "WAN", соединенная с портом wan eth, и беспроводная "LAN", соединенная с 4-портовым коммутатором (eth0).
Вот что у нас работает (надеюсь, это поможет):
Сеть1 --- беспроводная сеть (мост WDS)))) ( ( (беспроводная сеть (мост WDS)--- Сеть2
Network1 и Network2 используют общее пространство IP-адреса ( 192.168.1.0/24). Это работает как очарование.
Я написал программу-ретранслятор, которая читает одну сторону и отправляет ее другим, изучая MAC-адрес ПК за мостом и используя его для перезаписи MAC-адресов src/dst по мере необходимости, но мне это кажется загруженным с непредвиденными последствиями.