如何通过 VPN 转发一个本地网络并直接转发另一个本地网络?

如何通过 VPN 转发一个本地网络并直接转发另一个本地网络?

我有基于 CentOS Linux 6 的软件路由器。我有 2 个本地网络,比如Local1Local2。我有一个 Internet 连接,还有一个通过这个 Internet 连接运行的 VPN 连接。

我使用iptablesDHCP 服务器共享 Internet 连接。当我启用 VPN 时,Local1流量Local2都会通过 VPN,如果没有 VPN,两个本地网络都会直接连接到 Internet。

我的问题如下:如何设置基于 CentOS 的软件路由器以通过 VPN 转发一个本地网络并直接转发另一个本地网络?

答案1

我无法告诉你如何……但我可以从理论上告诉你。

最有可能的是,您的 VPN 仅由一个特定网络(或一组网络)组成。您可能希望设置拆分隧道,以伪造的方式说:“任何发往‘VPN 网络’的流量都将通过 VPN 连接。”然后您的 0.0.0.0 默认路由将全部设置为通过互联网连接出去。

我也相信优先级很重要。确保 VPN 网络的路由比默认路由具有更高的优先级。

答案2

首先,您必须更改 VPN 配置,不要将其自身设置为默认网关。这是什么 VPN?其次,您必须添加 iptables 规则,将流量从 Local2(eth0) 转发到 VPN(tun0) 例如:命令:iptables -I FORWARD -i eth0 -o tun0 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT 其次 iptables -t nat -I POSTROUTING -o tun0 -s 192.168.0.0/24 -j MASQUERADE

答案3

最后我找到了一种方法。需要使用iproute2,但存在一些不明显的东西。

  1. 用于ip rule创建基于源的路由策略。
  2. 用于ip route .... table向基于源的路由策略添加 3 条路由:一条设置 Internet 默认网关,两条设置两个本地网络的网关。如果没有设置本地网络网关,则无法工作,可能是因为 OpenVPN 在路由表中进行了大量更改。
  3. 重要提示:ip ruleip route不会持续存在,因此规则在重启时会消失。通常使用rule-interfaceroute-interface文件来设置静态路由。但是,当您将这些文件与 DHCP 和/或 Wi-Fi 热点一起使用时,这些文件会出现问题。原因是这些文件与 DHCP 和初始化同时应用(因此有时在 DHCP 和hostapd初始化之前)。这就是为什么这两个文件经常导致路由表不正确的原因。我rc.local习惯在系统启动时使用命令行添加路由和规则,使用这种方法,我能够通过 VPN 路由一个本地 NIC,并直接路由另一个本地 NIC。

答案4

您需要使用未定义默认网关的 VPN,因此您的所有流量都将通过旧的默认网关。

然后,您可以添加将流量转发到 local1 子网的静态路由到 VPN 网关。

相关内容