[Linux] Network: IPv6 link-local 地址是否可用不自动生成

原来有一段时间在做扩充产品的VLAN个数,然后就遇到过一个问题:说这个Linux的默认配置里,会为每一个网络接口添加一个link-local的地址,就是FE80::开头的地址,在RFC-4291里有如下的定义:

复制代码
Link-Local unicast 1111111010 FE80::/10 2.5.6

而这个配置是网络接口级别的一个配置,可用使用ip命令来做修改,如:ip link set dev X addrgenmode none。如果设置为none,就是不要自动产生link-local地址。其他模式:

支持的模式:eui64 |none |stable_secret |random

eui64: use a Modified EUI-64 format interface identifier

none: disable automatic address generation

stable_secret: generate the interface identifier based on preset /proc/sys/net/ipv6/conf/{default,DEV}/stable_secret

random: like stable_secret, but auto-generate a new random secret if none is set

另一个产生问题的必要条件是,Linux系统会默认为每一条link-local地址,创建一个路由记录到这个地址。如下:

fe80::/64 dev eth0 proto kernel metric 256 pref medium

fe80::/64 dev eth1 proto kernel metric 256 pref medium

fe80::/64 dev eth1.61 proto kernel metric 256 pref medium

这时候如果要在虚拟机上添加4096个VLAN接口的话,就会有4096个link-local地址,也会生成4096个相关的路有记录,然后就会导致Linux内核里的一系列的问题,尤其是在netlink的处理上,是一个不小的负担。

为了解决这个问题,还想着不行就把这个local-link的IP地址删掉,不让它自动生成,就不会存在这个路由记录。就不会有着netlink的负担。当时感觉感动太大,没敢这么改,如果当时这么改,肯定会遇到很多问题。

最近看IPv6的ND的时候发现,这个link-local的地址还有其他作用,也就是如果删掉会有副作用。比如ND协议,源地址选择协议等等,里面都有提到这个地址的用途。现在想想还有些后怕,幸亏没有删掉这个地址。

最后是通过一个netlink的优化选项解决的路由太多的问题。设置netlink的socket选项:

https://mzhan017.blog.csdn.net/article/details/120567610

if (setsockopt(nl_socket, SOL_NETLINK, NETLINK_DUMP_STRICT_CHK, &optval, sizeof(optval)) < 0) {

相关推荐
古法老登瞎折腾9 分钟前
大数据智能运维实战(二):准备一个可复现的运维实验环境
java·大数据·运维·spring ai·mcp
数字新视界10 分钟前
机房动环监控助力智能管理
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
书生执笔画浮沉12 分钟前
Linux 内核模块为什么不能自己解决兼容性问题?
linux·c·kernel·update·灵感
算力小木18 分钟前
#标题:5090 vs 4090D 到底差多少?我拿八卡实测了一周
服务器
数据中心的那点事儿21 分钟前
艾特网能:GPU算力服务器冷却系统配套设计介绍
运维·服务器·gpu算力
15Moonlight25 分钟前
Linux网络(03):Socket 编程 TCP
linux·网络·tcp/ip
广州灵眸科技有限公司41 分钟前
单芯片同时跑 Linux 与 RT-Thread:RV1126B的AMP异构方案完整拆解
linux·运维·服务器
小雪崩1 小时前
嵌入式学习:Linux驱动开发总结
linux·驱动开发·学习
2301_786756601 小时前
2026 JCR 秋季数据重载解读:影响因子为什么会变?附期刊影响力数据批量追踪方案
java·服务器·前端
Lynne3091 小时前
TSN 在变电站自动化通信网络升级中的应用价值与技术挑战
服务器·网络·数据库