从 IPv4 到 IPv6:一个运维老兵的踩坑与双栈部署实战
大家好,我是 33blog 的运维老司机。今天想和大家聊聊 IP 地址那些事儿——特别是 IPv4 和 IPv6 的爱恨情仇,以及我们团队在双栈部署路上踩过的那些坑。相信看完这篇,你就能明白为什么 IPv6 喊了这么多年还没完全取代 IPv4,以及在实际环境中如何优雅地过渡。
IPv4:互联网的老功臣
记得我刚入行时,IPv4 就像空气一样理所当然。32 位地址,约 43 亿个组合,在 90 年代看起来简直是天文数字。但现实很骨感——谁能想到我们真的会用完呢?
最让我印象深刻的是 2019 年给客户申请公网 IP 时,AWS 居然要求我们写使用说明!这让我意识到 IPv4 地址真的成了稀缺资源。常见的 IPv4 特点:
- 点分十进制表示(如 192.168.1.1)
- NAT 成为标配(说好的端到端呢?)
- 子网掩码和 CIDR 玩到飞起
IPv6:未来已来,但来得有点慢
IPv6 的 128 位地址号称能给地球上每粒沙子都分配地址,但推广速度堪比蜗牛。去年我给公司内网部署 IPv6 时,发现不少设备居然还不支持!
# 检查 Linux 系统 IPv6 支持
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
# 返回 0 表示已启用
IPv6 的几个关键变化:
- 冒号分隔的十六进制(如 2001:0db8:85a3::8a2e:0370:7334)
- 取消了 NAT(终于回归设计初衷)
- 内置 IPSec 支持
- 无状态地址自动配置(SLAAC)真香
双栈部署:不得不选的过渡方案
在现网环境中,我们最终选择了双栈部署。但这个过程简直是一部血泪史:
坑点1:DNS 解析优先级
有次服务突然不可用,排查半天发现是客户端优先解析了 IPv6,但我们的 IPv6 路由还没配置完整。解决方案:
# 修改 /etc/gai.conf 调整解析优先级
precedence ::ffff:0:0/96 100
坑点2:防火墙规则翻倍
原本简单的 iptables 规则现在要维护两套,后来我们改用 nftables 才统一管理:
# nftables 示例规则
nft add rule inet filter input ip6 saddr 2001:db8::/64 accept
nft add rule inet filter input ip saddr 192.168.1.0/24 accept
实战建议:如何优雅过渡
根据我们的经验,建议按这个节奏推进:
- 先在内网测试环境启用 IPv6
- 确保所有监控系统支持 IPv6 指标
- 应用代码要处理 getaddrinfo() 可能返回的 IPv6 地址
- 逐步将公共服务升级为双栈
- 最后处理 VPN 等特殊场景
最近我们刚完成所有 Web 服务的双栈改造,访问延迟平均降低了 15%。虽然过程曲折,但看到 traceroute 里出现 IPv6 的路径时,那种成就感还是很爽的!
IPv6 的全面普及可能还需要几年时间,但早做准备绝对没错。如果你也在部署过程中遇到问题,欢迎在评论区交流~
第一次看这么详细的IPv6教程,比那种官方的文档好理解多了👍
作为一个网络小白,看完还是有点懵😅 能推荐些更基础的入门资料吗?
双栈部署那段太真实了,我们公司也是遇到DNS解析问题,搞了三天才定位到问题
IPv6推广慢主要还是设备兼容性问题吧?感觉很多IoT设备都还只支持v4
老司机带带我!正好下周要搞IPv6迁移,这篇文章来得太及时了
防火墙那段用nftables的方案太实用了,省了我们很多工作量
IPv4最后那两个地址段现在分配得怎么样了?感觉都在搞NAT划水
想问下小编,你们测试IPv6时用的是什么抓包工具?Wireshark有点不太适应v6的报文格式