在以下设置中,当我尝试从主机'a'通过VPN向主机'c'发送ping时,我看到它在主机b的tun0接口上被接收并在eth0上转发,但随后它消失了。我没有看到任何东西进入主机c的eth0接口。最终结果是没有回复ping。我可以直接从主机b ping主机c(其中源IP地址显示在主机b和c所在的子网内,主机a具有不同的范围(10.8.0.0/16))。
我该如何调试?可能是什么问题?如何检测流量是否由硬件发出? (它可以被linux防火墙阻止吗?)
设定:
主持人(a) - > VPN(b) - >寄主(c)
主持一个有eth0接口 主机b有tun0和eth0接口。 host 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>
答案 0 :(得分:0)
好的,经过几个小时的调查,我发现了这一点。
问题在于转发设置。 转发到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
这解决了我的问题。