通过VPN路由时,流量从一台服务器消失到另一台服务器



在以下设置中,当我尝试通过VPN从主机"a"向主机"c"发送ping时,我看到它在主机b的tun0接口上被接收并在eth0上转发,但随后它消失了。我没有看到任何东西进入主机c的eth0接口。最终的结果是ping没有得到回复。我可以直接从主机b ping主机c(其中源ip地址显示在主机b和c所在的子网中,主机a的范围不同(10.8.0.0/16))

如何调试?可能是什么问题?如何检测流量是否由硬件发送?(它会被linux防火墙屏蔽吗?)

设置:

主机(a)->VPN(b)->要ping的主机(c)

主机a具有eth0接口主机b具有tun0和eth0接口。主机c具有eth0接口。

证据:

on host a's tun0 interface 
> sudo tcpdump -i tun0 'icmp[icmptype] = icmp-echo or icmp[icmptype] = icmp-echoreply'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes
05:09:36.878793 IP 10.8.0.6 > 10.10.146.8: ICMP echo request, id 3497, seq 611, length 64
05:09:37.884830 IP 10.8.0.6 > 10.10.146.8: ICMP echo request, id 3497, seq 612, length 64

On host b's eth0 interface 
> sudo tcpdump -i eth0 'icmp[icmptype] = icmp-echo or icmp[icmptype] = icmp-echoreply'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
05:07:43.991961 IP 10.8.0.6 > 10.10.146.8: ICMP echo request, id 3497, seq 499, length 64
05:07:44.997944 IP 10.8.0.6 > 10.10.146.8: ICMP echo request, id 3497, seq 500, length 64
on host c's eth0 interface
> sudo tcpdump -i eth0 'icmp[icmptype] = icmp-echo or icmp[icmptype] = icmp-echoreply'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
<no output>

好吧,经过几个小时的调查,我发现了这一点。

问题出在转发设置上。转发到eth0端口的数据包没有网络中主机的正确源ip地址。ip地址来自VPN。

05:07:43.991961 IP 10.8.0.6 > 10.10.146.8: ICMP echo request, id 3497, seq 499, length 64

您可以通过在linux操作系统中启用等效的NAT(在路由器上)来切换:

iptables -t nat -A POSTROUTING -o <eth0 or whatever else> -j MASQUERADE

这为我修复了这个问题。

相关内容

最新更新