我们有 2 个网络。第一个是 OpenVPN 服务器,网络为 10.170。第二个是网关服务器,用于我们的笔记本电脑、打印机等,网络为 10.133.10.1。它的 OpenVPN-IP 为 10.170.0.19
它们之间的连接很稳定,但一旦我添加路由,第二个网络中的所有客户端都没有互联网。 2 个服务器之间的连接仍然稳定,我也可以从第一个网络访问网络 2 中的设备,但在那里,窗口显示“无互联网连接”,我们无法打开任何网站。
我在 10.133.10.1 上使用的路由命令是:ip route add 10.133.10.0/24 via 10.170.0.19 dev tun0
。我发现这会导致错误,因此我手动执行了此操作。之前,我们route 10.133.10.0 255.255.255.0
在客户端配置中使用了此命令。
什么原因可能导致此错误以及如何修复?
答案1
该路由导致 Internet 访问无法正常工作的原因是它将 Internet 流量路由到错误的方向。当 10.133.10.1 从 Internet 收到数据包时,它需要将其直接发送到 10.133.10.0/24 网络中的机器。您的路由告诉它将这些数据包发送到 10.170.0.19。有了该路由,来自 Internet 的数据包就无法到达 10.133.10.0/24 网络中除 10.133.10.1 之外的任何机器。
要让流量到达需要去的地方,您可以在源机器上输入适当的路由,也可以让流量遵循该机器的默认路由并在路由器上添加适当的路由。后者可能更好。
因此,打印机 10.133.10.41 需要通过 10.133.10.1 到达 10.170.0.0/24 网络中的机器。但我们不想为 10.133.10.0/24 网络上的每台设备添加路由,因此我们可以在 10.133.10.1 机器上执行此操作,因为这是它们现在将发送流量的地方。因此,我们需要 10.133.10.1 上的路由,以便将发往 10.170.0.0/24 的数据包发送到 10.170.0.1。
我们也需要返回流量。因此 10.170.0.2 需要通过 10.170.0.19 到达 10.133.10.0/24 网络中的机器。但我们不想在每台设备上添加路由,因此我们可以在 10.170.0.1 上执行此操作,告诉它将发往 10.133.10.0/24 的数据包发送到 10.170.0.19。
OpenVPN 服务器可能已经自动设置了后一条路由,因为它应该知道 10.133.10.0/24 可以通过 VPN 访问。因此您可能只需要添加第一条路由。
所以我认为您错在ip route
命令中的 10.133.10.0/24 应该是 10.70.0.0/24。
答案2
诚实的问题,不是讽刺:如果网关服务器连接到两个网络,为什么需要路由?
尽管如此,您是否有返回 10.170.0.0/24 网络的路由?我认为您可能需要添加ip route 10.170.0.0/24 via 10.133.10.1
。
答案3
是否需要添加路由10.133.10.0/24
取决于OVPN Server
:
- 无论你是否需要
OVPN Server
本身能够联系到10.133.10.0/24
主机 - 你是否依赖
client-to-client
OpenVPN 功能 - 你是否需要来自其他主机(例如互联网)能够返回到主机
10.133.10.0/24
。(对于您来说,这可能确实如此,因为您显然希望10.133.10.0/24
主机使用OVPN Server
的 Internet 访问作为他们的 Internet 访问。)
无论如何,如果添加路由,网关/下一跳将10.133.10.0/24
是虚假/可选。
假设 为真2.
,VPN 客户端需要能够访问的内容10.133.10.0/24
是仅有的:
推送到/在 VPN 客户端上配置的路由
10.133.10.0/24
,以 tun 接口作为路由接口(nexthop/gateway 是虚假适用于 L3 VPN)iroute
对于10.133.10.0/24
电荷耦合器件(参见--client-config-dir
OpenVPN 手册)文件为了Gateway Server
在OVPN Server
,这是使目标 IP 不是相应 VPN 客户端 IP 的流量转到 VPN 客户端主机的(唯一)方法(CCD 文件iroute
可以看作是 tun 模式 OpenVPN 实现 nexthop/网关思想的方式)
(请注意,无论是否client-to-client
使用,上述内容都是需要的;如果不使用,则需要更多的比那些。)
您不需要在Gateway Server
其 LAN 主机上添加任何额外的路由。它所连接的两个网络的子网/前缀路由应该足以满足所有所需的通信。
(好吧,您唯一需要的额外东西Gateway Server
是一个default
以 tun 作为路由接口的路由或等效物,当您使用redirect-gateway
、带def1
或不带时,它将以适当的方式添加。同样,我假设这Gateway Server
是 LAN 主机的“默认网关”。)
有一件事肯定错了10.133.10.0/24
正在为 LAN 子网 ( )添加路由,其中任何Gateway Server
或其任何 LAN 主机上的下一跳/网关。
据我所知,当您不使用 时client-to-client
,即使目标是客户端的 IP 或 覆盖的 IP iroute
,来自 VPN 客户端的流量也会从 OpenVPN 程序/隧道中“逃逸”,在这种情况下,您需要 VPN 服务器具有相应的路由(在您的情况下,10.133.10.0/24
,下一个跳转/网关再次是虚假的/可选的),将相关流量循环回隧道,这涉及 OS 网络堆栈的 IP 转发。因此,在这种情况下需要启用 (sysctl) 和允许 (防火墙) IP 转发。OVPN Server
如果用于 LAN 主机/VPN 客户端的 Internet 访问,这些也适用。
另外,请确保不要对 上的 LAN 主机进行 NAT/IP 伪装Gateway Server
(至少免除发往 的流量10.170.0.0/24
)。否则,它们对 VPN 客户端的回复将具有源地址,相应的程序将无法将其识别为回复。相反,如果流量的目的地是 Internet 或类似位置,10.133.10.1
请确保源在 内的流量10.133.10.0/24
经过 NAT/IP 伪装。OVPN server
答案4
最后我发现,我的同事重命名了密钥,但忘记重命名 CCD 文件。重命名此文件后,一切都正常了。