我已经在Linux“路由器”上设置了源代码策略路由,使用:
ip rule add from 192.168.1.0/24 table FOO
ip route add default dev eth0 table FOO从该子网转发的数据包到达Internet目的地。
问题是表FOO不从表main继承本地连接的路由。
我可以手动添加本地连接的线路,但很明显,这是脆弱的,需要更多的维护。
我希望表FOO继承表main的所有路由,而不是"ip路由添加默认.“,我可以使用"ip路由更改默认值”。
对于其他子网,表main的默认路由必须保持不变。
我该怎么做?
发布于 2018-03-25 19:14:16
下面是添加新路由表和规则的通常方法,OP不希望这样做:
FOOFOO的条件的规则FOO,因此通常完全绕过main表。要“纠正”此问题,将从main表中的路由复制到表FOO。规则应该是这样的:
# ip rule
0: from all lookup local
32765: from 192.168.1.0/24 lookup FOO
32766: from all lookup main
32767: from all lookup default OP不希望做3,因为当路由改变时,它会增加管理负担。
据我所知,这是OP所希望的:
main中的通常路线来处理。192.168.1.0/24,则其默认路由应从表FOO (此处为dev eth0)中选择。让我们按照这个顺序来实现它,而不是通常的顺序。结果可能不是问题中所描述的那样,而是所希望的结果。如果没有实际要解决的问题和OP给出的适当配置,有些事情可能会显得很尴尬(比如重用ip route的输出以将默认路由从表main移动到表default)。
从通常的规则开始:
# ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default 注意,default表是空的(默认情况下),可以免费使用。
# ip route show table default
#main的规则移至较低优先级# ip规则添加优先级32000从所有查找主# ip规则模型优先级32766main移动到表default,以允许在规则32100处触发异常。规则32767仍将给出来自default表的默认路由,如果之前没有找到匹配,则没有连接丢失。# ip路由添加$(ip路由显示0.0.0.0/0)表默认# ip路由模型默认规则现在将如下所示:
# ip rule
0: from all lookup local
32000: from all lookup main
32100: from 192.168.1.0/24 lookup FOO
32767: from all lookup default 容器中的几个示例(这没有什么意义,只是为了查看所涉及的表):
# ip -br link
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
eth0@if12 UP 66:d4:11:94:49:5f <BROADCAST,MULTICAST,UP,LOWER_UP>
local0@if9 UP 00:16:3e:6a:c1:e9 <BROADCAST,MULTICAST,UP,LOWER_UP>
# ip -4 -br a
lo UNKNOWN 127.0.0.1/8
local0@if9 UP 10.0.3.66/24
# ip route
10.0.3.0/24 dev local0 proto kernel scope link src 10.0.3.66
# ip route show table FOO
default dev eth0 scope link
# ip route show table default
default via 10.0.3.1 dev local0
# ip -o route get 10.0.3.2
10.0.3.2 dev local0 src 10.0.3.66 \ cache
# ip -o route get 8.8.8.8
8.8.8.8 via 10.0.3.1 dev local0 table default src 10.0.3.66 \ cache
# ip -o route get 8.8.8.8 from 192.168.1.2 iif local0
8.8.8.8 from 192.168.1.2 dev eth0 table FOO \ cache iif local0就这样。唯一的用法差异是,现在必须在表default (253)而不是表main (254)中设置“常规”默认路由。必须对引导脚本进行调整以处理它:设置不应声明默认路由或网关,而应运行将执行ip route add default ... table default的附加自定义脚本。对于Debian,这可以通过post-up命令(如post-up ip route add default via xxx table default || :)在/etc/network/interfaces中完成。对于RHEL7,这应该用路线-XXX文件来完成。对于systemd的新网络方法,我不知道。
发布于 2021-01-05 16:59:54
只需加上
ip rule add from 192.168.1.0/24 table main suppress_prefixlength 0数据包将转到table main并找到路由,但不会使用table main中的默认路由。
然后数据包转到table FOO并被路由到eth0。
https://unix.stackexchange.com/questions/423502
复制相似问题