使用 iptables 进行 PBR

使用 iptables 进行 PBR

我知道这个问题已经回答过多次了,但是这次的情况有点不同。

这就是我所拥有的:

  • 所有用户都必须在 eth0 上使用默认网关,但有一个用户除外
  • 必须仅有的在 eth1 上使用网关,并且必须不是在任何情况下都使用 eth0

单独来看,这些事情很容易实现,但放在一起……设置后,它基本上可以正常工作:1002 用户通过 eth1 访问,如果不可用,则不去任何地方。但是,一些主机仍然通过 eth0 路由。我不知道为什么。

这是我的设置:

用户@localhost:~$ ip 规则

0:  from all lookup local
1000:   from all fwmark 0x5 lookup 5
2000:   from all fwmark 0x5 lookup 6
32766:  from all lookup main
32767:  from all lookup default`


user@localhost:~$ ip route list table 5
0.0.0.0/1 via 10.10.0.185 dev eth1


user@localhost:~$ ip route list table 6

blackhole 0.0.0.0/1


user@localhost:~$sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT


user@localhost:~$ sudo iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o eth1 -j MASQUERADE


user@localhost:~$ sudo iptables -t mangle -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A OUTPUT -m owner --uid-owner 1002 -j MARK --set-xmark 0x5/0xffffffff

答案1

您指定了 的路线0.0.0.0/1。这子网由 0.0.0.0 到 127.255.255.255 组成。完全不清楚为什么你只想路由一半可能的 IP 地址。我怀疑您是想路由所有 IP 地址(例如0.0.0.0/0)。

相关内容