我有一个作为中央路由器的OpenVPN服务器。 它configuration了“拓扑子网”命令。 客户端是Debian Linux节点,每个节点都有一个(或多个)子网直接连接到它们。
其目标是连接到VPN的任何客户端都能够访问连接在其他客户端后面的子网。
为了传播路由信息,我们在客户端和服务器上安装了Quagga。 这可以很好的使用OSPF守护进程。 在所有客户端和服务器上启用路由。
服务器上的路由表如下所示:
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.2.10.1 10.8.0.4 255.255.255.255 UGH 20 0 0 tun0 192.168.100.0 10.8.0.4 255.255.255.0 UG 20 0 0 tun0 192.168.1.0 10.8.0.4 255.255.255.0 UG 20 0 0 tun0
我想要访问的子网是192.168.100.0/24。 有问题的网关反应非常好,我可以连接到它。
我不认为这将有什么用处,但这里是客户端路由表的一部分:
10.2.10.1 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
从服务器(10.8.0.1)Ping到192.168.100.0/24子网中的任何主机(包括VPN客户端接口)都将失败。 如果我tcpdump VPN客户端上的tun接口,我看不到相关的包。 如果我tcpdump tun服务器上的tun接口,我看到有问题的包被发送出去。
真正尖锐的事情是,当我跟踪路由到192.168.100.0子网中的有效IP时,它不会发现任何跳跃(应该只有一个)。 如果我直接跟踪下一跳(10.8.0.4),它的响应很好。
我真的希望我清楚,因为这是一个相当复杂的问题。 我很乐意根据您的要求提供额外的信息。
我觉得奇怪的是,客户端的路由表指向无处(0.0.0.0)。 对于本地networking来说是可以的,但是对于通过隧道的10.2.10.1来说,这可能是一个问题。
我认为一条指向VPN隧道的默认路由就足以让客户端能够路由到其他客户端(只要VPN集中器允许),而不需要路由守护进程运行个人客户。
看看路由表,我怀疑问题是路由更新中携带的“下一跳”对于客户端来说是不可达的,而不是忽略路由,而是安装一个未知的下一跳。
如果您禁用Quagga,而只是使用默认路由,指向VPN隧道,会发生什么情况?
我结束了使用“client-config-dir”,允许我使用“iroute”命令指定每个客户端后面的路由。
之后,我有VPN服务器推送所有这些子网的路由到所有其他客户端,它工作正常。