Как отключить трансляцию (broadcast) в Linux bridge?

Как можно объединить три хоста с двумя 10 Гбит сетевыми адаптерами в один L2 домен без использования коммутатора? Полагаю, что решение может заключаться в соединении хостов "каждый с каждым" (в виде кольца) и объединении сетевых портов в бридж, при этом необходимо запретить транслирование широковещательного трафика в бридже. Как реализовать данное решение? Есть ли альтернативные способы соединения трех хостов без коммутатора?
  • 19 апреля 2025 г. 3:25
Ответы на вопрос 2
Для создания L2 домена без использования коммутатора и с целью отключения широковещательной трансляции в Linux bridge, вы можете использовать следующие шаги.

1. **Создание сетевого моста**. На каждом хосте создайте бридж и объедините сетевые интерфейсы в этот бридж. Например:

   ```bash
   # Создаем бридж
   ip link add name br0 type bridge
   ip link set br0 up

   # Добавляем интерфейсы в бридж
   ip link set eth0 master br0
   ip link set eth1 master br0
   ```

   Убедитесь, что интерфейсы `eth0` и `eth1` заменены на актуальные для ваших систем.

2. **Отключение широковещательной трансляции**. Можно отключить широковещательную трансляцию (broadcast) в бридже, установив параметр `bridge`:

   ```bash
   echo 0 > /sys/class/net/br0/bridge/forward_delay
   echo 0 > /sys/class/net/br0/bridge/stp_state 
   ```

   Однако, имейте в виду, что полное отключение широковещательного трафика может привести к сетевым проблемам, так как большинство L2 протоколов, включая ARP, основаны на широковещательной рассылке. Однако, если вашей целью является ограничение широковещательных запросов, можно применить фильтрацию.

3. **Фильтрация широковещательного трафика (если поддерживается версия ядра)**. Вы можете использовать `ebtables` для блокировки широковещательного трафика:

   ```bash
   ebtables -A FORWARD -p ARP -j DROP
   ebtables -A FORWARD -p IPv4 -m addrtype --dst-type BROADCAST -j DROP
   ```

   Эти команды будут блокировать ARP пакеты и любые IPv4 пакеты с широковещательным адресом.

### Альтернативные способы соединения трех хостов

1. **Использование режима "мост" для VLAN**: Если ваши сетевые адаптеры поддерживают VLAN, вы можете настроить VLAN для каждой пары хостов, это позволит создать отдельные логические сети между ними.

2. **Соединение через "Mesh"**: Вместо кольцевой топологии вы можете объединить хосты в "mesh". В этом случае каждый хост подключен к двум другим, и вы сможете настроить бриджи на каждой паре интерфейсов для обмена трафиком.

3. **Использование IP tunneling**: Вы можете создать туннели между хостами с использованием `GRE` или `VxLAN`, которые будут эмулировать L2 сети.

Выберите наиболее подходящее решение в зависимости от ваших требований и возможностей оборудования.
В обычном linux‑bridge broadcast off не прокатит, придётся мутить ebtables-правило DROP BROADCAST или тащить Open vSwitch и на портах ставить flood=off. Либо проще запилить софт‑свич на одном хосте, чтоб остальные без лишнего треша гоняли трафик
Похожие вопросы