我有以下 VPN 配置:
+------------+ +------------+ +------------+
| outpost |----------------| kino |----------------| guchuko |
+------------+ +------------+ +------------+
OS: FreeBSD 6.2 OS: Gentoo 2.6.32 OS: Gentoo 2.6.33.3
Keyname: client3 Keyname: server Keyname: client1
eth0: 10.0.1.254 eth0: 203.x.x.x eth0: 192.168.0.6
tun0: 192.168.150.18 tun0: 192.168.150.1 tun0: 192.168.150.10
P-t-P: 192.166.150.17 P-t-P: 192.168.150.2 P-t-P: 192.168.150.9
Kino 是服务器,启用了客户端到客户端。我在三台机器上都使用了“fragment 1400”和“mssfix”。两个连接的 mtu 测试均成功。三台机器都启用了 ip 转发,在 gentoo 盒子上是这样:
net.ipv4.conf.all.forwarding = 1
在 FreeBSD 机器上如下:
net.inet.ip.forwarding: 1
在服务器的“ccd”目录中有以下文件:
客户端1:
iroute 192.168.0.0 255.255.255.0
客户3:
iroute 10.0.1.0 255.255.255.0
服务器配置了以下路由:
push "route 192.168.0.0 255.255.255.0"
push "route 10.0.1.0 255.255.255.0"
route 192.168.0.0 255.255.255.0
route 10.0.1.0 255.255.255.0
Kino 的路由表如下所示:
192.168.150.0 192.168.150.2 255.255.255.0 UG 0 0 0 tun0
10.0.1.0 192.168.150.2 255.255.255.0 UG 0 0 0 tun0
192.168.0.0 192.168.150.2 255.255.255.0 UG 0 0 0 tun0
192.168.150.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
前哨站是这样的:
192.168.150 192.168.150.17 UGS 0 17 tun0
192.168.0 192.168.150.17 UGS 0 2 tun0
192.168.150.17 192.168.150.18 UH 3 0 tun0
Guchuko 是这样的:
192.168.150.0 192.168.150.9 255.255.255.0 UG 0 0 0 tun0
10.0.1.0 192.168.150.9 255.255.255.0 UG 0 0 0 tun0
192.168.150.9 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
现在,进行测试。
从 Guchuko 到 Outpost 的 LAN IP 的 ping 工作正常,反向 ping 从 Outpost 到 Guchuko 的 LAN IP 也正常。但是...
从 Outpost 向 Guchuko 的 LAN 上的一台机器执行 ping 操作正常:
.(( root@outpost )). (( 06:39 PM )) :: ~ ::
# ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3): 56 data bytes
64 bytes from 192.168.0.3: icmp_seq=0 ttl=63 time=462.641 ms
64 bytes from 192.168.0.3: icmp_seq=1 ttl=63 time=557.909 ms
但是从 Guchuko 向 Outpost LAN 上的一台机器执行 ping 操作却没有出现以下情况:
.(( root@guchuko )). (( 06:43 PM )) :: ~ ::
# ping 10.0.1.253
PING 10.0.1.253 (10.0.1.253) 56(84) bytes of data.
--- 10.0.1.253 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2000ms
Guchuko 的 tun0 tcpdump 显示:
18:46:27.716931 IP 192.168.150.10 > 10.0.1.253: ICMP echo request, id 63009, seq 1, length 64
18:46:28.716715 IP 192.168.150.10 > 10.0.1.253: ICMP echo request, id 63009, seq 2, length 64
18:46:29.716714 IP 192.168.150.10 > 10.0.1.253: ICMP echo request, id 63009, seq 3, length 64
Outpost 在 tun0 上的 tcpdump 显示:
18:44:00.333341 IP 192.168.150.10 > 10.0.1.253: ICMP echo request, id 63009, seq 3, length 64
18:44:01.334073 IP 192.168.150.10 > 10.0.1.253: ICMP echo request, id 63009, seq 4, length 64
18:44:02.331849 IP 192.168.150.10 > 10.0.1.253: ICMP echo request, id 63009, seq 5, length 64
因此,Outpost 正在接收发往其子网上的机器的 ICMP 请求,但似乎没有转发它。Outpost 在其 rc.conf 中具有 gateway_enable="YES",它正确地将 net.inet.ip.forwarding 设置为 1,如前所述。据我所知,这就是使 FreeBSD 盒在接口之间转发数据包所需的全部操作。我可能忘记了其他什么吗?FWIW,从 Kino ping 10.0.1.253 得到相同的结果 - 流量未被转发。
更新:我发现我只能从 Outpost ping Guchuko 的 LAN 上的某些 IP。从 Outpost 我可以 ping 192.168.0.3 和 192.168.0.2,但无法访问 192.168.99 和 192.168.0.4。可以看到相同的 tcpdump 行为。我认为这意味着问题不可能是由于 ipforwarding 或路由引起的,因为 Outpost 可以访问 Guchuko 的 LAN 上的某些主机,但不能访问其他主机,同样,Guchuko 可以访问 Outpost 的 LAN 上的两个主机,但不能访问其他主机。这让我很困惑。
答案1
我要检查两件事:
首先,检查无法 ping 通的主机上没有防火墙或者其他接收 icmp 的设备。
其次,检查无法 ping 通的机器上的路由规则,确保它们具有将回复返回 VPN 网关的路由条目(直接或通过知道如何到达 VPN 网关的默认路由)。监听/wireshark 无法 ping 通的节点上的目标接口,确保您可以看到传入的请求以及回复的去向。
答案2
- 您是否检查过故障 LAN 内部防火墙的范围?
- 物理 LAN 接口上的 tcpdump 显示什么?您可以在 tun0 上运行一个,在 eth0 上运行一个(或您的 LAN 接口的任何名称),然后检查流量在哪里中断?也许只是客户端机器方面缺乏答案(如之前提到的无效范围设置)