我在具有桥接网络的主机上有一个虚拟机(因此具有自己的 MAC 地址)。主机和虚拟机都运行 CentOS。他们的网络由简单的文件管理/etc/sysconfig/network-scripts/ifcfg-enpXsY
。 IPv4 工作得很好。
我已为虚拟机分配了一个 IPv6 地址(主机也有一个),该地址在数据中心中正确路由。不过,大多数连接都使用 IPv4(该机器还没有 DNS AAAA 条目,仍在测试 IPv6)。
当我启动虚拟机时,它具有完整的 IPv6 连接。然而,一段时间后 IPv6 连接停止工作(IPv6 魔法?)。我已将问题范围缩小到邻居(ARP/NDISC 缓存)数据:
不工作,无法通过 IPv6 输入或输出 ping 或连接:
# ip -6 neighbour
fe80::1 dev enp1s2 lladdr 0c:86:72:2e:04:28 router STALE
刷新缓存的修复/解决方法:
# ip -6 neighbour flush dev enp1s2
# ip -6 neighbour
(empty, as expected)
然后ping6
主机从VM内部填充缓存:
# ping6 2912:1375:23:9a6c::2
PING 2912:1375:23:9a6c::2(2912:1375:23:9a6c::2) 56 data bytes
64 bytes from 2912:1375:23:9a6c::2: icmp_seq=1 ttl=64 time=2.35 ms
64 bytes from 2912:1375:23:9a6c::2: icmp_seq=2 ttl=64 time=0.468 ms
^C
# ip -6 neighbour
fe80::1 dev enp1s2 lladdr 0c:86:72:2e:04:28 router REACHABLE
2912:1375:23:9a6c::2 dev enp1s2 lladdr 08:21:4b:b7:f8:31 DELAY
IPv6 邻居/ARP 表已恢复有效性,并且连接正常工作!
所以我的问题是:
- 为什么缓存会过时?
- 我可以做什么来避免它?
当然,我可以在cron
作业中运行这些命令(多久一次?),但我认为 IPv6 一般情况下并不需要这样做?
PS:我使用了一个脚本进行测试:IPv6 堆栈大约每 20 分钟就会崩溃一次。 RFC 可以解释吗?