第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 协议栈,同时维护两套地址和路由表。

双栈(Dual Stack) - 图示

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 资源:

NAT64 翻译原理 - 图示

三、技术细节

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 字节)全部超时。

排查过程:

  1. 测试 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 字节:失败
  1. 根因分析: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 服务器。

排查过程:

  1. 检查 NAT64 会话:
[HUAWEI] display nat64 session | include 192.168.1.200
# 发现 192.168.1.200 被多个不同的 IPv6 地址映射
  1. 检查 NAT64 地址池:
[HUAWEI] display nat64 address-group 1
# IPv4 地址池范围:192.168.100.1 - 192.168.100.10
# 已使用:10 个(地址池已耗尽)
  1. 根因分析: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

思考

  1. 双栈网络中,如果 IPv4 和 IPv6 路由走向不一致(IPv4 走路径 A,IPv6 走路径 B),会导致什么问题?

  2. 6to4 隧道使用 2002::/16 前缀。如果网络中同时使用了 6to4 和正常的全局单播地址,如何区分和路由?

  3. NAT64 只能让 IPv6 终端访问 IPv4 资源,IPv4 终端无法主动发起对 IPv6 资源的访问。这种单向性会带来什么问题?如何解决?

下篇预告:第118篇:VRRP 虚拟路由冗余协议:主备切换