一个网络接口,带 2 个网关

一个网络接口,带 2 个网关

我有 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

根据评论,这种方法是可靠的:

  1. 指示操作系统查看表 42,以对任何带有fwmark42 的数据包做出路由决策:ip rule add fwmark 42 table 42
  2. 将备用默认路由添加到该表:ip route add default via 192.168.1.2 dev eno1 table 42 metric 200
  3. 标记(在表中)来自用户拥有的进程的mangle所有出站数据包(在链中) :OUTPUTkreator42iptables -t mangle -A OUTPUT -m owner --uid-owner kreator -j MARK --set-mark 42

此时,来自用户的数据包kreator将按照需要被标记并由表 42 中的备用默认路由路由。iptables调整POSTROUTING链的额外命令是错误的,因为它将源 IP 更改为辅助路由器的 IP,并可能导致路由器丢弃数据包。

相关内容