第117篇:IPv6 过渡技术:双栈、隧道、NAT64
关键词:双栈、Dual Stack、6in4 隧道、6to4、ISATAP、NAT64、DNS64、IPv4-IPv6 过渡、迁移策略
一、引言
在前几篇中,我们系统学习了 IPv6 的邻居发现、地址配置和路由协议。然而,现实世界中的网络并非一夜之间就能完成从 IPv4 到 IPv6 的切换。目前互联网上同时运行着 IPv4 和 IPv6 两套协议栈,如何让 IPv4 和 IPv6 网络互通,是网络工程师面临的核心挑战。
IPv6 过渡技术解决了 IPv4 和 IPv6 共存期间的互联互通问题,主要包括双栈、隧道和翻译(NAT64)三大类。
二、核心概念
2.1 过渡技术分类
| 技术类别 | 代表技术 | 适用场景 |
|---|---|---|
| 双栈(Dual Stack) | Dual Stack | 设备和链路同时支持 IPv4/IPv6 |
| 隧道(Tunnel) | 6in4、6to4、ISATAP、GRE | IPv6 孤岛跨越 IPv4 网络 |
| 翻译(Translation) | NAT64、SIIT | IPv4 终端访问 IPv6 资源 |
2.2 双栈(Dual Stack)
双栈是最简单、最推荐的过渡方式。设备同时运行 IPv4 和 IPv6 协议栈,同时维护两套地址和路由表。

2.3 隧道技术原理
隧道技术将一种协议的报文封装在另一种协议中传输。对于 IPv6 过渡,通常是将 IPv6 报文封装在 IPv4 报文中,跨越不支持 IPv6 的 IPv4 网络。
| 隧道类型 | 封装方式 | 特点 |
|---|---|---|
| 6in4(手动隧道) | IPv6 封装在 IPv4,协议号 41 | 需要手动配置两端 IPv4 地址 |
| 6to4(自动隧道) | IPv6 封装在 IPv4,协议号 41 | 从 IPv6 地址中提取 IPv4 地址自动寻址 |
| ISATAP | IPv6 封装在 IPv4,协议号 41 | 将 IPv4 地址嵌入 IPv6 地址 |
| GRE 隧道 | IPv6 封装在 GRE + IPv4 | 通用隧道,支持多协议 |
2.4 NAT64 翻译原理
NAT64 在 IPv4 和 IPv6 之间进行协议翻译,使 IPv6 终端能够访问 IPv4 资源:

