我的Centos机器有一个自定义的路由表foo_table ,只包含一个默认的网关路由:
# ip route add default via 10.0.2.1 table foo_table # ip route show table foo_table default via 10.0.2.1 dev bond0.2
策略规则使用此表从10.0.2.22路由所有stream量:
# ip rule show 0: from all lookup local 32765: from 10.0.2.22 lookup foo_table 32766: from all lookup main 32767: from all lookup default
当我从10.0.2.22 Centos机器路由到同一本地子网中的另一台机器时,数据包首先被路由到路由器,然后到达服务器:
# traceroute -In 10.0.2.60 traceroute to 10.0.2.60 (10.0.2.60), 30 hops max, 60 byte packets 1 10.0.2.1 3.573 ms 3.972 ms 4.219 ms 2 10.0.2.60 1.461 ms 1.494 ms 1.700 ms
当然,我希望当地的交通不会不必要地牵涉到这样的路由器。
在main路由表中,当然有一个本地子网的链路范围路由:
10.0.2.0/24 dev bond0.2 proto kernel scope link src 10.0.2.22
我的理解是,因为foo_table是在main (根据ip rule show )之前查询的,所以使用通过foo_table中的foo_table的默认路由,即使目标是链接本地地址。
这是否意味着我必须添加链接作用域路由到foo_table ?
# ip route add 10.0.2.0/24 dev bond0.2 scope link table foo_table # ip route show table foo_table 10.0.2.0/24 dev bond0.2 scope link default via 10.0.2.1 dev bond0.2
它似乎解决了这个问题,但是这是做到这一点的正确方法吗?
# traceroute -In 10.0.2.60 traceroute to 10.0.2.60 (10.0.2.60), 30 hops max, 60 byte packets 1 10.0.2.60 0.339 ms 0.355 ms 0.399 ms
我对发生的事情的理解是正确的吗? (我对路由有最less的经验。)
你知道foo_table的目的是什么吗? 对我来说,它的效果似乎是通过路由器路由从10.0.2.22接口(包括本地子网)的所有stream量,你说什么是你不想要的。 /etc/iproute2/rt_tables的内容是什么? 你也不会说main表中的默认路由是什么。
为了避免这种情况,可以按照您的build议将子网路由添加到foo_table中,或者直接删除规则:
ip rule del from 10.0.2.22 lookup foo_table
据我所知,你不需要指定scope link来添加一个子网路由到foo_table ,只是
ip route add 10.0.2.0/24 dev bond0.2 table foo_table
因为无论如何你都要指定对应于链接的前缀。 也许我是误解。
((顺便说一句,为了简单起见,我假设主表中的default路由可以被移动到default表中,但是default情况下默认路由是空的,也许是因为默认路由取决于configuration的接口。))
对于任何碰到这种情况的人,我在兄弟网站上发现了一个类似的问题: https : //unix.stackexchange.com/questions/27850/routing-tables-and-default-routes
一般来说,你会在大多数* nix的路由表中看到两条规则(至less)。
你将有一条路由到你的本地networking(对于这个例子,10.11.12.0/24):
10.11.12.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0和一个标识你的默认路线。
0.0.0.0 10.11.12.1 0.0.0.0 UG 0 0 0 eth0那么,这有效地告诉你的内核是:
直接发送到eth0的
10.11.12.0/24数据包,不需要特别发送到默认路由器(flags:U = route is UP)发送任何数据包到本地networking(0.0.0.0匹配任何东西)到网关(10.11.12.1)以外的任何地址(标志:U =路由为Up,G =网关)。
如果你有更多的接口,或者你是多宿主的,或者你configuration了特定的networking或主机路由,你可能会看到更多的路由,但这是你经常看到的最低限度的路由。
通过configuration和调出接口,内核将自动创build本地networking路由。
您不需要手动添加该路线。