关注CodingTechWork
引言
在 IP 网络的世界里,IPv4 地址枯竭早已不是新闻,而 IPv6 的全面部署仍处于漫长的过渡期。为了让不同 IP 版本(IPv4/IPv6)以及不同地址类型(公网/私网)的网络能够相互通信,NAT(网络地址转换) 技术不断演化,形成了多种变体。
本文将围绕以下四种核心 NAT 技术展开:
- NAT44:IPv4 私有地址 → IPv4 公有地址
- NAT46:IPv4 → IPv6(让 IPv4 客户端访问 IPv6 服务端)
- NAT64:IPv6 → IPv4(让 IPv6 客户端访问 IPv4 服务端)
- NAT66:IPv6 → IPv6(IPv6 网络间的地址转换)
注意:NAT46 与 NAT64 的方向相反,切勿混淆。
介绍
IPv4 与 IPv6 的本质差异
| 特性 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32 bit | 128 bit |
| 地址数量 | ~43 亿 | 2^128 |
| 表示方式 | 点分十进制 (192.168.1.1) | 十六进制冒号分隔 (2001:db8::1) |
| NAT 必要性 | 极高(因地址短缺) | 理论上不需要,但实践中存在 |
私有地址范围(RFC 1918)
10.0.0.0/8172.16.0.0/12192.168.0.0/16
这些地址不能在公网路由,必须通过 NAT 转换。
特殊 IPv6 地址范围
- 唯一本地地址 (ULA) :
fc00::/7(类似 IPv4 私网) - 链路本地地址 :
fe80::/10 - IPv4 映射 IPv6 地址 :
::ffff:0:0/96(NAT46 常用) - NAT64 知名前缀 :
64:ff9b::/96(用于合成 AAAA 记录)
CIDR 与 192.168.1.0/24 网段详解
###核心概念
- 网段:是IP地址空间的一段连续区间,用于在局域网(LAN)或虚拟网络中,对设备进行逻辑分组。
- CIDR表示法 :即"IP地址/前缀长度",例如
192.168.1.0/24。其中/24表示子网掩码的前24位为1。 - 子网掩码 :与IP地址配合使用,用以区分网络位 和主机位 。对于
/24,其点分十进制形式的子网掩码为255.255.255.0。
192.168.1.0/24 网段解析
| 属性 | 值 | 说明 |
|---|---|---|
| IP地址范围 | 192.168.1.0 ------ 192.168.1.255 |
完整地址空间。 |
| 网络地址 | 192.168.1.0 |
标识网络本身,不可分配给主机。 |
| 广播地址 | 192.168.1.255 |
用于向该网段所有主机发送消息,不可分配给主机。 |
| 可用IP地址 | 192.168.1.1 ------ 192.168.1.254 |
共 254 个地址,可分配给路由器、电脑、打印机等设备。 |
| 网络位 | 前 24 位 (即 192.168.1) |
所有同网段设备的网络部分必须相同。 |
| 主机位 | 后 8 位 (即最后一个数字) | 用于区分同一网段内的不同设备。 |
应用与特性
- 网络类型 :
192.168.1.0/24属于 C类私有地址(定义于 RFC 1918)。 - 路由范围 :该地址段不能在公共互联网上直接路由,必须通过网络地址转换(NAT)技术才能访问公网。
- 典型场景 :非常适合用于家庭、小型办公室或实验室环境的局域网,可轻松容纳 254 台设备。
计算与扩展
- 可用主机数公式 :对于
/24网段,主机位为 8 位,可用主机数 = ( 2^8 - 2 = 254 ) 个。减去的是网络地址和广播地址。 - 划分子网 :可以通过向主机位借位,将
/24网段划分为更小的子网(例如/25、/26等),以适应不同规模的需求。
NAT44:IPv4 到 IPv4 的转换
原理
将内部私有 IPv4 地址转换为一个或多个公网 IPv4 地址,通常结合 端口复用 (PAT/NAPT),让成百上千个内网主机共享一个公网 IP。
流量图

示例配置(iptables)
bash
# 开启IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# SNAT:将内网192.168.1.0/24的源地址改为eth0的公网IP
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.5
优缺点
- 优点:成熟、高效、节省 IPv4 地址
- 缺点:破坏端到端透明性;P2P/VoIP 穿透困难
NAT46:IPv4 客户端访问 IPv6 服务端
核心原理
NAT46 将 IPv4 数据包转换为 IPv6 数据包 ,使 仅支持 IPv4 的客户端 能够访问 仅支持 IPv6 的服务器。
它通常配合 DNS46 使用:DNS46 将 IPv6 服务器地址合成为 IPv4 地址(例如将 2001:db8::1 映射为 192.0.2.100),引导流量经过 NAT46 网关。
- 转换方式:有状态(维护映射表)或无状态(前缀静态映射)
- 典型前缀映射:将 IPv6 前缀映射到一段 IPv4 地址池
流量图

