桥接路由和火星数据包

桥接路由和火星数据包

我正在尝试路由,现在我遇到了一个我自己无法解决的问题

                              eth0 
                                |
                                |
                                |
    ------------------------   br0   ------------------------ 
    |                    (192.168.100.1)                    |
    |                                                       |
    |                                                       |
    |                                                       |
lxc_vpn_eth0                                          lxc_test_eth0                                              
(192.168.100.120)                                     (192.168.100.130)
    |
    |
   tun0

我想将一些数据包(udp)从lxc容器(测试)发送到另一个lxc容器(vpn),并从那里通过在该容器内运行的openvpn,到目前为止,这有效,但不知何故,响应由内核标记作为火星人并从桥上掉落 br0

我在数据包经过的所有 3 个“位置”上使用 tcpdump 进行了测试,结果如下:(
在 VPN 容器中) #tcpdump -i eth0
21:25:12.043321 IP 192.168.100.1.55081 > XX.YY.UU.VV.6969: UDP, length 16
21:25:12.097040 IP XX.YY.UU.VV.6969 > 192.168.100.1.55081: UDP, length 16

正如你所看到的,我正在伪装 tun0 上的数据包

因此,来自测试容器的数据包到达 vpn 容器,通过 tun0 出去,我得到一个答案,但是一旦这个响应数据包被放置在网桥上,我就会在内核日志中得到这个:
kernel: [c0] IPv4: martian source 192.168.100.120 from XX.YY.UU.VV, on dev br0

那么我必须如何配置路由,以使响应数据包不会被丢弃?它应该已经在 ip 192.168.100.120 的容器所在的桥上,并等待它......

提前感谢您帮助我,我很乐意为您提供更多信息...(我不想发布所有路由表,因为我不想在帖子中填写可能无用的信息)

答案1

抱歉这个问题...

经过数小时的流量嗅探、数据包跟踪和大量的试错,我发现我在 br0 上伪装了数据包……我可能这样做了,因为对于容器,硬件交换机上有 2 台计算机,需要在 eth0 上进行路由。无论如何,这导致了数据包中出现奇怪的 src 标头……

通过伪装流量以太网0而不是br0,我能够解决这个问题

相关内容