我有 2 个通过以太网电缆连接的路由器。辅助路由器的 DHCP 服务器已禁用,其 IP 地址为 192.168.1.2。两个路由器的互联网不同。如果我创建另一个具有较低度量的默认网关,那么我可以使用第二个网络作为主网络。
ip route add default via 192.168.1.2 dev eno1 metric 10
它按预期工作。
现在我尝试同时使用两个网络。是否可以创建一个 Linux 用户并通过辅助网关发送所有用户流量?我尝试了以下命令:
useradd kreator
ip rule add fwmark 42 table 42
ip route add default via 192.168.1.2 dev eno1 table 42 metric 200
iptables -t mangle -A OUTPUT -m owner --uid-owner kreator -j MARK --set-mark 42
iptables -t nat -A POSTROUTING -o eno1 -m mark --mark 42 -j SNAT --to-source 192.168.1.2
然后我运行了sudo -u kreator ping google.com
,但什么都没记录。我遗漏了什么?
我在 Arch Linux 上,网络管理器是 NetworkManager 守护进程。
答案1
根据评论,这种方法是可靠的:
- 指示操作系统查看表 42,以对任何带有
fwmark
42 的数据包做出路由决策:ip rule add fwmark 42 table 42
- 将备用默认路由添加到该表:
ip route add default via 192.168.1.2 dev eno1 table 42 metric 200
- 标记(在表中)来自用户拥有的进程的
mangle
所有出站数据包(在链中) :OUTPUT
kreator
42
iptables -t mangle -A OUTPUT -m owner --uid-owner kreator -j MARK --set-mark 42
此时,来自用户的数据包kreator
将按照需要被标记并由表 42 中的备用默认路由路由。iptables
调整POSTROUTING
链的额外命令是错误的,因为它将源 IP 更改为辅助路由器的 IP,并可能导致路由器丢弃数据包。