应用场景
- 过渡期兼容:让尚未升级的 IPv4 遗留系统访问新部署的 IPv6-only 服务
- 内容提供商:老旧 IPv4 监控系统需要调用 IPv6 后端 API
- 运营商/企业:部分内部工具只支持 IPv4,但后端已迁移至 IPv6
示例配置
bash
# 加载 Jool 模块
modprobe jool
# 添加 NAT46 实例(方向:IPv4 → IPv6)
jool instance add "nat46" --netfilter --pool4 192.0.2.100/32
# 添加 IPv4 → IPv6 静态映射
jool -i nat46 static add 192.0.2.100 2001:db8::1
# 开启 IPv4 转发
sysctl -w net.ipv4.ip_forward=1
NAT64:IPv6 客户端访问 IPv4 服务端
核心原理
NAT64 允许 仅具有 IPv6 地址的客户端 访问 仅具有 IPv4 地址的服务器 。它通常配合 DNS64 使用:DNS64 合成 AAAA 记录(将 IPv4 地址嵌入 IPv6 前缀中),引导流量经过 NAT64 网关。
- 知名前缀 :
64:ff9b::/96(Well-Known Prefix)或自定义 - 转换方式:有状态(维护映射表)或无状态
流量图(有状态 NAT64)

示例配置
bash
# 加载Jool内核模块
modprobe jool
# 添加NAT64实例
jool instance add "nat64" --netfilter --pool6 64:ff9b::/96
# 添加IPv4地址池(用于转换后的源地址)
jool -i nat64 pool4 add 203.0.113.100 203.0.113.200
# 开启IPv4转发
sysctl -w net.ipv4.ip_forward=1
应用场景
- 移动运营商(纯 IPv6 手机访问 IPv4 互联网)
- 企业 IPv6-only 数据中心访问外部 IPv4 服务
- 云平台过渡期
NAT66:IPv6 到 IPv6 的转换
为什么需要 NAT66?
IPv6 的设计目标是不需要 NAT,但现实中仍有几种场景促使 NAT66 出现:
- 多宿主场景 :内部网络使用 ULA (
fd00::/8),对外使用公网 IPv6 前缀(当 ISP 变动时避免内部重编址) - 网络合并:两个使用相同 IPv6 前缀的私有网络通过 VPN 连接时避免冲突
- 安全/策略需求:隐藏内部 IPv6 地址结构
- 传统思维惯性:部分管理员仍习惯 NAT 隔离
核心原理
与 NAT44 类似,将内部 IPv6 源地址转换为另一个 IPv6 地址(通常是前缀替换)。可以是有状态(维护映射表)或无状态(如 NPTv6 - 前缀静态映射)。
- NPTv6 (RFC 6296):无状态前缀转换,1:1 映射,不改变端口号。
流量图(有状态 NAT66)

示例配置(nftables)
bash
# 使用 nftables 做 NPTv6 前缀转换
nft add table nat66
nft add chain nat66 postrouting { type nat hook postrouting priority 100\; }
nft add rule nat66 postrouting oifname "eth0" \
snat ip6 to 2001:db8:1000::/48 map { fd01::/48 : 2001:db8:1000::/48 }
四种 NAT 对比总表
| 类型 | 转换方向 | 地址类型转换 | 端口转换 | 常见程度 | 典型场景 |
|---|---|---|---|---|---|
| NAT44 | IPv4 → IPv4 | 私网 IPv4 → 公网 IPv4 | 通常有 | 极高 | 家庭/企业普通上网 |
| NAT46 | IPv4 → IPv6 | IPv4 → IPv6 | 可有可无 | 极低 | IPv4 客户端访问 IPv6 服务 |
| NAT64 | IPv6 → IPv4 | IPv6 → IPv4 | 有状态 | 高 | IPv6-only 访问 IPv4 服务 |
| NAT66 | IPv6 → IPv6 | IPv6 → IPv6 | 可选 | 低 | 多宿主、内部前缀冲突解决 |
重点记忆:NAT46 是 IPv4 → IPv6;NAT64 是 IPv6 → IPv4,两者方向相反。