IPv6过渡技术
约 1662 字大约 6 分钟
ipv6transition
2025-07-14
概述
IPv4地址已经耗尽,IPv6是互联网的未来。但从IPv4到IPv6的过渡不可能一蹴而就,需要各种过渡技术保证两个协议栈在共存期间的互通性。本文解析IPv6地址体系和主要的过渡技术方案。
IPv6地址格式
IPv6使用128位地址,比IPv4的32位提供了近乎无限的地址空间(2^128 ≈ 3.4×10^38个地址)。
IPv6地址表示法:
完整形式:2001:0db8:0000:0000:0000:0000:0000:0001
省略前导零:2001:db8:0:0:0:0:0:1
连续零段压缩:2001:db8::1 (::只能使用一次)
IPv4映射的IPv6地址:
::ffff:192.168.1.1 或 ::ffff:c0a8:0101
IPv6前缀表示:
2001:db8::/32 (前32位为网络前缀)IPv6地址类型
常见IPv6地址对照:
| 用途 | IPv4 | IPv6 |
|---|---|---|
| 环回地址 | 127.0.0.1 | ::1 |
| 未指定地址 | 0.0.0.0 | :: |
| 全局单播 | 公网IP | 2000::/3 |
| 链路本地 | 169.254.0.0/16 | fe80::/10 |
| 私有地址 | 10.0.0.0/8等 | fd00::/8 (ULA) |
| 广播 | 255.255.255.255 | 无(使用组播替代) |
双栈(Dual Stack)
双栈是最直接的过渡方案:网络设备和主机同时运行IPv4和IPv6协议栈。
# Linux双栈配置
# /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
iface eth0 inet6 static
address 2001:db8::10
netmask 64
gateway 2001:db8::1
# 验证双栈配置
ip addr show eth0
# 应同时显示IPv4和IPv6地址
# DNS双栈解析
dig example.com A # IPv4地址
dig example.com AAAA # IPv6地址
# Happy Eyeballs算法(RFC 8305)
# 浏览器同时尝试IPv4和IPv6连接
# 优先使用IPv6,但如果IPv6连接慢于IPv4 250ms
# 则使用IPv4连接双栈优缺点:
- 优点:最简单直接,两种协议互不干扰
- 缺点:每台设备需要两个地址,管理复杂度翻倍
隧道技术
隧道技术将IPv6数据包封装在IPv4数据包中传输,用于在IPv4网络上传输IPv6流量。
6to4隧道
6to4地址格式:
2002:IPv4地址:子网ID:接口ID/48
示例:
IPv4地址 192.0.2.1 → 2002:c000:0201::/48
c0.00.02.01(十六进制)Teredo隧道
Teredo可以穿越NAT,将IPv6封装在UDP中:
Teredo地址格式(2001:0000::/32):
2001:0000:Teredo服务器IPv4:标志:外部端口:外部IPv4
Windows查看Teredo状态:
netsh interface teredo show stateISATAP隧道
ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)用于站点内部的IPv4/IPv6过渡。
ISATAP接口地址:
前缀::0000:5efe:IPv4地址
示例:
2001:db8:1::/64 + 192.168.1.10
→ 2001:db8:1::5efe:c0a8:10aNAT64/DNS64
NAT64允许IPv6-only的客户端访问IPv4-only的服务器,是推动IPv6-only网络部署的关键技术。
# NAT64知名前缀
64:ff9b::/96
# DNS64配置(BIND)
options {
dns64 64:ff9b::/96 {
clients { any; };
mapped { !rfc1918; any; }; # 不转换私有地址
exclude { 64:ff9b::/96; };
};
};
# Jool NAT64网关配置(Linux)
modprobe jool
jool instance add default --iptables --pool6 64:ff9b::/96
ip6tables -t mangle -A PREROUTING -d 64:ff9b::/96 -j JOOL --instance default
iptables -t mangle -A PREROUTING -j JOOL --instance default464XLAT
464XLAT解决了NAT64环境下IPv4应用的兼容性问题(如IPv4字面量地址、IPv4 socket API):
IPv6部署最佳实践
# 服务器IPv6配置检查清单
# 1. 确认内核支持IPv6
sysctl net.ipv6.conf.all.disable_ipv6
# 应为0
# 2. 配置IPv6地址
ip -6 addr add 2001:db8::1/64 dev eth0
ip -6 route add default via 2001:db8::ffff
# 3. 防火墙配置(ip6tables)
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp -j ACCEPT # ICMPv6是IPv6必需的
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
ip6tables -A INPUT -j DROP
# 4. Nginx双栈监听
server {
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
server_name example.com;
}
# 5. DNS配置AAAA记录
example.com. IN A 93.184.216.34
example.com. IN AAAA 2606:2800:220:1:248:1893:25c8:1946IPv6采用现状
全球IPv6部署率(截至2025年):
- 印度: ~70%
- 美国: ~50%
- 德国: ~60%
- 中国: ~30%
- 日本: ~50%
- 全球平均: ~40%
推动因素:
- IPv4地址耗尽
- 移动互联网增长
- 运营商IPv6-only网络
- 云服务商支持
阻碍因素:
- 遗留系统兼容
- 运维人员技能
- 安全工具适配
- 投资回报不明显迁移策略
总结
IPv6过渡是一个长期渐进的过程。双栈是目前最实用的方案,NAT64/DNS64使IPv6-only网络成为可能。在制定迁移策略时,应优先确保应用和基础设施支持双栈,然后逐步增加IPv6流量比例,最终目标是IPv6-only + NAT64(仅对需要访问IPv4的流量做转换)。ICMPv6在IPv6中扮演关键角色,配置防火墙时切勿盲目阻止。
贡献者
更新日志
2026/3/14 13:09
查看所有更新日志
9f6c2-feat: organize wiki content and refresh site setup于