我有一台装有 Ubuntu 18.04 的机器。
使用以下 /etc/network/interfaces
auto ens160
iface ens160 inet static
address 10.16.21.80
gateway 10.16.21.254
netmask 255.255.255.0
dns-nameservers 10.16.15.1 10.16.15.2 127.0.0.53
dns-search eqx.solaredge.com
auto ens160:235
iface ens160:235 inet static
address 10.16.15.235
netmask 255.255.255.0
每次我重启机器时,路由10.16.15.0
都会回到路由表中,我必须手动删除它。还有其他方法可以永久禁用此路由吗?
我每次都运行以下命令:
route del -net 10.16.15.0 netmask 255.255.255.0
我使用/etc/rc.local
一台机器在每次启动时运行此命令,但我想知道是否还有其他方法。
答案1
您在 10.16.15.0/24 网络中有一个接口。
默认情况下,Linux 会向任何本地接口添加路由。如果您没有路由,您如何联系 10.16.15.0/24 网段上的设备?您是否希望到 10.16.15.0/24 的流量通过 10.16.21.254?
如果是的话,只需删除的接口描述auto ens160:235
。
要删除的部分是
auto ens160:235
iface ens160:235 inet static
address 10.16.15.235
netmask 255.255.255.0
稍微扩展一下答案。
当您想将数据包发送到某个地址时,您的操作系统会查看其路由表。通常,路由表由两个条目组成:可直接访问的本地子网和默认网关。但它可能包含任意数量的路由。
路由带有权重,通常称为度量。这可以在以下示例输出中看到:
default via 10.0.3.1 dev wlan0 proto dhcp metric 600
10.0.3.0/24 dev wlan0 proto kernel scope link src 10.0.3.48 metric 600
路由的选择基于最具体的路由,如果存在两个相等的路由,则优先选择度量值最低的路由。默认路由实际上是 0.0.0.0/0,因此它与 IPv4 一样不具体。这意味着,如果没有其他路由匹配,这是最后的选择!
您有一个直接连接的接口,其网络掩码为 /24,即 255.255.255.0。这是方式比网络掩码 /0 更具体,因此无论权重如何,它都会获胜。发往 10.16.15.0/24 的流量将直接在接口上发送ens160:235
,无需任何路由。
这可能是您想要的行为。如果您将主机连接到 L2 网段,那是因为您希望该主机与同一网段上的其他主机进行通信,而无需路由开销。
如果您不想要这种行为,我建议您解释一下为什么您不想要它。这是一个非标准解决方案,因此可能需要编写脚本。正确的方法是当接口启动时调用脚本或命令。
但这可能不是您想要的。