我有一个 OpenVPN 网络,其中有一台服务器和两台客户端。当我在 C1 上设置默认路由以通过 S(启用了 IP 转发和 NATing)时,一切都按预期工作。问题是,如果我将 C1 默认路由指向 C2(它也正确配置为从 VPN 到互联网的 NAT 流量),流量无论如何都会被 S 截取并转发。当我在 C2 上执行 tcpdump 时,没有任何迹象表明任何东西到达那里。是否可以在 OpenVPN 中将客户端设置为其他客户端的网关,或者如果客户端上的路由指向其他客户端,数据包是否会由服务器路由,这是系统属性?
编辑:
方括号代表我的虚拟网络(它实际上并不存在)。C1/C2/S 可以在网络内互相 ping 通,没有问题。我想将流量从 C1 通过 C2 路由到互联网。我可以从 C1(也可能从 C2)通过 S 路由到互联网,但通过 C2 路由不起作用,因为数据包由 S 转发。这似乎是 OpenVPN 服务器不想将数据包发送到它们应该去的地方的问题。
[C1-S(NAT)]——互联网 互联网——[(NAT)C2/]
答案1
如果不知道您要描述的网络拓扑,那么很难完全回答这个问题。不过我认为一般来说,您可以做到您所要求的事情。
请考虑以下场景:
C1--R1--(NAT)--互联网--(NAT)--R2--C2
这里,如果在 R1 和 R2 之间创建了(正确配置的)OpenVPN 隧道,那么 C1 可以与 C2 通信,反之亦然。
这种情况更难得到正确答案:
C2--R1--(NAT)--互联网--(NAT)--R2--C3 C1 / \ C4
其中 C2 和 C3 是 OpenVPN 端点,C1 应使用 VPN 到达 C4。第一个障碍是在 C2 和 C3 之间建立 OpenVPN 隧道,可能分别使用 R1 和 R2 的 UDP 1190 端口转发到 C2 和 C3。
下一步是让 C1 使用 C2 将数据包发送到 C4。这涉及在 C1 和 C4 上配置路由表。C1 设置通过 C2 到 C4 网络的路由,而 C4 设置通过 C3 到 C1 网络的路由。这两条路由都应优先于默认路由。因此,在 C1 上可能是:{route add 192.168.3.0 gw 192.168.2.2},而在 C4 上可能是:{route add 192.168.1.0 gw 192.168.3.2}。这是假设 C2 和 C3 的地址分别为 192.168.2.2 和 192.168.3.2,并且 C1 和 C4 分别与 C2 和 C3 位于同一网络上。
希望这足以回答您的问题并证明在默认网关上配置 VPN 比在客户端上配置 VPN 要容易得多,但两者都有用例。
编辑:根据此拓扑和问题描述,我认为 C1 和 C2 存在路由问题... C1 的默认路由应指向 C2 的 VPN 地址作为路由器。这将迫使 C1 使用 VPN 将数据包发送到 C2,然后 C2 决定如何处理它们。
如果 C2 使用其自己的互联网连接,正如您所展示的,C2 的默认路由应该是其自己的互联网连接。
如果 C2 实际上没有自己的互联网路径而是通过 S,那么 S 应该是 C2 的默认路由器。
答案2
我以前遇到过这个问题,我有一个 vpn 客户端在工作,阻止我访问家庭局域网上的另一台设备。我必须配置到第二台机器的静态路由,因为 vpn 客户端会自动添加默认路由并将所有流量转发到服务器。
如果允许从 C1 到 C2 的流量通过服务器,则需要在 server.conf 中启用客户端到客户端指令,以便客户端可以通过 VPN 相互访问。默认情况下,客户端只能访问服务器。
查看http://openvpn.net/index.php/open-source/documentation/howto.html在“使用路由 VPN(dev tun)时在客户端包括多台机器”下。