Туннель OvS VXLAN с несколькими идентификаторами туннеля работает только для одного идентификатора туннеля - PullRequest
0 голосов
/ 02 января 2019

Я хочу установить туннель VXLAN между сетевыми интерфейсами Linux на разных виртуальных машинах.Точнее, топология выглядит следующим образом.У меня два Ubuntu 16.04 Vagrant с установленным OvS 2.5.5.На каждой виртуальной машине я создал мост OvS с именем kos, и к каждому мосту я добавил порт / интерфейс vxlan с помощью следующей команды:

ovs-vsctl add-port kos vtep -- set interface vtep type=vxlan option:remote_ip=flow option:key=flow

Затем я создал два сетевых интерфейса Linux на каждой машине.Интерфейсы на одном компьютере имеют одинаковый IP-адрес, но разные MAC-адреса.Я хочу, чтобы четыре интерфейса были разделены на две отдельные VXLAN (идентификаторы 1 и 2 соответственно), и использую туннелирование OvS VXLAN для обеспечения связи между интерфейсами на разных виртуальных машинах, но в одной и той же VXLAN.Команды, используемые для создания интерфейсов и подключения их к OvS:

VM1:

ovs-vsctl add-port kos kos11 -- set interface kos11 type=internal mac="02\:00\:00\:00\:00\:11" && ip addr add 10.0.0.1/8 scope link dev kos11 && ip link set kos11 up
ovs-vsctl add-port kos kos21 -- set interface kos21 type=internal mac="02\:00\:00\:00\:00\:21" && ip addr add 10.0.0.1/8 scope link dev kos21 && ip link set kos21 up

VM2:

ovs-vsctl add-port kos kos12 -- set interface kos12 type=internal mac="02\:00\:00\:00\:00\:12" && ip addr add 10.0.0.2/8 scope link dev kos12 && ip link set kos12 up
ovs-vsctl add-port kos kos22 -- set interface kos22 type=internal mac="02\:00\:00\:00\:00\:22" && ip addr add 10.0.0.2/8 scope link dev kos22 && ip link set kos22 up

Каждое имя интерфейса создается путем объединения "kos ", за которым следуют две цифры, первая - VNI интерфейса, вторая - номер виртуальной машины, к которой он принадлежит.

Наконец, я получил порты openflow каждого интерфейса (vtep на обеих виртуальных машинах)., kos11, kos21, kos12, kos22) и добавил следующие потоки OpenFlow:

VM1:

table=0,in_port=2,actions=set_field:1->tun_id,resubmit(,1)
table=0,in_port=3,actions=set_field:2->tun_id,resubmit(,1)
table=0,actions=resubmit(,1)

table=1,tun_id=1,arp,arp_tpa=10.0.0.1,actions=output:2
table=1,tun_id=1,dl_dst=02:00:00:00:00:11,actions=output:2

table=1,tun_id=2,arp,arp_tpa=10.0.0.1,actions=output:3
table=1,tun_id=2,dl_dst=02:00:00:00:00:21,actions=output:3

table=1,tun_id=1,arp,arp_tpa=10.0.0.2,actions=set_field:172.28.128.5->tun_dst,output:1
table=1,tun_id=1,dl_dst=02:00:00:00:00:12,actions=set_field:172.28.128.5->tun_dst,output:1

table=1,tun_id=2,arp,arp_tpa=10.0.0.2,actions=set_field:172.28.128.5->tun_dst,output:1
table=1,tun_id=2,dl_dst=02:00:00:00:00:22,actions=set_field:172.28.128.5->tun_dst,output:1

table=1,actions=drop

VM2:

table=0,in_port=2,actions=set_field:1->tun_id,resubmit(,1)
table=0,in_port=3,actions=set_field:2->tun_id,resubmit(,1)
table=0,actions=resubmit(,1)

table=1,tun_id=1,arp,arp_tpa=10.0.0.2,actions=output:2
table=1,tun_id=1,dl_dst=02:00:00:00:00:12,actions=output:2

table=1,tun_id=2,arp,arp_tpa=10.0.0.2,actions=output:3
table=1,tun_id=2,dl_dst=02:00:00:00:00:22,actions=output:3

table=1,tun_id=1,arp,arp_tpa=10.0.0.1,actions=set_field:172.28.128.4->tun_dst,output:1
table=1,tun_id=1,dl_dst=02:00:00:00:00:11,actions=set_field:172.28.128.4->tun_dst,output:1

table=1,tun_id=2,arp,arp_tpa=10.0.0.1,actions=set_field:172.28.128.4->tun_dst,output:1
table=1,tun_id=2,dl_dst=02:00:00:00:00:21,actions=set_field:172.28.128.4->tun_dst,output:1

table=1,actions=drop

1 - порт openflowсвязан с интерфейсом vtep на обеих виртуальных машинах.

На VM1 2 и 3 - порты открытого потока, связанные с интерфейсами kos11 и kos21 соответственно.

На VM2 2 и 3 - порты открытого потока, связанные с интерфейсамиkos12 и kos22 соответственно.

1 - это VNI VXLAN, к которому принадлежат kos11 и kos12, 2 - это VNI VXLAN, к которым относятся kos21 и kos22.

172.28.128.4 и 172.28.128.5являются IP-адресами сетиинтерфейсы ork, через которые две виртуальные машины могут отправлять эхо-запросы друг другу (AKA - IP-адреса конечных точек туннеля).

После выполнения вышеупомянутых шагов kos11 может пропинговать kos12 и наоборот (работает туннелирование для VXLAN с VNI 1).), тогда как пинг kos22 от kos21 или наоборот приводит к недоступности хоста назначения.Я запустил tcpdump на kos22, пока пинговал его с kos21, и вот что я получил:

ARP, Request who-has 10.0.0.2 tell 10.0.0.1, length 28
ARP, Request who-has 10.0.0.2 tell 10.0.0.1, length 28
ARP, Request who-has 10.0.0.2 tell 10.0.0.1, length 28

Что я делаю не так?Как мне это исправить?

1 Ответ

0 голосов
/ 25 марта 2019

Причина, по которой он не работал, заключается в том, что вы не можете иметь несколько интерфейсов в одной подсети.Обходной путь, который я нашел, - поместить каждый интерфейс в отдельное пространство имен сети Linux.

...