У меня есть кабельный модем, подключенный к WiFi-роутеру. У меня есть маршрутизатор, настроенный для обслуживания DHCP. Из-за планировки моего дома я не могу физически подключить домашнюю проводную локальную сеть к маршрутизатору. Я надеялся, что я буду использовать Raspberry Pi с WiFi-адаптером и Ethernet, чтобы он служил мостом между проводной сетью, беспроводной сетью и маршрутизатором.

Некоторые цели:

  1. Беспроводные и проводные устройства могут подключаться друг к другу.
  2. Беспроводные и проводные устройства могут видеть интернет.
  3. Все устройства получают свои IP-адреса через DHCP от маршрутизатора.
  4. Правильная конфигурация появляется автоматически после перезагрузки.

Мой фундаментальный вопрос: как мне настроить мое оборудование для достижения этих целей?

У меня установлены утилиты bridge-utils на Raspberry Pi. Если я включаю мост в /etc /network /interfaces, то Raspberry Pi напрасно ищет DHCP-сервер и не получает IP-адрес. Если я отключу мост, Raspberry Pi без проблем получит ответ DHCP от маршрутизатора, получит IP-адрес и сможет подключиться к Интернету.

Также в проводной локальной сети есть Synology DiskStation, которая может обслуживать DHCP, поэтому я с удовольствием включу это, если это поможет. Но тогда у меня будет два DHCP-сервера, поэтому мне может понадобиться две подсети и некоторая маршрутизация между ними. Я хотел бы сделать вещи проще, если это возможно.

Вот мой файл /etc /network /interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
        wpa-ssid "MySSID"
        wps-psk "MyPassword"

auto br0
iface br0 inet manual
        pre-up iwconfig wlan0 essid "MySSID"
        bridge_hw 12:34:56:78:90:ab
        bridge_ports wlan0 eth0
        bridge_stp off
        bridge_maxwait 5
        bridge_fd 0

В строке bridge_hw указан MAC-адрес моего WiFi-ключа на Raspberry Pi. Я также попробовал раздел br0, как это (найденный здесь), но он также не работал:

auto br0
iface br0 inet dhcp
  pre-up ip link set eth0 down
  pre-up ip link set wlan0 down
  pre-up brctl addbr br0
  pre-up brctl addif br0 eth0 wlan0
  pre-up ip addr flush dev eth0
  pre-up ip addr flush dev wlan0

Я включил net.ipv4.ip_forward в /etc/sysctl.conf, но, похоже, это не помогло. Я посмотрел в системном журнале, но ничего там не указывало на очевидную проблему.

Я много читал о преодолении, DHCP, parprouted, dhcrelay, / и т.д. / сети / интерфейсов и iwconfig, но мне не понятно , как сконфигурировать систему так , что wlan0 приходит первый на Raspberry Pi, получает DHCP информации от маршрутизатора, затем поднимается мост, затем на Raspberry Pi появляется eth0, получает DHCP через мост, а затем и другие проводные устройства могут, и беспроводные устройства могут видеть проводные устройства. Я рад переключиться на статические IP-адреса на Raspberry Pi, если это поможет.

1 ответ1

0

Вы не можете легко соединить интерфейс Wi-Fi, см. Здесь для хорошего объяснения. Есть способы обойти это (VirtualBox, например, делает это из коробки), и я покажу вам один из способов сделать это.

Если вы не можете соединить wlan0 с eth0 , вы можете ретранслировать IP-трафик между ними с помощью ip_forward , но это исключает два важных вида трафика: DHCP (который использует необработанные сокеты) и ARP (который является протоколом уровня 2, следовательно, он не покрывается ip-forward). Мы решили первую проблему, настроив наш собственный DHCP-сервер, отвечающий на запросы только через интерфейс eth0 ; чтобы это работало, мы должны убедиться, что диапазоны IP-адресов, передаваемых вашим маршрутизатором и dnmasq на RPi, не перекрываются. Мы можем обойти проблему ARP, включив proxy-arp.

Самое простое - пренебречь как parprouted и dhcrelay , что приводит к ненужным осложнениям. Мы будем использовать вместо proxy-arp .

  1. Выберите подсеть в вашей локальной сети, которую ваш маршрутизатор не использует для назначения IP-адресов, скажем, 192.168.1.160/27 , и назначьте ее первый адрес, 192.168.1.161 вашему интерфейсу eth0 :

    ip addr add 192.168.1.161/32 dev eth0
    
  2. Скажите ядру, что эта подсеть находится в интерфейсе eth0 :

    ip route add 192.168.1.160/27 dev eth0
    
  3. Включите proxy-arp и ip_forwarding:

    echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
    echo 1 > /proc/sys/net/ipv4/conf/wlan0/proxy_arp
    echo 1 > /proc/sys/net/ipv4/ip_forward 
    
  4. Загрузите и установите dnsmasq для выполнения DHCP на интерфейсе eth0:

    apt-get install dnsmasq
    

    и затем создайте файл /etc/dnsmasq.conf со следующим содержимым:

    domain-needed
    bogus-priv
    dhcp-authoritative
    interface=eth0
    local=/YourDomainName.lan/
    server=8.8.8.8
    server=8.8.4.4
    expand-hosts
    domain=YourDomainName.lan
    dhcp-range=192.168.1.162,192.168.1.190,12h
    
  5. Перезапустите dnsmasq , все готово.

Должно быть тривиально запустить все вышеперечисленное при загрузке, если нет, дайте мне знать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .