我想使用我的 VPN 处理所有网络流量除了用于来自单个任意命令的流量。有没有办法做到这一点?
我知道可能有更简单的方法可以大致完成我想要的事情;例如,如果我的命令是 ssh,我可以设置路由,以便到端口 22 的传出连接不会通过 VPN。不过,这有一个限制,我必须知道我的命令使用的端口,并且如果我同时运行另一个 ssh 会话,它也不会通过 VPN;我只想要一个命令来做到这一点。我还希望它能够工作,无论命令使用什么端口或它连接到什么地址(到目前为止我还没有找到任何地方的示例)。
谢谢!
答案1
运行不同路由的命令的一种方法是使用 iptables 和策略路由。您可以创建一个用于运行命令的新用户(或组)。
mangle
使用 iptables 所有者模块标记表中的流量。在此示例中,流量标有标识10对于用户诺夫普恩:
iptables -t mangle -A OUTPUT -m owner --uid novpn -j MARK --set-mark 10
创建新的路由表(表100) 对于标记的流量并设置默认路由和规则以对标记的流量应用新的路由表:
ip route add table 100 default via *DEFAULTGW*
ip rule add fwmark 10 table 100
ip route flush cache
现在,要运行不通过 VPN 路由的命令,您可以使用su
etc. 以新的 novpn 用户身份运行该命令。
如果创建新用户来运行命令是不可接受的,您可以设置一个单独的用户网络命名空间有自己的路由来运行命令。