
上个月折腾光猫IPv6那晚,我被一句话卡住了十分钟:「路由器WAN口的240e是蹭来的SLAAC地址,手里没前缀可往下分」。那篇我是照着排查思路写完发出去了,但这句到底是什么意思,说实话我当时也是似懂非懂。后来干脆把IPv6的地址结构整个啃了一遍,才发现这串「乱码」比想象中讲道理——顺带把手机WiFi详情里那串fe80、还有「为什么手机的IPv6地址天天在变」这些老疑问全解开了。这篇就把这笔账摊开讲。
为什么IPv6地址长成这样:地址实在是多到没边
先回忆IPv4为什么长那样。192.168.1.1,四段数字,每段0到255,用点隔开——因为IPv4地址是32位,切成四段8位,每段用十进制写出来给人看。32位总共能表示多少个地址?2的32次方,约43亿个。早年够用,现在全球设备早超了这个数,所以才有了NAT共享、才有了「全家共用一个公网IP」这套将就了二十年的方案。
IPv6直接把地址从32位加到128位,翻了四倍长度。写法也换了:128位切成8组、每组16位,用十六进制写,组与组之间用冒号隔开,长这样:
240e:038a:09c1:25d0:7f2e:11aa:33cc:5d16
每组最多4个字符,0到9加a到f。128位能表示的地址数是2的128次方,约3.4×10^38——340后面跟着36个零。这个数大到没有实感,换个说法:运营商随手分给一个家庭的前缀段,都比整个IPv4的43亿地址大得多。地址多到这个份上,才敢提「每台设备一个真公网」的玩法,不用再挤一个门牌。
拆开就三层:运营商的、家里的、设备的
看着吓人,其实一条地址里就三段责任区。拿我家手机此刻的地址拆给你看:
240e:38a:9c1:25d0:7f2e:11aa:33cc:5d16
关键分界线叫「/64」,念作「斜杠六四」:前64位(就是前四组)是「网络部分」,归网络管;后64位(后四组)是「设备部分」,归设备自己管。
前四组还能再拆。头三组240e:38a:9c1是运营商分给我家宽带的,电信家宽都是240e开头,联通2408、移动2409,看到头一组基本能认出是哪家的线(我在开IPv6那篇里提过一嘴)。第四组25d0是家里路由器分出来的「子网号」——运营商发给家里一段(一般叫/56的前缀),路由器从里面挑一小段/64挂到局域网,第四组就是这段的编号。
后四组7f2e:11aa:33cc:5d16是设备自己生成的,路由器说了不算,运营商更管不着。
到这,那句卡住我的话就能翻译成人话了:光猫从运营商拿到一段前缀,往下发给路由器一段,路由器才有「第四组」可分给家里设备。如果光猫没往下发(PD前缀委派没配好),路由器只能自己在WAN口蹭一个地址自用——等于快递员自己有个工牌,但没拿到给你家门牌号的权限,家里其他设备全分不到。这就是光猫开IPv6那篇里那个坑的病根,当时排查半天,本质是这么个结构问题。IPv4世界里这活是DHCP和网关在干,逻辑我在讲网关那篇里写过,v6只是换了套分法。
「::」是省略号,fe80是内线电话
两个读地址的基本功。
第一,全零的组可以压缩。地址里连续的整组0可以缩成两个冒号:240e:38a:9c1:25d0:0:0:0:5a1简写成240e:38a:9c1:25d0::5a1。规矩是一条地址里「::」只能出现一次——出现两次,就没法判断每处省了几组,地址就对不上号了。所以看到::别懵,它就是个省略记号。
第二,fe80开头的地址是「内线号」。每块网卡只要一启用,不用等运营商、不用等路由器,自己就给自己配一个fe80开头的地址,叫链路本地地址。手机WiFi详情里那串fe80打头的就是它。它的活动范围只有本网段内部——路由器发通知、邻居设备互相发现用的都是它,出了家门没人认。所以看到fe80别激动,那不算你家有公网v6;要认「运营商发的全球地址」,得看240e、2408、2409这些开头。
为什么手机的IPv6地址天天在变:地址里曾经藏着MAC
有阵子我隔几天就去看一眼手机的v6地址,发现后四组老在变,一度以为是路由器抽风。查了才知道这是故意的,而且背后有段隐私攻防。
最老的地址生成办法叫EUI-64:把网卡MAC地址拆成两半,中间插进ff:fe凑成64位,塞进地址后四组。比如我那台旧笔记本网卡MAC是a4:5e:60:c8:1f:3d,按这办法生成的后四组就是a65e:60ff:fec8:1f3d——第一字节还翻了个标志位,a4变a6。问题跟着就来了:MAC是全球唯一的,等于把设备指纹明晃晃写在地址上,这手机走到哪个网络,前缀变了,后四组不变,照样被人认出来是同一台。和我之前写过的随机MAC是一个道理,只不过这回是IP地址在替你打卡。
所以现在的系统默认开了「临时地址」:后四组随机生成,对外连接优先用它,每隔24小时换一个新的,旧地址7天后彻底作废。Windows下敲ipconfig,能看到一栏明晃晃写着「临时 IPv6 地址」,跟旁边那行固定地址摆在一起,一眼分清谁是出门用的谁是户口本上的。
这事有个实际副作用:想从外面用v6直连家里某台设备,地址一变就失联。所以v6远程访问从来都是配DDNS域名来解析,不是大家吃饱了撑的。
IPv6世界里没有NAT这回事
把前面几节串起来,一个更大的图景就出来了。
IPv4为什么需要NAT?43亿地址不够分,全家几十台设备挤一个公网IP,进门全靠路由器翻译——查自己有没有公网IP那篇里讲的100.64开头,就是这个体系的产物。而v6地址多到用不完,设计哲学就是「每台设备都是真公网」,端到端直连,压根没给NAT留位置。
顺着这个思路,几件事就说通了。其一,小米路由器那个NAT6模式为什么被叫「假公网」:它在v6上又套了一层地址转换,设备拿到的是假地址,出得去进不来,跟v6的初衷完全拧着,属于「运营商没给前缀」时的土味兼容法。其二,端口转发这套活(我在端口转发和DMZ那篇里写过)在纯v6环境里不存在——门牌都独一无二了,还转什么发,门禁的活交还给防火墙。家用路由器的v6防火墙默认「拦入站、放出站」,体感上继承了NAT时代的保护;想从外面连家里NAS,得手动放行端口。
顺带把安全顾虑说死:v6公网不等于裸奔,默认入站是全拦的,扫描器扫不到你家里那台设备。真要留神的是反过来的情况——自己为了远程访问手动开了放行,用完忘了关。
懂这些结构,排查的时候看哪
说到底,啃地址结构不是为了考试,是排查的时候知道眼睛往哪放。我把常见情况对个座:
| 想干嘛 | 看什么 |
| 确认宽带给没给v6 | 手机WiFi详情里找240e开头的地址,或浏览器开test-ipv6.com看评分 |
| 路由器开了v6但设备没地址 | 九成是光猫没下发前缀,查PD委派,不是路由器的锅 |
| 想远程连家里设备 | v6直连要配DDNS域名(地址会自己变),或者干脆走Tailscale这类组网工具 |
| 改了DNS感觉没生效 | v6的DNS可能还在运营商手里,设备优先走v6通道查询 |
| 指望v6改善游戏NAT类型 | 别指望,那是另一套逻辑的事 |
排查顺序照旧:先确认运营商侧给没给(拿没拿到前缀),再看家里路由器分没分下去,之后才轮到谈远程访问用哪条路。路由器侧的开关各家位置不一样,水星、小米、腾达我分别在这三篇里写过路径,光猫那一层最容易卡人,单独写在电信光猫开IPv6和腾达WAN方式选择里,按需翻。
到头来一句话:IPv6地址那串乱码,前四组看网络(运营商给的加路由器分的),后四组看设备(自己随机生成的),中间一条/64分界线。下次再在后台或者手机里撞见它,至少知道每一层是谁在做主,出了问题也知道该去找谁的麻烦。

发表评论