我正在尝试路由,现在我遇到了一个我自己无法解决的问题
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,我能够解决这个问题