在 Linux/Ubuntu 18.04 上,如何排除某些端口(22、80)上的流量通过 OpenVPN(客户端)路由?

在 Linux/Ubuntu 18.04 上,如何排除某些端口(22、80)上的流量通过 OpenVPN(客户端)路由?

我在 Ubuntu 上运行 VPN 客户端,正在寻找有关如何排除肯定端口通过 VPN 客户端(OpenVPN)进行路由。

例如,如何排除端口 22 和 80 通过 VPN 路由?

我不是网络专家,但我知道这应该称为基于策略的路由,并且在 Linux 机器上是可行的。但是我找不到任何关于如何实现这一点的明确指导。

编辑:我找到了一个工作解决方案 这里

在 Piotr P. Karwasz 的帮助下,以下内容仅在所需端口上排除通过 VPN 路由的流量(在此示例中,为运行 VPN 客户端的计算机的端口 22 和 80):

# run with sudo
ip rule add sport 22 table 128
ip rule add sport 80 table 128
ip route add table 128 to y.y.y.y/y dev ethX
ip route add table 128 default via z.z.z.z

其中 yyyy/y 应该是您的 [机器] 公共 IP 地址的子网,ethX 应该是您的 [机器] 公共以太网接口,zzzz 应该是默认网关。

例如:

ip rule add sport 22 table 128
ip rule add sport 80 table 128
ip route add table 128 to 172.16.9.0/24 dev eth0
ip route add table 128 default via 172.16.9.1

这些端口上的流量(特别是传出)将通过主界面[eth0或任何相关界面]而不是VPN界面,这解决了上述链接中解释的以下问题:

这是一个经典问题:当您通过公共 IP 地址连接到 [机器] 时,返回的数据包将通过 VPN 路由。您需要强制将这些数据包路由到公共 eth 接口。

请注意ip rule add sport(或dport就此而言)需要iproute2高于4.15(否则会得到Error: argument "sport" is wrong: Failed to parse rule type)的版本。

就我而言,我使用 Ubuntu 的 backports 频道来获取4.18有效的版本:apt install iproute2/bionic-backports

相关内容