Alpine 容器 IPv6 地址凭空消失:一次从 RA 查到内核 autoconf 的排障
# Alpine 容器 IPv6 地址凭空消失:一次从 RA 查到内核 autoconf 的排障
## 现象
一个跑在 PVE 上的 Alpine LXC 容器,只做网络转发。某天开始:
- IPv4 出网正常
- IPv6 出网 100% 丢包
- 容器网卡上还挂着 IPv6 地址,但地址过期后**不再续期**,重启容器才会重新拿到
RA 是上游路由器发的,前缀也没变,看起来像"路由器那边的问题"。实际查下来,问题在容器自己的 sysctl。
## 第一层:先确认 RA 到底有没有收到
不要一上来就怀疑上游。在容器里抓 RA:
tcpdump -i eth0 -n -vv 'icmp6 and ip6[40] == 134'
同时看内核计数:
cat /proc/sys/net/ipv6/conf/eth0/accept_ra # 0 / 1 / 2
cat /proc/sys/net/ipv6/conf/eth0/forwarding
这里有个容易忽略的前提:**Linux 一旦开启 `forwarding=1`,内核默认把 `accept_ra` 置为 0**(除非显式设成 2)。所以"容器做转发 → 收不到 RA"是常见组合,第一反应都会往这上面想。
我们确实先按这个方向修:设 `accept_ra=2`、删掉旧地址、等下一轮 RA。
结果很反直觉:**RA 计数确实 +2(确认收到),但地址依然不重建**。
## 第二层:排除 RA 内容问题
既然 RA 收到了,就看 RA 里有什么。当时 RA 的 hop limit 字段是 0,一度怀疑上游配置有问题。让上游把 hop limit 改成 64 再测——**地址还是不重建**。
这一步的价值是:把"上游 RA 有问题"这个假设排除掉,把问题逼回本地。
## 第三层:找到真正的开关
`accept_ra` 只决定"要不要接受 RA",而**由 RA 前缀生成地址(SLAAC)是另一个开关**:
cat /proc/sys/net/ipv6/conf/eth0/autoconf
# 0
内核在 `addrconf` 处理 RA 前缀时,会先检查这个接口的 `autoconf`;为 0 时**直接跳过地址生成**——RA 收到了、计数加了、日志没报错,但地址就是不出现。这正好解释了我们看到的所有现象。
改成 1 并重新触发:
sysctl -w net.ipv6.conf.eth0.autoconf=1
ip -6 addr flush dev eth0 scope global
# 等下一轮 RA(或重启网络)
ip -6 addr show dev eth0
地址立刻重建,出网恢复。
## 为什么会变成 0
翻 `/etc/sysctl.d/` 找到答案:早期为了让容器做转发,写过一个 `10-forwarding.conf`,里面除了 `forwarding=1`,还顺手写了:
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.all.autoconf = 0
这两行当时是"关掉不需要的 IPv6 自动配置"的顺手操作,一直没出问题——**直到这个容器真的需要用 IPv6 出网**。sysctl.d 是开机批量生效的,所以表现为"重启后正常一会儿,之后地址过期就再也回不来"。
## 修复与持久化
cat > /etc/sysctl.d/20-ipv6-forwarding.conf <<'EOF'
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.eth0.accept_ra = 2
net.ipv6.conf.eth0.autoconf = 1
EOF
sysctl --system
关键点:**`accept_ra` 和 `autoconf` 是两个独立开关**,转发场景下只改前者不够。
## 五条经验
1. **先抓包再怀疑上游**:`tcpdump` 一条命令就能分清"没收到 RA"和"收到但没用"。
2. **`forwarding=1` 会连带把 `accept_ra` 关掉**(默认 0),这是转发场景的第一嫌疑。
3. **`accept_ra=2` 只解决"收不收",`autoconf=1` 才决定"建不建地址"**。两个都查。
4. **RA 字段异常不代表根因**:hop limit 0 是个干扰项,改完照样不通,反而浪费了一轮。
5. **sysctl.d 是历史包袱的重灾区**:老配置里的"顺手关闭"会在半年后变成事故,改之前先 `grep -r` 一遍。
这套排查路径对任何 Linux(容器、虚机、软路由)都适用,不只是 Alpine。
- 点赞
- 收藏
- 关注作者
评论(0)