IPv6 基础:ULA、RA/SLAAC、PD 与 DNS 怎么验证
先分清五种地址/机制
Section titled “先分清五种地址/机制”| 名称 | 例子/作用 | 常见误区 |
|---|---|---|
| link-local | fe80::/10 |
每块网卡都有,不等于公网 |
| ULA | fd00::/8 内网地址 |
不能直接上公网 |
| GUA | 2000::/3 公网地址 |
需要上游 PD/分配 |
| RA | 路由器通告前缀/网关/DNS | 客户端没收到就无 SLAAC |
| SLAAC | 客户端用 RA 前缀自己生成地址 | 不等于 DHCPv6 |
| DHCPv6 | 服务器分配地址/前缀/DNS | 和 IPv4 DHCP 不是同一套 |
| PD | 上游把一段前缀委派给路由器 | 没有 PD 就没有 LAN GUA |
路由器 Shell看地址、路由和 UCI
ip -6 addr showip -6 routeuci show network.lanuci show dhcp.lanuci show network.globalslogread -e odhcpd | tail -30本实验:br-lan 有 ULA fd2f:385b:7d0a::1/60 和 link-local;没有默认 IPv6 路由,也没有 GUA。
预期知道只有 link-local、ULA 还是有 GUA。
LAN:ULA + RA/SLAAC
Section titled “LAN:ULA + RA/SLAAC”路由器 Shell确认 LAN 的 IPv6 前缀和 RA 服务
uci show network.globals.ula_prefixuci show network.lan.ip6assignuci show dhcp.lan.rauci show dhcp.lan.ra_slaacuci show dhcp.lan.dhcpv6ps | grep [o]dhcpd本实验:
network.globals.ula_prefix='fd2f:385b:7d0a::/48'network.lan.ip6assign='60'dhcp.lan.ra='server'dhcp.lan.ra_slaac='1'dhcp.lan.dhcpv6='server'ip6assign='60' 表示从 ULA /48 里给 LAN 分 /60;客户端通常拿 /64。
预期LAN 有 ULA 前缀,odhcpd 在发 RA。
电脑让客户端从 RA 拿地址
Linux 示例(仅实验 netns 里用 accept_ra=2;普通客户端通常保持默认):
sysctl -w net.ipv6.conf.eth0.accept_ra=2ip -6 addr show eth0ip -6 routeping -6 -c 2 <router-ULA>本实验 netns 客户端获得:
fd2f:385b:7d0a:0:5088:71ff:fed4:32d2/64 scope global dynamicfe80::5088:71ff:fed4:32d2/64 scope link并成功 ping fd2f:385b:7d0a::1。客户端路由只有 fd2f:385b:7d0a::/64,没有默认 IPv6 路由(因为没有上游)。
预期客户端出现 ULA,能 ping 路由器 IPv6。
WAN:GUA 与 PD
Section titled “WAN:GUA 与 PD”路由器 Shell看 WAN6/上游是否给前缀
uci show network.wan6 2>/dev/nullubus call network.interface.wan6 status 2>/dev/nullip -6 routeip -6 addr show eth1logread | grep -Ei 'odhcp6c|dhcpv6|pd' | tail -30典型主路由:
uci set network.wan6=interfaceuci set network.wan6.device='eth1'uci set network.wan6.proto='dhcpv6'uci commit network/etc/init.d/network reload- 上游必须支持 IPv6/PD;有些光猫/运营商只给 /64 或根本不给;
- 没有 PD 就不要在 LAN 上硬造一个“公网前缀”;
- 本实验没有上游 IPv6,无法验证 GUA/PD,只验证了 ULA/RA/SLAAC。
预期有 GUA 和默认路由,或明确知道上游没给。
DNS 与防火墙
Section titled “DNS 与防火墙”路由器 Shell分别测 AAAA 和 IPv6 DNS
nslookup -type=AAAA openwrt.org 127.0.0.1nslookup -type=AAAA openwrt.org <router-ULA>cat /tmp/resolv.conf.d/resolv.conf.auto- 只有 IPv4 DNS 可用时,AAAA 仍可能解析;
- 客户端 DNS 可能来自 RA/DHCPv6 或手动配置;
- 不要为了“IPv6 通”把 DNS 全切到 IPv6,先保证 IPv4/IPv6 都能回退。
防火墙检查:
uci show firewallnft list ruleset 2>/dev/null | head -80- 允许 ICMPv6/ND/RA(否则 IPv6 直接残废);
- LAN→WAN 的 IPv6 forward 要放行;
- 不要关闭 IPv6 防火墙来“测试通不通”;这是把内网直接暴露。
预期知道是“没有 AAAA”还是“DNS 没走 IPv6”。
只有 fe80 地址
Section titled “只有 fe80 地址”- LAN 没有 ULA 前缀/
ip6assign; - odhcpd 没跑/RA 被防火墙挡;
- 客户端
accept_ra=0; - 中间交换机/AP 挡了 multicast/ICMPv6。
有 ULA,没有 GUA
Section titled “有 ULA,没有 GUA”- 上游没有 IPv6/PD;
wan6没配置/没拿到前缀;- 运营商只给 /64,不能再分 LAN;
- 需要中继/ND proxy 的场景另说,不要硬配。
有地址,不能上网
Section titled “有地址,不能上网”- 没有默认 IPv6 路由;
- 防火墙 forward/ICMPv6;
- DNS 只有 IPv4;
- 上游路由/前缀失效。
开了 IPv6 后 IPv4 变慢/异常
Section titled “开了 IPv6 后 IPv4 变慢/异常”- DNS 优先级/双栈回退;
- 客户端隐私地址/RA 参数;
- 先保留 IPv4 可用,再逐项加 IPv6,不要一次改两层。
E2 实测记录(2026-10-20)
Section titled “E2 实测记录(2026-10-20)”- 环境:OpenWrt 25.12.6 x86 VM 200;LAN
192.168.1.2/24+ ULAfd2f:385b:7d0a::1/60。 - ULA 前缀
fd2f:385b:7d0a::/48;ip6assign=60;ra=server、ra_slaac=1、dhcpv6=server;odhcpd 运行。 - 客户端:SLAAC 得到
fd2f:385b:7d0a:0:5088:71ff:fed4:32d2/64;ping 路由器 ULA 成功。 - 没有上游 IPv6/GUA/PD;未测 WAN6、真实 ISP、DHCPv6 客户端、IPv6 防火墙/NAT。
- 配方:
tests/recipes/ipv6-25.12.md。
- 本页是 E2 partial:LAN ULA/RA/SLAAC 已实测;WAN GUA/PD 和真实 ISP 未测。
- 没有第二评审人;结论只限本次 VM/netns 环境。
- 不要把“LAN 有 ULA”写成“IPv6 已上网”;ULA 只是内网地址。