← LeisureLinux 文章索引
LeisureLinux · 微信公众号文章

[实战] Windows 突然断网且重启无效?这锅竟得 IPv6 来背!

Linux/运维 阅读原文(微信)↗

{#section path-to-node="3" pm-slice="0 0 []"}

导读: 当一台原本工作正常的 PC 突然有线断网,作为网络工程师,我们的第一反应通常是检查 DHCP。但如果是在一个混合了树莓派(Pi)等 Linux 设备、且正在折腾 IPv6 的环境下,问题的根源可能远比你想象的深。

一、 核心前传:什么是 RA(路由通告)?

在 IPv4 世界,终端获取网关信息主要靠 DHCP。但在 IPv6 世界,引入了更优雅(也更复杂)的 SLAAC(无状态地址自动配置)

1. RA 的原理

RA (Router Advertisement) 是 IPv6 邻居发现协议(NDP)的一部分。路由器会定期向局域网发送多播包,大声告诉所有设备:"我是这个网段的网关,请根据我发布的前缀生成你们的 IP。"

二、 案情回放:消失的 IP 地址

某局域网内,一台"无头" Windows PC 突然在 WOL 唤醒后无法获取 IP,路由器显示离线。排查发现,罪魁祸首竟是旁边的树莓派配置了特殊的 IPv6 参数,导致 Windows 产生了网关竞争,误把树莓派当成了通往公网的出口。

三、 核心方案:如何优雅且安全地配置 Pi?

我们要让 Pi 实现地址固定(Token),同时关闭任何可能干扰 Windows 的"网关行为"。

1. NetworkManager 侧:锁定 Token

执行以下步骤,将地址生成权从内核移交给管理程序:

Bash# 1. 切换模式为 eui64 (设置 Token 的前提)sudo nmcli connection modify "Wired connection 1" ipv6.addr-gen-mode eui64# 2. 设置固定后缀(例如 ::123)sudo nmcli connection modify "Wired connection 1" ipv6.token ::123# 3. 重启服务生效sudo systemctl restart NetworkManager
```text

#### 2. 内核 sysctl 侧:正确配置 RA 行为 {#内核-sysctl-侧正确配置-ra-行为 path-to-node="19"}

这是文章最关键的部分!我们需要在 `/etc/sysctl.conf`{index-in-node="17" path-to-node="20"} 中精准定义 Pi 如何处理 RA 报文,从而避免干扰 Windows:

Bash# 彻底关闭转发,确保 Pi 不会伪装成路由器net.ipv6.conf.all.forwarding=0# 核心配置:定义 RA 接受行为# 0: 不接受 RA (手动静态 IP)# 1: 接受 RA (当 forwarding 为 0 时默认开启)# 2: 强制接受 RA (即使开启转发也接受,这往往是干扰的源头)net.ipv6.conf.eth0.accept_ra=1# 禁用发送重定向,防止 Pi 告诉 Windows “请走我这里”net.ipv4.conf.eth0.send_redirects=0net.ipv6.conf.eth0.accept_redirects=0


```

执行 sudo sysctl -p 即可生效。

{#section-1 path-to-node="24"}

四、 深度复盘:addr-gen-mode 与地址属性对照

1. 模式选择 (addr-gen-mode)

模式 逻辑说明 适用场景
[stable-privacy]{path-to-node="26,1,0,0"} [默认随机后缀,保护隐私。]{path-to-node="26,1,1,0"} [普通终端。]{path-to-node="26,1,2,0"}
[eui64]{path-to-node="26,2,0,0"} [基于用户定义生成。]{path-to-node="26,2,1,0"} [设置 Token 的必备模式。]{path-to-node="26,2,2,0"}

2. 地址属性全解析 (ip -6 a s)

属性关键字 状态解读 网工视角
[scope global]{path-to-node="28,1,0,0"} [全球唯一地址。]{path-to-node="28,1,1,0"} [可以上公网。]{path-to-node="28,1,2,0"}
[dynamic]{path-to-node="28,2,0,0"} [随路由器前缀更新。]{path-to-node="28,2,1,0"} [兼具静态的稳点和动态的灵活。]{path-to-node="28,2,2,0"}
[mngtmpaddr]{path-to-node="28,3,0,0"} [隐私地址"母版"。]{path-to-node="28,3,1,0"} [负责生成随机临时后缀。]{path-to-node="28,3,2,0"}
[noprefixroute]{path-to-node="28,4,0,0"} [路由权移交给 NM。]{path-to-node="28,4,1,0"} [防止内核"乱跑"导致断网。]{path-to-node="28,4,2,0"}

{#section-2 path-to-node="30"}

五、 总结:网工的排查闭环

这次故障的本质,是 Linux 端非标准的 IPv6 配置误导了局域网内 Windows 的网关判定

通过将地址生成逻辑从内核移交给 NetworkManager,并配合 eui64 模式下的 Token 设置,同时在内核层关闭 forwarding 并锁定 accept_ra=1,我们成功实现了"地址固定"与"网络安全"的平衡。

想了解更多 IPv6 实战技巧?关注我们,回复"IPv6"获取网卡参数调优备忘单!

{#section-3 path-to-node="36"}

{#section-4 path-to-node="36"}

本文整理自微信公众号 LeisureLinux 的原创内容(Linux / AI / 安全 硬核技术)。

· 阅读原文(微信公众号)

· 关注公众号 LeisureLinux,第一时间获取技术深度内容。

LeisureLinux 公众号二维码(微信扫一扫关注)