我的家庭服务器有两个主要接口,eth1
(一个标准的互联网连接)和tun0
(一个 OpenVPN 隧道)。我想iptables
用来强制 UID 1002 拥有的本地进程生成的所有数据包通过 退出tun0
,所有其他数据包通过 退出eth1
。
我可以轻松标记匹配的数据包:
iptables -A OUTPUT -m owner --uid-owner 1002 -j MARK --set-mark 11
Run Code Online (Sandbox Code Playgroud)
现在,我想在 POSTROUTING 链(可能是 mangle 表的)中放置一些规则来匹配标有 11 的数据包并将它们发送到tun0
,然后是匹配所有数据包并将它们发送到 的规则eth1
。
我找到了 ROUTE 目标,但这似乎只是重写了源接口(除非我读错了)。
iptables 有这个能力吗?我是否必须弄乱路由表(通过ip route
或仅使用旧route
命令)?
编辑:我想也许我应该提供更多信息。我目前没有其他iptables规则(虽然我可能会创建一些规则来执行不相关的任务)。此外,输出ip route
为:
default via 192.168.1.254 dev eth1 metric 203
10.32.0.49 dev tun0 proto kernel scope link src 10.32.0.50
85.17.27.71 via 192.168.1.254 dev eth1
192.168.1.0/24 dev eth1 …
Run Code Online (Sandbox Code Playgroud)