VXLAN L3 через Wireguard L3 с сопоставлением VLAN-VNI
Надеясь, что это правильное место - изначально я писал о сетевой инженерии, но он закрылся, и мне указали на ошибку сервера.
В настоящее время я пытаюсь настроить мост L2 между двумя сайтами, используя VXLAN для обеспечения подключения L2 и Wireguard в качестве транспорта/L3. Ранее я создавал подобный мост уровня 2, используя GRE через Wireguard, и он был надежен, но сейчас я пытаюсь лучше понять VXLAN и собираюсь заменить туннель GRE на VXLAN.
Я пытался использовать информацию и здесь , и здесь , но хоть убей, я не могу заставить трафик передаваться по IP-адресам, не связанным с проводной защитой, между сайтами.
У меня есть две машины Debian с установленными Bridge-utils. Они также используют nftables с правилами, позволяющими отбрасывать весь DHCP-трафик, поскольку, когда я впервые настраивал туннель GRE, в итоге машины получали назначенные IP-адреса из удаленной сети. Но все остальное разрешено и доступно только извне через порт Wireguard.
Хост A настроен с:
Wireguard wg0 - 172.30.100.1/24
Bridge br0 - 10.0.0.160/24
Хост B настроен с:
Wireguard wg0 - 172.30.100.2/24
Bridge br0 - 10.1.0.160/24
The AllowedIPs
в конфигах Wireguard только для подсети Wireguard172.30.100.0/24
. Это работало с конфигурацией GRE, и я предполагаю, что будет работать и с VXLAN, поскольку трафик VXLAN инкапсулируется в туннеле Wireguard. Хосты могут пинговать и ssh друг друга по своим IP-адресам Wireguard, так что этот бит работает нормально.
Оба моста имеют порт,bridge-vlan-aware yes
иbridge-vids 1-4096
в/etc/network/interfaces
У меня есть сценарий, основанный на «Рецепте 2» из первой ссылки, которую я разместил выше, то есть один туннель с несколькими VNI. Идея в том, что скрипт добавляет интерфейс VXLAN вbr0
, который ждет до тех пор, пока не заработает (с использованием службы systemd), а затем зацикливается для сопоставления VLAN/VNI.
#!/bin/bash
# Gets Wireguard interface IP address.
wgip=`ip a s wg0 | egrep -o 'inet [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | cut -d' ' -f2`
ip link add vx0 type vxlan dstport 4789 external local $wgip dev wg0 # Creates vxlan with wg0 IP as local
#Here is where I may be going wrong but I've tried various combinations ^^^
sleep 1
ip link set dev vx0 master br0 # Adds vxlan to bridge
bridge link set dev vx0 vlan_tunnel on # Enables vlan tunnel on vxlan
# Maps each VLAN to VNIs across the tunnel.
for vlan in 10 20 30; do
bridge vlan add vid $vlan dev vx0
bridge vlan add vid $vlan dev ens18
bridge vlan add dev vx0 vid $vlan tunnel_info id $vlan
# Think I can remove the below line if I switch to BGP-EVPN for learning later?
bridge fdb append 00:00:00:00:00:00 dev vx0 vni $vlan dst 10.1.0.160
done
ip link set dev vx0 up
Возможно, я здесь совершенно на неправильном пути, но если в вышеизложенном есть что-то, что не соответствует действительности, мы будем очень признательны за любые указания в правильном направлении!
(Возможно, дело даже в маршрутизации, а не в настройке. Для конфигурации Wireguard установлено значение Table=off, что я и сделал в конфигурации GRE/WG)
ОБНОВЛЕНИЕ Похоже на флаг вvx0
линия настройки вызывает драму. Если я изменю его на приведенное ниже, а также изменю статическую запись FDB на удаленнуюwg0
IP, а не удаленныйens18
IP, я могу пропинговать хост к хосту:
ip link add vx0 type vxlan dstport 4789 vni 1000 local $wgip dev wg0
Тогда похоже, что нетегированный трафик проходит через VNI 1000, а VID 10, 20 и 30 сопоставляются с соответствующими VNI.
Что этоexternal
флаг, это помешает работе исходной конфигурации? Это отсутствие явного сопоставления VID 1?