LINUX.ORG.RU
решено ФорумAdmin

Локалка с мостом и подсеть провайдера на одном физическом устройстве

 , ,


0

1

Здравствуйте

Весь интернет обыскан безрезультатно, провайдер отказывается помогать, надежда только на ЛОР.

Прошу совета по маршрутизации в домашней сети. Сеть устроена так:

Роутер провайдера
      |
      |
      |
   Мой свич
     /\
    /  \
   |    \
 Комп    \
   +      \
вайфай     \
   .     Гаджет 2
   .
   .
Гаджет 1

Своего роутера нет, его функции выполняет компьютер с линуксом, раздавая DHCP-адреса в локалке (dnsmasq) и в беспроводной сети (hostapd и тоже dnsmasq). Сетевая карта в компьютере одна.

Всё работало до тех пор, пока не возникла необходимость сделать так, чтобы проводные и беспроводные гаджеты были в единой локальной сети. Насколько я понимаю, для этого нужен мост (bridge).

Проблема в том, что сетевая карта одна, и я не понимаю, как организовать, чтобы она одновременно была и частью моста со статическим IP и независимым устройством, получающим адрес по dhcp от провайдера.

Пока у меня вот такое в /etc/network/interfaces

iface eno1 inet manual
iface wlp3s0 inet manual

iface br0 inet static
  bridge_ports eno1 wlp3s0
  address 172.16.6.1
  netmask 255.255.255.0
  post-up echo 1 > /proc/sys/net/ipv4/ip_forward
  post-up iptables -A FORWARD -s 172.16.6.0/24 -j ACCEPT
  post-up iptables -A FORWARD -d 172.16.6.0/24 -j ACCEPT
  post-up iptables -t nat -A POSTROUTING -s 172.16.6.0/24 -j MASQUERADE

iface eno1 inet dhcp

Обратите внимание на два интерфейса на eno1.

Если я поднимаю сначала eno1, а затем br0, поначалу всё работает прекрасно: все устройства видят друг друга и не имеют затруднений с интернетом. Через какое-то время по неизвестной причине интернет пропадает (отовсюду, включая компьютер-роутер), пакеты не ходят за пределы локалки. Сама локалка продолжает работать. В логах никаких особых сообщений не видно.

Если я поднимаю сначала br0, а затем eno1, то попадаю сразу во вторую часть: интернета нет, а локалка работает.

Я читал что-то про vlan, но, кажется, это не то, что мне поможет.

Я пробовал использовать алиасы (eno:0, eno:1), но, по-моему, с ними всё работает так же, как без них.

Что происходит и как это починить?



Последнее исправление: ringill (всего исправлений: 1)

Если предположить, что свитч умный, вам нужно настроить на нём один vlan для порта с интернетом, другой vlan для портов локальной сети, установить режим tagged для порта, куда подключён компьютер. На компьютере настроить эти же номера vlan’ов на сетевом интерфейсе, получится два интерфейса: на одном интернет от провайдера, на другом — локальная сеть.

Если каким-то устройствам нужен «прямой» IP-адрес именно через DHCP провайдера, то следует настроить dhcp-relay.

ValdikSS ★★★★★
()

Убрать iface eno1 inet dhcp. Указать iface br0 inet dhcp. Убрать с интерфейса br0 статики и правила файервола. Все устройства будут в одной подсети и будут получать адреса по dhcp от роутера провайдера.

iliyap ★★★★★
()
Ответ на: комментарий от iliyap

Провайдер выдаёт интернет только на один согласованный MAC-адрес.

ringill
() автор топика
Ответ на: комментарий от ValdikSS

Свитч TL-SG108, вроде не умный.

Нет, IP от провайдера получает только компьютер, а устройства в локалке получают IP от компьютера через dnsmasq.

ringill
() автор топика
Ответ на: комментарий от anonymous

Ну допустим, а кто-нибудь может объяснить, что происходит, почему пропадает интернет даже на компьютере-роутере?

Я готов пожертвовать доступом в интернет с гаджета, подключенного к локалке, если это исправит положение.

ringill
() автор топика

Порт моста не должен иметь своих IP-адресов. Технически может, но по сути будет всё сломано. Тебе нужен управляемый свитч, либо второй физический интерфейс у шлюза.