三、技术细节
3.1 6in4 手动隧道
6in4 隧道需要手动配置隧道两端的 IPv4 地址。隧道建立后,IPv6 报文被封装在 IPv4 报文中传输。
| 配置项 | 说明 |
|---|---|
| 隧道源地址 | 本地设备的 IPv4 地址 |
| 隧道目的地址 | 对端设备的 IPv4 地址 |
| 隧道 IPv6 地址 | 隧道接口的 IPv6 地址 |
| MTU | 隧道 MTU 需扣除 IPv4 头部(20 字节),建议 1280 |
3.2 6to4 自动隧道
6to4 使用特定的 IPv6 前缀 2002::/16,将 IPv4 地址嵌入 IPv6 地址中:
| IPv6 地址格式 | 说明 |
|---|---|
| 2002:VVVV:XXXX::YYYY | VVVV = IPv4 地址(16进制),YYYY = 接口 ID |
| 示例 | 2002:0AC0:0A80::1 = IPv4 172.16.10.128 站点的 ::1 |
3.3 NAT64 地址前缀
NAT64 使用特定的 Well-Known Prefix 进行地址翻译:
| 前缀 | 说明 |
|---|---|
| 64:ff9b::/96 | Well-Known Prefix,IPv4 地址直接映射到最后 32 位 |
| 示例 | 64:ff9b::c0a8:0164 = 192.168.1.100 |
3.4 DNS64 配合 NAT64
DNS64 是 NAT64 的配套技术,当 IPv6 终端查询一个只有 A 记录(IPv4)的域名时,DNS64 将 A 记录的 IPv4 地址嵌入到 NAT64 前缀中,合成 AAAA 记录返回给客户端。
四、实战配置/案例分析
4.1 双栈配置
# ========== 双栈接口配置 ==========
[HUAWEI] interface GigabitEthernet 0/0/0
[HUAWEI-GigabitEthernet0/0/0] ip address 192.168.1.1 255.255.255.0
[HUAWEI-GigabitEthernet0/0/0] ipv6 enable
[HUAWEI-GigabitEthernet0/0/0] ipv6 address 2001:db8:1::1/64
# ========== 双栈路由配置 ==========
# IPv4 静态路由
[HUAWEI] ip route-static 10.0.0.0 255.0.0.0 192.168.1.254
# IPv6 静态路由
[HUAWEI] ipv6 route-static 2001:db8:2::/48 2001:db8:1::254
# ========== 验证 ==========
[HUAWEI] display ip routing-table
[HUAWEI] display ipv6 routing-table
4.2 6in4 手动隧道配置
# ========== 隧道端点 A(站点 A 路由器) ==========
# 1. 创建隧道接口
[HUAWEI] interface Tunnel 1
[HUAWEI-Tunnel1] tunnel-protocol ipip
[HUAWEI-Tunnel1] source 202.100.1.1
[HUAWEI-Tunnel1] destination 202.100.2.1
[HUAWEI-Tunnel1] ipv6 enable
[HUAWEI-Tunnel1] ipv6 address 2001:db8:100::1/128
[HUAWEI-Tunnel1] tunnel color 1
[HUAWEI-Tunnel1] quit
# ========== 隧道端点 B(站点 B 路由器) ==========
[HUAWEI] interface Tunnel 1
[HUAWEI-Tunnel1] tunnel-protocol ipip
[HUAWEI-Tunnel1] source 202.100.2.1
[HUAWEI-Tunnel1] destination 202.100.1.1
[HUAWEI-Tunnel1] ipv6 enable
[HUAWEI-Tunnel1] ipv6 address 2001:db8:100::2/128
[HUAWEI-Tunnel1] tunnel color 1
[HUAWEI-Tunnel1] quit
# ========== 验证 ==========
[HUAWEI] ping -a 2001:db8:100::1 2001:db8:100::2
[HUAWEI] display tunnel 1 brief
4.3 NAT64 配置
# ========== NAT64 网关配置 ==========
# 1. 配置 NAT64 地址池(IPv4 地址用于映射)
[HUAWEI] nat64 address-group 1
[HUAWEI-nat64-group1] nat64 address 192.168.100.1 192.168.100.10
[HUAWEI-nat64-group1] quit
# 2. 配置 NAT64 规则
[HUAWEI] nat64 rule basic 1
[HUAWEI-nat64-rule-1] ipv6 source any
[HUAWEI-nat64-rule-1] ipv6 destination 64:ff9b::/96
[HUAWEI-nat64-rule-1] ipv6-ipv4 address-group 1
[HUAWEI-nat64-rule-1] quit
# 3. 在 IPv6 接口的出方向应用 NAT64
[HUAWEI] interface GigabitEthernet 0/0/0
[HUAWEI-GigabitEthernet0/0/0] ipv6 enable
[HUAWEI-GigabitEthernet0/0/0] ipv6 address 2001:db8:1::1/64
[HUAWEI-GigabitEthernet0/0/0] nat64 enable
# 4. 配置 IPv4 接口
[HUAWEI] interface GigabitEthernet 0/0/1
[HUAWEI-GigabitEthernet0/0/1] ip address 192.168.100.1 255.255.255.0
# ========== 验证 ==========
[HUAWEI] display nat64 session
[HUAWEI] display nat64 statistics
4.4 DNS64 配置
# ========== DNS64 配置 ==========
# 1. 启用 DNS64
[HUAWEI] dns dns64 enable
[HUAWEI] dns dns64 prefix 64:ff9b::/96
# 2. 配置 DNS 服务器
[HUAWEI] dns server 1.1.1.1
[HUAWEI] dns server 8.8.8.8
# ========== 验证 ==========
[HUAWEI] display dns dns64 configuration
4.5 故障案例:隧道 MTU 导致大包丢失
场景描述:6in4 隧道建立后,小数据包(ping 64 字节)正常通过,但大数据包(ping 1500 字节)全部超时。
排查过程:
- 测试 MTU:
# 从小包开始递增测试
[HUAWEI] ping -a 2001:db8:100::1 2001:db8:100::2 -a 1280
# 1280 字节:成功
[HUAWEI] ping -a 2001:db8:100::1 2001:db8:100::2 -a 1300
# 1300 字节:失败
- 根因分析:IPv6 报文经过 6in4 隧道封装后,增加了 IPv4 头部(20 字节)。原始 IPv6 MTU 为 1500,封装后变为 1520,超过了物理链路的 MTU(1500)。中间路由器不支持 DF 位分片处理(IPv4 头部 DF 位被设置),导致大包被丢弃。
处理措施:
# 方案一:调整隧道接口 MTU
[HUAWEI] interface Tunnel 1
[HUAWEI-Tunnel1] ipv6 mtu 1280
[HUAWEI-Tunnel1] quit
# 方案二:启用 PMTUD(路径 MTU 发现)
# IPv6 原生支持 PMTUD,确保中间路由器正确发送 Packet Too Big 报文
4.6 故障案例:NAT64 映射冲突
场景描述:NAT64 网关运行一段时间后,部分 IPv6 终端无法访问特定的 IPv4 服务器。
排查过程:
- 检查 NAT64 会话:
[HUAWEI] display nat64 session | include 192.168.1.200
# 发现 192.168.1.200 被多个不同的 IPv6 地址映射
- 检查 NAT64 地址池:
[HUAWEI] display nat64 address-group 1
# IPv4 地址池范围:192.168.100.1 - 192.168.100.10
# 已使用:10 个(地址池已耗尽)
- 根因分析:NAT64 地址池只有 10 个 IPv4 地址,当并发会话数超过地址池大小时,新的会话无法建立映射。
处理措施:
# 扩大 NAT64 地址池
[HUAWEI] nat64 address-group 1
[HUAWEI-nat64-group1] undo nat64 address 192.168.100.1 192.168.100.10
[HUAWEI-nat64-group1] nat64 address 192.168.100.1 192.168.100.254
[HUAWEI-nat64-group1] quit
# 或使用端口映射(NAPT64),一个 IPv4 地址支持 65535 个端口
[HUAWEI] nat64 rule basic 1
[HUAWEI-nat64-rule-1] ipv6-ipv4 address-group 1 port-reuse
五、总结
| 项目 | 说明 |
|---|---|
| 双栈 | 最简单的过渡方案,设备同时运行 IPv4/IPv6 |
| 6in4 隧道 | 手动配置,适用于点对点 IPv6 互联 |
| 6to4 隧道 | 自动隧道,适用于 IPv6 孤岛互联 |
| NAT64 | IPv6 终端访问 IPv4 资源的翻译方案 |
| DNS64 | 配合 NAT64 使用,合成 AAAA 记录 |
| MTU 注意 | 隧道封装增加头部开销,需调整 MTU |
| 华为推荐 | 优先双栈,IPv6 孤岛用隧道,IPv6 终端访问 IPv4 用 NAT64 |
思考
-
双栈网络中,如果 IPv4 和 IPv6 路由走向不一致(IPv4 走路径 A,IPv6 走路径 B),会导致什么问题?
-
6to4 隧道使用 2002::/16 前缀。如果网络中同时使用了 6to4 和正常的全局单播地址,如何区分和路由?
-
NAT64 只能让 IPv6 终端访问 IPv4 资源,IPv4 终端无法主动发起对 IPv6 资源的访问。这种单向性会带来什么问题?如何解决?
下篇预告:第118篇:VRRP 虚拟路由冗余协议:主备切换