众所周知,IPv6 地址中可以用 :: 来省略一连串的 0,于是,在某些情况下,如果 0 被过度合并了,就会导致地址解析的问题。
最近在 AWS 上启用 IPv6 的时候就遇到了这个情况,AWS 分配给我的地址段是:
2406:da14:5c9::/56
可以看出,AWS 实际给我分配的地址是:
2406:da14:5c9:0000::/56
但是由于连续 0 的省略策略,导致 5c9 之后的真正可以被划分的部分被省略了。于是在 AWS 的系统中,子网划分页面就显示成了这样:
2406:da14:5__::/64
按照正常逻辑应该是这样:
2406:da14:5c9:00__:/56
结果当然就悲剧了。这里我除了填 c9 之外,任何的值都会导致划分出的子网不在上面的地址段内,导致划分失败。
所幸的是 AWS 的系统可以随意的解绑地址段,然后重新分配。于是重新分配之后就好了。
不过这里也是对我们的一个提醒:由于 IPv6 地址书写的特殊性,连续 0 会被缩写,那么在进行地址读取和判断的时候,就一定要先做 :: 的展开,再去做判断哦。
IPv6 地址处理时的小 Bug by 桔子小窝 is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.