隧道数据包会被过滤或剥离,某些数据包(如 BGP)也会被过滤或剥离。

隧道数据包会被过滤或剥离,某些数据包(如 BGP)也会被过滤或剥离。

我已经尝试解决这个问题一段时间了。所以我现在在这里试试运气……

我有一些虚拟机需要与非虚拟机进行通信。有两种用例。

第一组是外部路由器所在子网上的裸机。第二组是外部路由器指向的网关外面和后面的机器。

因此我们有这两条连接路径:

VM --> 外部路由器网关 --> 互联网网关 --> 其他地方的网关 --> 此子网上的其他机器

虚拟机 --> 外部路由器网关 --> 互联网网关 --> 此子网上的裸机

为了使其更加直观:外部路由器的网关例如位于 10.5.1.10,要到达的服务器位于 10.5.1.80。

到目前为止一切都很好,数据包在流动,但不是全部。现在情况变得奇怪了,我正在寻找原因。

因此,这些虚拟机运行 kubernetes,应该连接到该子网上的其他裸机。运行的网络是 calico,因此正在传输 BGP 数据包。奇怪的是,这些数据包从未到达裸机,但它们与外部路由器子网之外的机器配合得很好。所以我查看了数据并注意到,数据包已经在虚拟机的管理程序上消失了。它们在 tap 设备上仍然可见,但之后它们就丢失了。

因此很明显,有些东西正在过滤这些数据包。现在剩下的问题是:为什么?我的配置是否错误,我理解错了什么吗?或者有没有办法让整个设置吞掉这些数据包?顺便说一句,我也遇到过这个问题。还有 flannel vxlan 数据包......

我的一般设置是:通过kolla的openstack,openvswitch,外部网络设置为flatnetwork。

我检查了 iptable 规则,但子网根本没有规则。如前所述,数据包不是路由到 10.5.0.0/16 网络,而是路由到例如 10.50.0.0/16 网络,该网络位于此数据中心之外,并且 openvswitch/openstack 无法识别。因此,这一定与在 10.5.0.0/16 上配置的外部网络有关,该网络非法删除了这些数据包。

更多信息:

这是ovs-vctl显示的VM的界面。

    Port qvo503122c8-15
    tag: 1
    Interface qvo503122c8-15

将 tcpdump 放在上面

tcpdump -i qvo503122c8-15 -vvv | grep bgp
tcpdump: listening on qvo503122c8-15, link-type EN10MB (Ethernet), capture size 262144 bytes

结果一无所获。但总体而言,通信在那里是可见的。看看主设备,它们仍然在那里

tcpdump -i qbr503122c8-15 -vvv | grep bgp
tcpdump: listening on qbr503122c8-15, link-type EN10MB (Ethernet), capture size 262144 bytes
    10.5.3.44.53969 > 10.15.0.91.bgp: Flags [S], cksum 0x17b7 (incorrect -> 0x0748), seq 607368, win 64860, options [mss 1410,sackOK,TS val 2138674293 ecr 0,nop,wscale 7], length 0
    10.5.3.44.41505 > 10.15.0.92.bgp: Flags [S], cksum 0x17b8 (incorrect -> 0x572f), seq 103292561, win 64860, options [mss 1410,sackOK,TS val 2567404423 ecr 0,nop,wscale 7], length 0
    10.5.3.44.53969 > 10.15.0.91.bgp: Flags [S], cksum 0x17b7 (incorrect -> 0xff67), seq 607368, win 64860, options [mss 1410,sackOK,TS val 2138676309 ecr 0,nop,wscale 7], length 0
    10.5.3.44.49645 > 10.15.0.91.bgp: Flags [S], cksum 0x17b7 (incorrect -> 0xb20c), seq 137205467, win 64860, options [mss 1410,sackOK,TS val 2138677277 ecr 0,nop,wscale 7], length 0
    10.5.3.44.49787 > 10.15.0.92.bgp: Flags [S], cksum 0x17b8 (incorrect -> 0x9dee), seq 608997803, win 64860, options [mss 1410,sackOK,TS val 2567406383 ecr 0,nop,wscale 7], length 0

相比之下,这台相同的机器,不同的虚拟机,也存在同样的问题,这些数据包消失了,但在这种情况下,有些机器位于同一个数据中心之外。这些机器在其子网上可以正常到达。此处记录的数据包不会消失:

tcpdump -i qbr2d9b68d1-b7: -vvv | grep bgp        
tcpdump: listening on qbr2d9b68d1-b7:, link-type EN10MB (Ethernet), capture size 262144 bytes
    192.168.1.3.58395 > 10.5.0.177.bgp: Flags [P.], cksum 0x0961 (correct), seq 2080765188:2080765207, ack 2634444892, win 505, options [nop,nop,TS val 3871674789 ecr 2568136223], length 19: BGP
    10.5.0.177.bgp > 192.168.1.3.58395: Flags [.], cksum 0xcc82 (incorrect -> 0x44c4), seq 1, ack 19, win 502, options [nop,nop,TS val 2568187609 ecr 3871674789], length 0

不过,我现在可以看到一件事:第二个 tcpdump 显示虚拟机通过其自己的地址与外部通信。而其他虚拟机则尝试与浮动 IP 通信。浮动 IP 数据包似乎被过滤掉了。

相关内容