Назад | Перейти на главную страницу

Linux Ethernet / беспроводной мост

Одно из наших новых требований к продукту, над которым я работаю, - это поддержка моста Ethernet-беспроводной. Предположим, у нас есть два сетевых интерфейса: eth0 и ath0 (мы используем драйвер Madwifi). Какие у меня есть опции, чтобы позволить компьютерам, подключенным к eth0, иметь доступ к беспроводной сети?

Первое, что я попробовал, это brctl утилита. Казалось, это именно то, что я хочу. И в проводных сетях это так. Но в беспроводных сетях это не совсем сработало. Некоторые программы Wiresharking выявили, что исходный MAC-адрес передаваемого по мосту пакета был (правильно) установлен на компьютер за мостом. Однако точка доступа, никогда не видевшая этого MAC-адреса, отбрасывает пакет. Если я включу пакеты WDS (iwpriv ath0 wds 1), то пакет отправляется с адресами передатчика и приемника, но, похоже, не разрешен точкой доступа (он очень старый, и мы не можем его изменить). Не все точки доступа должны принимать WDS, верно?

Таким образом, мне интересно, нужно ли нам делать какое-то преобразование Ethernet в сети или что-то подобное. Однако я не понимаю, как это может работать - как можно использовать один MAC-адрес среди n компьютеров? ebtables слишком низкий уровень. Просто переписав MAC-адреса на выходе и на обратном пути, компьютер-мост не сможет использовать сеть. Кроме того, как ему узнать конечный пункт назначения для входящего пакета? По крайней мере, вам понадобятся детали из уровней IP и TCP / UDP.

Верно, мост не работает с 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

Вот что у нас есть (надеюсь, поможет):

Сеть1 --- беспроводной (мост WDS)))) (((беспроводной (мост WDS) --- Сеть2

Network1 и Network2 используют общее пространство IP-адресов (192.168.1.0/24). Это работает как шарм.

Я написал программу-повторитель, которая считывает одну сторону и отправляет ее другим, изучает MAC-адрес ПК за мостом и использует его для перезаписи MAC-адресов src / dst по мере необходимости, но это меня поражает, поскольку чревато непредвиденными последствиями.

Не знаю, с «обычными» настольными дистрибутивами, но на dd-wrt на маршрутизаторах netgear я могу легко соединить беспроводные (виртуальные) интерфейсы с интерфейсами ehternet и vlan. подобно

brctl addif br0 wl0.1
brctl addif br0 vlan1
brctl addif br1 wl0.2
brctl addif br1 eth0

Итак, у меня есть беспроводная глобальная сеть, подключенная к порту WAN, а беспроводная локальная сеть подключена к 4-портовому коммутатору (eth0).