我有一台小型 Ubuntu 机器,它运行着本地网络和互联网上使用的一些服务。这台机器上的默认网关显然是我的有线调制解调器,一切运行正常……相关的端口转发条目位于外部服务的路由器中。
但是,我希望使用此盒子通过 VPN 将一些流量路由到另一个国家/地区(如 Netflix 类型的场景,但在本例中不是)。我已经设置了 openvpn 并使用了 --route-noexec,因为我不想通过 VPN 路由盒子中的任何内容,所以我的 VPN 链接已启动,我的路由表未更改。
到目前为止一切都很好。现在我想将网络上其他主机上的网关地址更改为运行 openvpn 的主机,并让它们通过 VPN 隧道进行路由。我相信我需要有一个单独的路由表才能使其工作 - 所以我在同一个网卡上设置了一个虚拟虚拟接口。使用不同的 MAC 地址并分配一个静态 IP。- 假设 192.168.1.252 eth0:1(而不是 192.168.1.200 eth0)
我设置了一个新的路由表,其默认网关是 VPN tun0 接口的 IP 地址,并且启用了 IP 伪装。
如果我添加一条规则(比如说我想要 192.168.1.61)来通过 VPN 路由而不是直接通过我的电缆调制解调器路由..它可以在源 IP 上设置规则但我不想这样做..
ip rule add from 192.168.1.61 table 4 (其中 table 4 是到 VPN IP 的路由表)
并将 192.168.1.61 上的默认网关更改为 192.168.1.252
我不想添加这条规则 - 我只想将设备网关地址更改为我的主机上的这个虚拟接口。
所以问题是,如何使用 iproute2 或 iptables 检测已路由到此虚拟接口的数据包?感觉我已经尝试了所有方法,但我确信这个问题有解决办法。