我的Linux机器上有一个非常简单的标准路由表:
default via 192.168.1.1 dev eth0 proto static
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.162 metric 1
现在我需要将特定子网路由到另一个网关。目前没有问题,只需添加
10.0.0.0/8 via 192.168.1.2 dev eth0
但是,其中有一个子集不应该放在那里。这有效:
10.0.2.0/24 via 192.168.1.1 dev eth0
但我不想在那里重复默认网关;我只想说,“对于 10.0.2.0/24,如果没有定义 10.0.0.0/8 路由,则执行您要执行的操作”
有什么办法吗?(除了用一堆更具体的路线替换 10.0.0.0/8 以小心避开 10.0.2/24 路线)
答案1
路由匹配以最具体的为准。
这:
10.0.2.0/24 via 192.168.1.1 dev eth0
比这更具体:
10.0.0.0/8 via 192.168.1.2 dev eth0
/24
对比/8
因此,只需添加两条路由,流量10.0.2.0/24
就会与该路由匹配,其他任何路由都会与不太具体的 /8 路由匹配。
请记住,您的默认路由是 0.0.0.0/0,这是现有的最不具体的 CIDR,这就是为什么所有其他路由都在您的默认路由之前匹配。(192.168.1.0/24
是记住的一部分0.0.0.0/0
)
答案2
为什么不在 192.168.1.1 上添加到 10.0.0.0/8 的路由?这样,您网络上的新主机就不需要知道该静态路由,您可以将 192.168.1.1 保留为默认路由,并让其负责查找一次性网络,如 10.0.2.0/24 以及更常见的 10.0.0.0/8。