Ubuntu 22.04 netns с veth, подключенным к мосту, не может выполнить ping gateway

Ubuntu 22.04 netns с veth, подключенным к мосту, не может выполнить ping gateway

Эй, ребята, это, вероятно, просто что-то глупое, что я упускаю, но у меня возникли проблемы с настройкой сетевого пространства имен для использования в моем VPN. Самое странное, что этот скрипт/настройка работали, а затем внезапно остановились в течение последних нескольких недель.

У меня есть один интерфейс ethernet на сервере со статическим набором IP, который я хочу использовать для всего моего обычного трафика. Затем я использую мост и как его мастер, и подключаю VPN к тому же мосту через виртуальный ethernet. По какой-то причине интерфейс моего VPN может успешно отвечать на запросы ARP, но, похоже, не может пинговать мой шлюз и, следовательно, не может подключиться к Интернету). Я чувствую, что это может быть проблема маршрутизации, но я не могу понять, в чем дело.

Нетплан

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: false
      addresses:
        - 192.168.0.54/24

  bridges:
    br0:
      interfaces:
        - enp3s0
      routes:
      - to: default
        via: 192.168.0.1
      - to: 192.168.0.0/24
      nameservers:
        addresses: [1.1.1.1, 8.8.8.8]

Скрипт для настройки пространства имен VPN Net:

ip link add vpn0 type veth peer name vpn1

ip link set dev vpn0 master br0

ip netns add vpn

ip link set vpn1 netns vpn

ip link set dev vpn0 promisc on
ip link set vpn0 up

ip netns exec vpn ip link set lo up
ip netns exec vpn ip link set vpn1 up

ip netns exec vpn ip address add 192.168.0.53/24 dev vpn1
ip netns exec vpn ip route add default via 192.168.0.1 dev vpn1

Адрес/маршруты VPN

root@sam-server:~# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
5: vpn1@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 06:9e:19:5a:a4:a5 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.0.53/24 scope global vpn1
       valid_lft forever preferred_lft forever
    inet6 fe80::49e:19ff:fe5a:a4a5/64 scope link
       valid_lft forever preferred_lft forever
root@sam-server:~# ip route
default via 192.168.0.1 dev vpn1
192.168.0.0/24 dev vpn1 proto kernel scope link src 192.168.0.53

Обычный адрес/маршруты

root@sam-server:~# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether 88:d7:f6:78:91:72 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.54/24 brd 192.168.0.255 scope global enp3s0
       valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether e6:3d:5a:ce:a9:fb brd ff:ff:ff:ff:ff:ff
    inet6 fe80::e43d:5aff:fece:a9fb/64 scope link
       valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:19:80:3c:94 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
6: vpn0@if5: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP group default qlen 1000
    link/ether 66:2c:f9:35:3d:0e brd ff:ff:ff:ff:ff:ff link-netns vpn
    inet6 fe80::642c:f9ff:fe35:3d0e/64 scope link
       valid_lft forever preferred_lft forever
root@sam-server:~# ip route
default via 192.168.0.1 dev br0 proto static onlink
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.0.0/24 dev br0 proto static scope link
192.168.0.0/24 dev enp3s0 proto kernel scope link src 192.168.0.54

Пинг из VPN Namespae(Кажется, Arp разрешается, но я не могу пропинговать шлюз)

root@sam-server:~# ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
^C
--- 192.168.0.1 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3066ms

root@sam-server:~# ping 192.168.0.54
PING 192.168.0.54 (192.168.0.54) 56(84) bytes of data.
64 bytes from 192.168.0.54: icmp_seq=1 ttl=64 time=0.037 ms
64 bytes from 192.168.0.54: icmp_seq=2 ttl=64 time=0.052 ms
64 bytes from 192.168.0.54: icmp_seq=3 ttl=64 time=0.052 ms
^C
--- 192.168.0.54 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2031ms
rtt min/avg/max/mdev = 0.037/0.047/0.052/0.007 ms
root@sam-server:~# arp
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.0.1              ether   b0:95:75:8c:fe:80   C                     vpn1
192.168.0.54             ether   e6:3d:5a:ce:a9:fb   C                     vpn1
root@sam-server:~#

Надеюсь, этой информации достаточно. При необходимости я могу опубликовать больше.

решение1

Попробуйте добавить MAC-адрес интерфейса, как предложено здесь.Ubuntu 22.04 мост с netplan не работает

   # Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: false
      addresses:
        - 192.168.0.54/24

  bridges:
    br0:
      interfaces:
        - enp3s0
      routes:
      - to: default
        via: 192.168.0.1
      - to: 192.168.0.0/24
      nameservers:
        addresses: [1.1.1.1, 8.8.8.8]
      macaddress: 88:d7:f6:78:91:72

решение2

Я нашел ответ на свою проблему. Оказалось, что все очень просто. По сути, две недели назад я установил Docker. Я не знал об этом, но Docker портит iptables.

root@sam-server:~# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP) <----------- PROBLEM IS HERE
target     prot opt source               destination         
DOCKER-USER  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (1 references)
target     prot opt source               destination         

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere

Так как Docker автоматически устанавливает FORWARD, что DROPмои пакеты не пересылаются на интерфейс. Я предполагаю, ARPчто это работает, так как на него не влияет iptables.

Исправление заключалось в простом сбросе политики для принятия:iptables --policy FORWARD ACCCEPT

Связанный контент