0

在以下设置中,当我尝试通过 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>
4

1 回答 1

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 OS 中启用等效的 NAT(在路由器上)来切换它:

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

这为我解决了这个问题。

于 2013-07-13T19:09:44.600 回答