Linux сервер как неуправляемый коммутатор

У меня есть небольшой сервер Ubuntu x64, который предоставляет dhcp, именование, файл и такие услуги для моей домашней сети. Он просто подключен к неуправляемому SOHO коммутатору, лежащему рядом с ним, и просто работает. Но у него есть неиспользуемая сетевая карта 4xGbE i350 в слоте PCIe, и у меня возникла идея использовать эту сетевую карту вместо текущего коммутатора. Возможно, это не будет иметь никаких преимуществ, если это будет обычный неуправляемый коммутатор, как текущее выделенное устройство, но я хотел чему-то научиться (и я мог бы превратить его в управляемый коммутатор позже, возможно, реализовать некоторые IPS/IDS и другие вещи). Как я был удивлен, когда узнал об этом, я понятия не имею. Я, конечно, поискал, но это привело меня в еще большее замешательство. Во-первых, почему во всех руководствах и статьях для достижения коммутации настраиваются мосты? В неуправляемом коммутаторе все порты одинаковы, не имеют IP-адресов, и один из них ведет к шлюзу. Можно ли вообще создать такое на Linux-сервере (игнорируя, что это может быть не очень полезно, учитывая низкую цену маленького коммутатора)?

0
задан 12 March 2021 в 02:45
1 ответ

Используйте драйвер моста.

Мост - это программная реализация коммутатора уровня 2, где каждый интерфейс, добавленный в мост, является портом коммутатора.

Допустим, у вас есть 4 порта i350 в мосте br0 с двумя другими подключенными ПК:

[ Remote PC A - MAC aa:aa:aa:aa:aa ] ---- [ i350 #1 ] ---- .------------.
                                          [ i350 #2 ] ---- |  Linux PC  |
                                          [ i350 #3 ] ---- | bridge br0 |
[ Remote PC B - MAC bb:bb:bb:bb:bb ] ---- [ i350 #4 ] ---- '------------'

Удаленный ПК A пытается связаться с удаленным ПК B.

ПК A отправит ARP-запрос на широковещательный MAC-адрес назначения (все ff ) с собственным исходным MAC-адресом (все aa ).

Мост получит этот запрос ARP и узнает, что MAC aa отключен от порта моста i350 # 1 .

Затем мост пересылает эту широковещательную рассылку на все остальные порты i350, потому что это правильное поведение, когда коммутатор получает широковещательный пакет.

Удаленный ПК B принимает ARP и генерирует ответ на ПК A с MAC-адресом назначения ПК A (все aa ) и собственным исходным MAC-адресом (все bb ).

Мост получит этот ответ ARP и узнает, что MAC bb отключен от порта моста i350 # 4 .

Мост видит, что MAC назначения - aa , и мост знает, что MAC aa доступен в нисходящем порту i350 # 1 , и поэтому отправляет кадр. этот сетевой адаптер.

Вы можете добавить IP-адрес к мосту и использовать его как обычный сетевой интерфейс, маршрутизировать с ним, NAT с ним и т. Д., Но это необязательно.

Сказанное выше происходит, даже если ядро ​​настраивается net.ipv4.ip_forward = 0 установлен, поскольку драйвер моста не выполняет IP-переадресацию, IP-маршрутизацию или IP-NAT, он выполняет коммутацию пакетов уровня 2, как любой другой неуправляемый коммутатор уровня 2.

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

Вы сказали, что используете Ubuntu. Следующее должно работать для Ubuntu 20.04 с использованием NetworkManager:

/etc/NetworkManager/system-connections/br0.nmconnection

[connection]
id=br0
type=bridge
interface-name=br0
permissions=

[bridge]
stp=false

[ipv4]
dns-search=
ignore-auto-dns=true
ignore-auto-routes=true
method=disabled
never-default=true

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
ignore-auto-dns=true
ignore-auto-routes=true
method=ignore
never-default=true

[proxy]

Повторите этот файл для каждого i350 с именем netX , используя правильный MAC-адрес каждого сетевого адаптера:

/etc/NetworkManager/system-connections/netX.nmconnection

[connection]
id=netX
type=ethernet
interface-name=netX
master=br0
metered=2
permissions=
slave-type=bridge

[ethernet]
mac-address=xx:xx:xx:xx:xx:xx
mac-address-blacklist=

[bridge-port]
1
ответ дан 24 April 2021 в 01:41

Теги

Похожие вопросы