anonymous
()

Купить человеческий роутер за 3 тысячи рублей совсем уже не вариант? До чего Путин Россию довел, ад.

bhfq ★★★★★
()
Ответ на: комментарий от ringill

Пропадает инет очень общее описание проблемы, тут можно много напридумывать. Диагностируйте сами ping, arping, tcpdump, bridge fdb show. Скорее всего у вас dhcp-клиент не может получить адрес от маршрутизатора.

У вас без моста какая была конфигурация? На eno1 висел и dhcp-клиент и dnsmasq? По идее, нельзя ничего вешать на интерфейсы, входящие в мост, только на br0, и, если ваш MAC-зашит в маршрутизатор, то у br0 нужно указать этот MAC, чтобы на нём можно было запустить dhcp-клиента...

Зачем вам понадобился мост, почему не хватало маршрутизации?

mky ★★★★★
()
Ответ на: комментарий от mky

ping с любым IP адресом, включая 8.8.8.8 и шлюз провайдера, выдаёт «Destination host unreachable». arping, tcpdump, bridge fdb show пока не пробовал.

Нет, к моменту пропадания интернета адрес от маршрутизатора уже получен.

Без моста да, на eno1 висели и dhcpcd и dnsmasq и не мешали друг другу.

Если я повешу dhcp на мост, смогу ли я одновременно задать мосту статический адрес в моей локальной сети?

Маршрутизация между подсетями (до появления моста) работала прекрасно, но после появления в доме ТВ-приставки выяснилось, что протокол хромкаст требует нахождения устройств в одной подсети. Требование, на мой взгляд, необоснованное, но иначе хромкаст просто не работает, я перепробовал все мыслимые варианты c маршрутизацией мультикаст-пакетов и пр.

ringill
() автор топика
Ответ на: комментарий от ringill

С точки зрения ip-адресов мост такой же интерфейс, как и обычные. Я не знаю, можно ли штатными средствами дебиана задать мосту статический адрес и dhcp. Или там придётся что-то придумывать, типа прописывать статический адрес в настройки клиента.

Ещё, у iptables цель -j MASQUERADE делает SNAT на первый адрес на интерфейсе, если им окажется статический адрес, будет не то, что вы задумывали. Возможно, вам нужно -j SNAT --to-source и добавлять это правило при получении адреса из хука dhcp-клиента.

Нет, к моменту пропадания интернета адрес от маршрутизатора уже получен.

А какое там lease time? Может лиза заканчивается и маршрутизатор обрубает, так как dhcp-клиент не может обновить адрес.

mky ★★★★★
()
Ответ на: комментарий от mky


Заменил -j MASQUERADE на -j SNAT --to-source my.ip.ad.dr, хук не понадобился, т. к. у меня от провайдера статический IP.

Lease time 24 часа, интернет пропадает раньше. Обновление IP-адреса по DHCP после пропадания интернета успешно проходит и ничего не меняет.

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

Оказывается, можно!

iface br0 inet static
  ...
iface br0 inet dhcp

Завелось, проверяю, спасибо.

Задал мосту MAC-адрес (hwaddress ether) такой же, как у eno1.

ringill
() автор топика
Ответ на: комментарий от mky

Да, всё работает, спасибо огромное. Вот итоговый /etc/network/interfaces:

auto lo br0
iface lo inet loopback
  
iface eno1 inet manual
iface wlp3s0 inet manual

iface br0 inet static
  bridge_ports eno1 wlp3s0
  address 172.16.6.1
  netmask 255.255.255.0
  hwaddress ether xx:yy:zz:uu:vv:ww   [ MAC-адрес eno1 ]
  post-up echo 1 > /proc/sys/net/ipv4/ip_forward
  pre-up /sbin/hostapd /etc/hostapd/hostapd.conf -B
  post-up iptables -A FORWARD -s 172.16.6.0/24 -j ACCEPT
  post-up iptables -A FORWARD -d 172.16.6.0/24 -j ACCEPT
  post-up iptables -t nat -A POSTROUTING -s 172.16.6.0/24 -j SNAT --to-source xx.yy.zz.ww  [ статический IP-адрес от провайдера ]
  post-down killall /sbin/hostapd

iface br0 inet dhcp

ringill
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.