如果我想用静态路由规则替换默认的 dhcp 路由规则,我必须添加一条规则ip route add scope link dev eth0
。否则我会收到错误:“Nexthop 有一个无效的网关”。
以下是我的问题:
问题 1:ip route 中的“scope link”是什么意思?
第二季度:为什么需要从 dhcp 规则更改为静态规则?
答案1
这些路由就是你如何告诉 Linux 内核你所在子网。
当您添加 IP 地址时,此信息不会存储在隐藏的“我的当前子网”字段中;相反,它始终转换为未指定网关的“范围链接”路由(也称为“设备路由”或“接口路由”),并且每当内核需要确定某个地址是否可直接访问时,它只需执行路由表检查。
通常,配置 IP 地址后会自动添加这些路由 - 例如,运行ip addr add 192.168.1.5/24
将分配 IP 地址 192.168.1.5和为 192.168.1.0/24 创建子网路由。因此,在正常使用中无需添加这些路由。
但是,当您盲目地“删除所有路由”时,您最终也会删除这些自动创建的路由,并且内核的“此地址是否在我的子网中”检查不再起作用。这就是为什么您最终必须手动重新添加路由的原因。
(内核需要在ip route add
路由网关(nexthops)期间执行此检查)必须是直接地在同一 L2 连接上可访问 – 它们不能位于另一个网关后面。也就是说,网关必须位于您的子网中。
路由范围是一种表达此限制的通用机制:新路由的下一跳需要通过范围较低的现有路由才能到达。换句话说,您必须先经过本地主机(链接范围),然后才能到达远程主机(全局范围)。)