Я пытался понять это уже довольно давно. Так что теперь я попытаю счастья здесь...
У меня есть несколько виртуальных машин, которые должны взаимодействовать с не виртуальными машинами. Есть 2 варианта использования.
Первые — это BareMetal Machines в подсети, в которой находится внешний маршрутизатор. Вторые — это машины снаружи и позади шлюза, на который указывает внешний маршрутизатор.
Итак, у нас есть два пути подключения:
ВМ --> шлюз внешнего маршрутизатора --> интернет-шлюз --> шлюз в другом месте --> другой компьютер в этой подсети
ВМ --> шлюз внешнего маршрутизатора --> интернет-шлюз --> компьютер без операционной системы в этой подсети
Итак, чтобы сделать это еще более наглядным: внешний маршрутизатор будет иметь шлюз, например, 10.5.1.10, а сервер, к которому нужно подключиться, находится по адресу 10.5.1.80.
Так что все хорошо до сих пор, пакеты идут, но не все. И тут становится странно, и я ищу причину.
Таким образом, эти виртуальные машины запускают kubernetes и должны подключаться к другим машинам без операционной системы в этой подсети. Работает сеть calico, поэтому пакеты BGP передаются.Странно то, что эти пакеты никогда не достигают машин без операционной системы, но они прекрасно справляются с машинами за пределами подсети внешних маршрутизаторов. Итак, я посмотрел данные и заметил, что пакеты уже исчезают на гипервизоре виртуальной машины. Они все еще видны на тап-устройстве, но после этого просто теряются.
Так что совершенно очевидно, что что-то отфильтровывает эти пакеты. Теперь остается вопрос: почему? У меня какая-то неправильная конфигурация, я что-то не так понял? Или есть способ заставить всю установку проглатывать эти пакеты? У меня была эта проблема, кстати. также с фланелевыми пакетами vxlan... .
Моя настройка в целом такова: openstack через kolla, openvswitch, внешняя сеть настроена как плоская сеть.
Проверил правила iptable, но для подсети правил вообще нет. И, как описано ранее, пакеты, которые маршрутизируются не в сеть 10.5.0.0/16, а, например, в сеть 10.50.0.0/16, которая находится за пределами этого центра обработки данных и неизвестна openvswitch/openstack. Значит, это как-то связано с внешней сетью, настроенной на 10.5.0.0/16, которая незаконно удаляет эти пакеты.
Еще немного информации:
Это интерфейс виртуальной машины, показанный ovs-vctl.
Порт qvo503122c8-15
тег: 1
Интерфейс qvo503122c8-15
Ставим на это tcpdump
tcpdump -i qvo503122c8-15 -vvv | grep bgp
tcpdump: прослушивание на qvo503122c8-15, тип ссылки EN10MB (Ethernet), размер захвата 262144 байт
Совершенно ничего не дает. Но связь в целом там видна. Глядя на главное устройство, они все еще там
tcpdump -i qbr503122c8-15 -vvv | grep bgp
tcpdump: прослушивание на qbr503122c8-15, тип ссылки EN10MB (Ethernet), размер захвата 262144 байт
10.5.3.44.53969 > 10.15.0.91.bgp: Флаги [S], cksum 0x17b7 (неверно -> 0x0748), seq 607368, win 64860, параметры [mss 1410, sackOK, TS val 2138674293 ecr 0,nop,wscale 7] , длина 0
10.5.3.44.41505 > 10.15.0.92.bgp: флаги [S], cksum 0x17b8 (неправильно -> 0x572f), seq 103292561, win 64860, параметры [mss 1410, sackOK, TS val 2567404423 ecr 0,nop,wscale 7] , длина 0
10.5.3.44.53969 > 10.15.0.91.bgp: Флаги [S], cksum 0x17b7 (неверно -> 0xff67), seq 607368, win 64860, параметры [mss 1410,sackOK,TS val 2138676309 ecr 0,nop,wscale 7] , длина 0
10.5.3.44.49645 > 10.15.0.91.bgp: Флаги [S], cksum 0x17b7 (неправильно -> 0xb20c), seq 137205467, win 64860, параметры [mss 1410, sackOK, TS val 2138677277 ecr 0,nop,wscale 7] , длина 0
10.5.3.44.49787 > 10.15.0.92.bgp: Флаги [S], cksum 0x17b8 (неверно -> 0x9dee), seq 608997803, win 64860, параметры [mss 1410, sackOK, TS val 2567406383 ecr 0,nop,wscale 7] , длина 0
Для сравнения, на этой же машине, на другой ВМ, тоже такая же проблема и эти пакеты пропадают, но в данном случае есть какие-то машины за пределами одного датацентра. И они прекрасно достигаются в их подсети. Зарегистрированные здесь пакеты не исчезнут:
tcpdump -i qbr2d9b68d1-b7: -vvv | grep bgp
tcpdump: прослушивание на qbr2d9b68d1-b7:, тип ссылки EN10MB (Ethernet), размер захвата 262144 байт
192.168.1.3.58395 > 10.5.0.177.bgp: Flags [P.], cksum 0x0961 (правильно), seq 2080765188:2080765207, ack 2634444892, win 505, options [nop,nop,TS val 3871674756 length], 1933 6 1ecr 1ecr : BGP
10.5.0.177.bgp > 192.168.1.3.58395: Флаги [.], cksum 0xcc82 (неверно -> 0x44c4), seq 1, ack 19, win 502, options [nop,nop,TS val 2568187609 ecr 3871674789], длина 0
Однако сейчас я вижу одну вещь: второй tcpdump показывает, что виртуальная машина взаимодействует с внешним через свой собственный адрес. Пока остальные пытались общаться с плавающим ip. Плавающие IP-пакеты, похоже, отфильтровываются.