![Linux IPv6 环回路由自动添加](https://linux22.com/image/529935/Linux%20IPv6%20%E7%8E%AF%E5%9B%9E%E8%B7%AF%E7%94%B1%E8%87%AA%E5%8A%A8%E6%B7%BB%E5%8A%A0.png)
我们有一个运行 Debian Lenny 的路由器,几个月来一直顺利地路由 IPv6。我们的上游已通知我们的地址范围正在更改,并且两者目前均正常运行,因此我想添加第二个地址进行测试。
ip -6 addr add 2405:3c00:1:13::2/64 dev eth1
# ping6 2405:3c00:1:13:: (our upstream router)
64 bytes from 2405:3c00:1:13::2: icmp_seq=1 ttl=64 time=0.089 ms
什么?
# ip -6 route get 2405:3c00:1:13::
local 2405:3c00:1:13:: from :: via :: dev lo table local proto none src 2405:3c00:1:13::2 metric 0 mtu 16436 advmss 16376 hoplimit 4294967295
# route -6 | grep 2405
2405:3c00:1:13::/64 :: U 256 0 1 eth1
2405:3c00:1:13::/128 :: Un 0 1 0 lo
2405:3c00:1:13::2/128 :: Un 0 1 0 lo
我很好奇...13::/128
路由是如何到达的。在我将地址添加到接口后大约两秒钟,它就出现了。radvd(8) 在接口上未启用,取消设置accept_ra
也autoconf
没什么区别。
有没有简单的方法可以监控哪个进程正在修改路由表?有谁知道罪魁祸首可能是什么吗?
答案1
在任何 /64 子网中,::0 地址都是子网路由器任播地址;它标识链路上的所有路由器。由于您已打开 net.ipv6.conf.all.forwarding,系统会将自己标识为路由器并加入该任播组。不幸的是,这种行为并没有真正记录或可配置,因此您可能已经找到了正确的解决方案。
更理想的是不要使用该地址,因为从技术上讲它是保留的,但您的 ISP 可能不提供此选项。
您可能已经注意到,该路由仅显示为 ,route -6
而不是ip -6 route
。这是因为该路由在local
表中,而不是main
。您可以使用 来查看它ip -6 route list table local
。只需删除该 /128 路由即可解决问题。
答案2
(短期内我们解决了这个问题
# ip -6 addr add 2405:3c00:1:13::/128 dev eth1
# ip -6 addr delete 2405:3c00:1:13::/128 dev eth1
# route -6 | grep 3c00
2405:3c00:1:13::/64 :: U 256 0 0 eth1
2405:3c00:1:13::2/128 :: Un 0 1 0 lo
但这是一种愚蠢的伎俩。)