Ситуация такова, что у меня есть коробка Ubuntu с несколькими портами Ethernet, и я хотел бы вести себя так, как если бы она была подключена к компьютеру через коммутатор. Я легко могу добиться этого с помощью моста. В /etc/network/interfaces
:
iface br0 inet static
bridge_ports regex eth.*
address 192.168.1.1
netmask 255.255.255.0
В этой конфигурации другое устройство может подключиться к любому из портов и пропинговать это поле по адресу 192.168.1.1.
Теперь, вторая часть заключается в том, что я хотел бы, чтобы один из портов имел псевдоним IP, при этом он также пытается получить адрес DHCP. Я могу сделать это на eth0 без моста, вот так:
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
iface eth0:0 inet dhcp
Уловка заключается в том, как мне совместить это с функцией переключения программного обеспечения? Поскольку brctl работает на уровне 2, я не могу создать eth0: 0, если eth0 является частью br0. Единственное, что я могу сделать, это создать его как br0: 0:
iface br0 inet static
bridge_ports regex eth.*
address 192.168.1.1
netmask 255.255.255.0
iface br0:0 inet dhcp
На самом деле это почти в точности то, что я хотел бы, но с одной странной проблемой: когда порты Ethernet отключены или отсутствует DHCP-сервер, мост не получает свой правильный статический IP-адрес - или он его получит, но не раньше, чем через минуту или две после завершения загрузки.
Итак, у меня вопрос, что случилось с задержкой? Можно как-нибудь от этого избавиться?
В качестве альтернативы, есть ли лучший способ добиться здесь того, что я хочу? Идеальным был бы демон, который периодически опрашивал бы DHCP и, когда ему назначали IP-адрес, помещал его в псевдоним вместо основного интерфейса.
Спасибо.
Обычно интерфейс псевдонима не может получить DHCP.
Попробуйте поставить DHCP на интерфейс br0, а статический IP - на псевдоним br0: 0.
Похоже, вас укусила задержка пересылки.
проверять, выписываться man brctl
для получения подробной информации о том, как настроить различные параметры синхронизации, но по сути происходит то, что, когда brctl собирает ваш мост, ему приходится немного подождать, чтобы изучить топологию вашей новой сети, прежде чем он фактически отправит какие-либо пакеты.
Короткий длинный ответ, это может решить вашу проблему:
# brctl setfd br0 0