OpenVPN - 客户端到客户端的流量在一个方向上工作,但在另一个方向上不工作

OpenVPN - 客户端到客户端的流量在一个方向上工作,但在另一个方向上不工作

我有以下 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

  1. 您是否检查过故障 LAN 内部防火墙的范围?
  2. 物理 LAN 接口上的 tcpdump 显示什么?您可以在 tun0 上运行一个,在 eth0 上运行一个(或您的 LAN 接口的任何名称),然后检查流量在哪里中断?也许只是客户端机器方面缺乏答案(如之前提到的无效范围设置)

相关内容