我正在通过 AWS 设置 Linux 盒子,并且正在探索sysctl
.当我运行时,ip route
我可以看到机器上已经有引用169.X.X.X
地址的路由。
问题:
- 有什么
systctl -w net.ipv4.route.flush=1
作用? - 是否会
systctl -w net.ipv4.route.flush=1
弄乱 AWS Linux 实例按预期工作所需的默认框/配置?
答案1
ipv4_sysctl_rtcache_flush()
它导致使用参数 调用内核函数1
。
然而,该函数期望获得网络规范(技术上是 a struct net *
)作为参数,而不仅仅是1
。所以很可能sysctl -w net.ipv4.route.flush=1
什么都不做,因为1
不是它的有效参数。
- 如果系统依赖于动态创建的路由(即运行
gated
或类似的路由守护程序),则成功清除路由缓存可能会导致网络流量暂时中断。但正如我上面所说,这似乎不是有效的语法,因此net.ipv4.route.flush
它可能什么也不做。
sysctlnet.ipv4.route.flush
显然是ip route flush
会使用的(或者在某个时候会使用,如果从那时起开发了更好的接口)。手册ip-route(8)
页是这样说的:
ip route flush
刷新路由表
此命令刷新按某些条件选择的路由。
这些参数的语法和语义与 ip route show 的参数相同,但路由表不是列出而是清除。唯一的区别是默认操作:
show
转储所有 IP 主路由表但flush
打印帮助页面。
在测试虚拟机中进行的快速实验告诉我ip route flush 1
只会从主路由表中删除到 1.0.0.0/32 的路由,但sysctl -w net.ipv4.route.flush=1
甚至不会这样做。所以显然 sysctl 需要一些不平凡的语法才能产生任何效果。查看内核源代码,似乎需要一个数据结构作为参数,因此如果net.ipv4.route.flush
没有像ip route
.
如果您在任何激活的网络接口上看到路由169.254.0.0/16
,则该网络接口是 Bonjour/Zeroconf 系统的一部分,该系统将提供链路本地连接,而无需任何配置要求。如果你想摆脱它们,RedHat 风格的网络配置文件可以通过在每个接口文件中NOZEROCONF=yes
的设置来实现;其他发行版可能有其他方法来选择退出 Zeroconf 配置。/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-<interface name>