Я хочу создать тестовую среду для STP/RSTP. в конце концов я пришел эта почта который предложил использовать пространства имен. Похоже, это было именно то, что я хотел создать простейшую среду STP. В итоге я написал такой скрипт:
#!/бин/баш
если [ "$EUID" -ne 0 ]
затем эхо "Пожалуйста, запустите как root"
выход
фи
# Первый случай: попробуйте одну пару veth
ip netns добавить синий
ip link add veth0 type veth peer veth1 netns blue
IP-ссылка добавить тип veth2 veth peer veth3 netns blue
IP-ссылка установлена veth0 вверх
ip netns exec blue ip link set veth1 up
IP-ссылка настроена veth2 вверх
ip netns exec blue ip link set veth3 up
IP-ссылка добавить мост типа mybridge
ip link set veth0 master mybridge
ip link set veth2 master mybridge
ip netns exec blue ip link добавить мост типа bluebridge
ip netns exec blue ip link set veth1 master bluebridge
ip netns exec blue ip link set veth3 master bluebridge
IP-адрес добавить 10.200.0.1/24 dev mybridge
#brctl stp mybridge включен
ip link set mybridge type bridge stp_state 1
ip link настроить mybridge
# начинаем здесь записывать пакеты
echo "Начать запись пакетов. Нажмите любую клавишу, чтобы продолжить"
читать -n 1
ip netns exec blue ip addr add 10.200.0.2/24 dev bluebridge
#ip netns exec blue brctl stp bluebridge на
ip netns exec blue ip link set тип bluebridge мост stp_state 1
ip netns exec blue ip link set bluebridge up
Почти все время я оказываюсь в состоянии, когда и veth0, и veth2 пересылают, и я получаю шторм, который заставляет мою машину работать, пока я не отключу какой-либо из интерфейсов.
Я надеюсь, что само ядро (4.19.128, работающее в WSL 2.0 для моего текущего теста) сможет обнаружить их и... не вызвать бурю. Кроме того, я надеюсь, что смогу использовать программу RSTP пользовательского пространства, такую как mstpd (commit f55f783610e65149), на одном или обоих этих мостах и расширять сетевую архитектуру, перехватывая пакеты на любом из интерфейсов по пути.
Есть что-то, что мне не хватает? Я также пробовал это с тремя сетевыми пространствами имен - все еще казалось почти всегда привести к буре.
Я видел пару случаев, когда один порт блокировался, а другой перенаправлялся, как я и ожидал. Похоже, это скорее исключение, чем правило.
Для тех, кто играет дома, простой скрипт для отмены всех интерфейсов:
#!/бин/баш
если [ "$EUID" -ne 0 ]
затем эхо "Пожалуйста, запустите как root"
выход
фи
# Убить синего
ip netns exec blue ip link del bluebridge
ip netns exec blue ip link del veth1
ip netns exec blue ip link del veth3
ip netns дель синий
IP-ссылка на mybridge