我正在运行 CentOS 并且使用ip route
和ip rule
进行路由。
我目前有一个ip rule
from 10.8.23.0/28 table 1234
和ip route
default via 10.8.23.254 eth1
10.10.10.10 via 10.10.10.1 eth1
10.0.0.0/14 dev test-interface table 1234
看来我的ip rule
第二行成功了ip route
,所以即使目标 IP 是 10.10.10.10,test-interface
如果源 IP 是,我的数据包仍然会通过 发送10.8.23.0/28
。
我如何确保10.10.10.10 via 10.10.10.1 eth1
即使源 IP 与规则匹配,也能推翻“p 规则”?希望这有意义 :)
测试结果ip route get 10.10.10.10
显示:
10.10.10.10 via 10.10.10.1 dev eth1 src 10.8.23.1
但ip route get 10.10.10.10 src 10.0.0.13
给了我:
10.10.10.10 via 10.10.10.254 dev test-interface src 10.8.23.1
因此src IP
其优先级高于目标 IP。
答案1
你可以简单地认为ip rule
这是一种创建/拥有更多 IP 路由表(而不仅仅是默认路由表)的方法。
要解决您的问题,您需要添加另一个ip rule
条目来处理您的特定路由情况。例如,您可以使用以下命令:
$ sudo ip rule add to 10.10.10.10/32 lookup 123 priority 10
这里,我假设10
足够小,可以成为第一个ip rule
。这取决于的输出ip rule ls
。它将根据优先级显示所有规则(值越小,优先级越高,并首先显示)。
如果您需要在您的中结合源和目标检查ip rule
,您可以使用:
$ sudo ip rule add from 10.8.23.0/28 to 10.10.10.10/32 lookup 123 priority 10
该表123
应包含正确的路线,例如:
$ sudo ip route add 10.10.10.10/32 via 10.10.10.1 table 123