Назад | Перейти на главную страницу

Настроить мостовую сеть vxlan в Linux

Я пытаюсь vxlan с Linux, и эта проблема не давала мне покоя на несколько дней.

Простой Vxlan отлично работает

Простой vxlan с muticast работает для связи между хостами, это просто создает vxlan vtep и назначает IP-адрес:

ip link add vxlan100 type vxlan id 100 group 239.1.1.1 dev enp0s8
ip addr add 10.20.1.2/24 dev vxlan100
ip link set vxlan100 up

После выполнения вышеуказанных команд на обоих хостах топология будет такой:

И это прекрасно работает!

Bridged vxlan не работает

Затем я пытаюсь настроить мостовой vxlan, чтобы соединить контейнеры с vxlan, это не работает. Вот что я сделал для настройки моста и vxlan:

ip link add br0 type bridge
ip link add vxlan100 type vxlan id 100 group 239.1.1.1 dev enp0s8
ip link set dev vxlan100 master br0
ip link set vxlan100 up
ip link set br0 up

Что касается vms / контейнеров, я просто использую сетевое пространство имен и veth peer для тестирования:

ip link add veth0 tyep veth peer name veth1
ip link set dev veth0 master br0
ip link set veth0 up

ip netns add container1
ip link set dev veth1 netns container1
ip netns exec container1 ip link set lo up
ip netns exec contianer1 ip link set veth1 name eth0
ip netns exec container1 ip addr add 10.20.1.2/24 dev eth0
ip netns exec container1 ip link set eth0 up

И топология похожа на следующую диаграмму:

Когда я пытаюсь выполнить эхо-запрос к виртуальной машине 2 от виртуальной машины 1, она выводит ошибку целевой хост недоступен:

[root@localhost ~]# ip netns exec container2 ping -c 3 10.20.1.3
PING 10.20.1.3 (10.20.1.3) 56(84) bytes of data.
From 10.20.1.2 icmp_seq=1 Destination Host Unreachable
From 10.20.1.2 icmp_seq=2 Destination Host Unreachable
From 10.20.1.2 icmp_seq=3 Destination Host Unreachable

--- 10.20.1.3 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 1999ms

Использование tcpdump для захвата пакета на br0, результат:

[root@localhost vagrant]# tcpdump -e -nn -i br0                                                                                                                                          
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:35:02.533609 0e:f3:f2:c1:9a:b5 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 10.20.1.3 tell 10.20.1.2, length 28
15:35:02.533609 0e:f3:f2:c1:9a:b5 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 10.20.1.3 tell 10.20.1.2, length 28
15:35:02.534184 76:c2:07:e6:c2:7b > 0e:f3:f2:c1:9a:b5, ethertype ARP (0x0806), length 42: Reply 10.20.1.3 is-at 76:c2:07:e6:c2:7b, length 28
15:35:03.534274 0e:f3:f2:c1:9a:b5 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 10.20.1.3 tell 10.20.1.2, length 28
15:35:03.534274 0e:f3:f2:c1:9a:b5 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 10.20.1.3 tell 10.20.1.2, length 28
15:35:03.535261 76:c2:07:e6:c2:7b > 0e:f3:f2:c1:9a:b5, ethertype ARP (0x0806), length 42: Reply 10.20.1.3 is-at 76:c2:07:e6:c2:7b, length 28
15:35:04.536105 0e:f3:f2:c1:9a:b5 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 10.20.1.3 tell 10.20.1.2, length 28
15:35:04.536105 0e:f3:f2:c1:9a:b5 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 10.20.1.3 tell 10.20.1.2, length 28
15:35:04.536696 76:c2:07:e6:c2:7b > 0e:f3:f2:c1:9a:b5, ethertype ARP (0x0806), length 42: Reply 10.20.1.3 is-at 76:c2:07:e6:c2:7b, length 28
^C
9 packets captured
9 packets received by filter
0 packets dropped by kernel

Как видно из выходных данных, запрос ARP был отправлен в vxlan, и был получен ответ на br0, но мост не пересылает его VM1. Я полностью не понимаю двух вопросов:

  1. Почему на каждый пинг ICMP приходится два запроса ARP?
  2. Почему не br0 переслать ответ ARP на VM1, даже если MAC-адрес назначения точно VM1?

Для справки я читаю это Сообщение vxlan linux, 2017 г., автор: винсент бернат.

Не уверен, что я сделал что-то не так или пропустил какую-то конфигурацию. Действительно нужно решение или советы по отладке.