此模型的问题是无法联系到某些(仅某些)客户端。有关下一节中将要描述的模型的更多信息,请参阅下面的链接。
问题描述
两个客户端 (1.1 和 1.2.3) 都可以连接到 VPN 服务器 (1)。服务器 (1) 未在 OpenVPN conf 文件中使用客户端到客户端声明。
服务器 (1) 可以 ping 通两个客户端 (1.1 和 1.2.3),两个客户端 (1.1 和 1.2.3) 可以互相 ping 通,也可以 ping 通服务器 (1)。NAT 后面的路由器 (1.1) 后面的本地客户端 (1.1.1 和 1.1.2) 可以互相 ping 通,也可以 ping 通路由器 (1.1)。另一个网络 (1.2 后面) 也是如此,其中所有客户端 (1.2.1、1.2.2 和 1.2.3) 都可以互相 ping 通,也可以 ping 通路由器 (1.2)。到目前为止没有问题。
两个路由器(1.1 和 1.2)都已正确设置了静态路由。第一个网络(1.1)中的路由器未设置静态路由,这些路由由 VPN 服务器推送。第二个网络(1.2)中的路由器不是 VPN 网关,因此其路由如下:
网络 192.168.1.0/24 网关 192.168.2.103
网络 192.168.10.0/24 网关 192.168.2.103
然后,第二个网络(1.2.3)上的 VPN 客户端再次从服务器推送路由。
回到客户端站点的访问问题 - 现在这些位于 NAT 后面的客户端无法从一个网络访问到另一个网络;有些可以,有些则不能。举几个例子:
登录到服务器(1)时,我可以 ping 1.1.1,但无法 ping 1.1.2。
登录到客户端(1.1.1)时,我可以 ping 1.2.1,但不能 ping 1.2.2。
临时解决方案
对于某些客户端,我可以在添加其静态路由时看到临时修复,这可以通过 Linux 计算机完成。它们的路由表(例如计算机 1.1.2)可能仅包含网络 1.1 的信息。添加其他网络(1.2)的静态路由确实可以使其工作,但并非所有客户端都可以这样做。
另一个非常临时的解决办法是尝试使用 traceroute 命令从 1.2.2 到 1.1.2,这样实际上可能可以顺利到达机器,然后我可以 ping 几分钟。但过了一会儿,路由就消失了。
但这些都不是永久的解决方案。
出现的一些问题
我需要注意的是,我最近刚刚交换了一个路由器 1.2,但所有路由都设置得与之前的机器一样。
还有一些其他问题:
这是 DNS 问题吗?如果是,为什么 ping 命令对 IP 不起作用,而对域名不起作用?
为什么 traceroute 可以工作而 ping 却不行?没有防火墙来阻止它,即使有,traceroute 又如何能强制 ping 命令在短时间内工作?
为什么有些客户端不需要设置静态路由,而其他客户端却需要设置静态路由才能在网络上进行 ping 操作?
这可能与网络上设备的启动顺序有关吗?我也尝试过重新启动/关闭所有设备,但没有任何效果。我的想法是,内存中的路由将在重新启动时被清除,而新的路由将从路由器“获取”。
目标
目的是解决这个问题,使所有网络上的所有客户端都可以访问,并且除了路由器之外的任何地方都不放置静态路由。
答案1
我自己找到了解决方案,这是由路由器中设置的 iptables 规则引起的。我的新路由器恰好是 ASUS RT-N12,它包含一个丢弃无效数据包的 FORWARD 规则。此规则在静态路由中存在问题。
解决方案是创建一个脚本,在启动时自动删除 FORWARD 规则:
iptables -D FORWARD -m state --state INVALID -j DROP
要了解有关此问题的更多信息,请随时阅读论坛主题。