清一色
2025-12-12
点 赞
1
热 度
5
评 论
0

什么是 IP 动态伪装(IP Masquerading)?一文搞懂 NAT 技术

  1. 首页
  2. 什么是 IP 动态伪装(IP Masquerading)?一文搞懂 NAT 技术

前言

在配置 OpenWrt 作为主路由时,经常会遇到一个关键配置项:IP 动态伪装(IP Masquerading)。很多人知道要勾选它,但不清楚它到底解决了什么问题。

本文将用通俗易懂的方式,详细解释 IP 动态伪装的原理、作用和应用场景。


核心问题:内网私有 IP 无法在公网使用

典型的家庭网络拓扑

光猫(运营商)
  ↓
OpenWrt 路由器(公网 IP: 10.68.139.195)
  ↓
内网设备
  ├─ NAS: 192.168.0.140
  ├─ 电脑: 192.168.0.150
  ├─ 手机: 192.168.0.xxx
  └─ 其他设备...

问题来了

  • 内网设备使用的是 私有 IP 地址(192.168.0.x)
  • 这些地址在 互联网上不可路由
  • 就像你的房间号,只在小区内有效,邮局看不懂

什么是私有 IP 地址?

IP 地址分类

IP 地址段类型互联网可路由用途
10.0.0.0 - 10.255.255.255私有❌ 否内网
172.16.0.0 - 172.31.255.255私有❌ 否内网
192.168.0.0 - 192.168.255.255私有❌ 否内网
其他地址公网✅ 是互联网

为什么要有私有 IP?

原因:IPv4 地址不够用

  • IPv4 总共只有约 43 亿个地址(2^32)
  • 全球设备数量远超这个数字
  • 解决方案:私有地址可以重复使用
    • 你家的 192.168.0.1 和我家的 192.168.0.1 互不冲突
    • 通过 NAT 技术让多个设备共享一个公网 IP

没有 IP 动态伪装会发生什么?

数据包的悲惨旅程

第 1 步:NAS 发送请求

NAS (192.168.0.140) 想访问 nwpu.edu.cn (202.117.80.233)

发送的数据包:
┌──────────────────────────────────────┐
│ 源 IP: 192.168.0.140                │
│ 源端口: 54321                        │
│ 目标 IP: 202.117.80.233              │
│ 目标端口: 80 (HTTP)                  │
│ 数据: "请给我网页内容"                │
└──────────────────────────────────────┘
        ↓
    通过 OpenWrt 路由器

第 2 步:数据包到达互联网

❌ 没有 IP 动态伪装的情况

OpenWrt 直接转发,不修改源 IP:

┌──────────────────────────────────────┐
│ 源 IP: 192.168.0.140    ← 私有地址!  │
│ 目标 IP: 202.117.80.233              │
└──────────────────────────────────────┘
        ↓
    到达目标服务器

第 3 步:服务器尝试回复

服务器: "收到请求,准备回复给 192.168.0.140"
        ↓
    查询路由表
        ↓
路由器: ❓ "192.168.0.140 是什么?这不是公网地址!"
        "我不知道怎么把数据发到这个地址!"
        ↓
    ❌ 丢弃数据包

结果:NAS 永远收不到回复!

为什么回不来?

原因:私有 IP 地址在互联网上是 不被路由 的。

类比

  • 你写信给朋友,信封上写 "发件人:140 房"
  • 邮局:❓ "140 房?全国有无数个 140 房!"
  • 邮局:❌ "不知道回信寄到哪里,丢弃!"

IP 动态伪装如何解决问题?

完整的通信流程

第 1 步:NAS 发送请求

NAS (192.168.0.140:54321) 想访问 nwpu.edu.cn

原始数据包:
┌──────────────────────────────────────┐
│ 源 IP: 192.168.0.140                │
│ 源端口: 54321                        │
│ 目标 IP: 202.117.80.233              │
│ 目标端口: 80                         │
└──────────────────────────────────────┘
        ↓
    到达 OpenWrt

第 2 步:OpenWrt 进行地址伪装(核心步骤)

✅ 有 IP 动态伪装的情况

OpenWrt 修改数据包的源地址:

地址转换:
┌──────────────────────────────────────────┐
│ 源 IP: 192.168.0.140 → 10.68.139.195    │  改成公网 IP!
│ 源端口: 54321 → 12345                   │  改成随机端口!
│ 目标 IP: 202.117.80.233 (不变)          │
│ 目标端口: 80 (不变)                     │
└──────────────────────────────────────────┘

同时,OpenWrt 在 NAT 表中记录:
┌────────────────────────────────────────┐
│ 端口 12345 ⇔ 192.168.0.140:54321      │
└────────────────────────────────────────┘

修改后发往互联网的数据包:

┌──────────────────────────────────────┐
│ 源 IP: 10.68.139.195    ← 公网地址!  │
│ 源端口: 12345                        │
│ 目标 IP: 202.117.80.233              │
│ 目标端口: 80                         │
└──────────────────────────────────────┘
        ↓
    发往互联网

第 3 步:服务器收到请求并回复

服务器: "收到来自 10.68.139.195:12345 的请求"
        "这是公网地址,知道怎么回!"
        ↓
    准备回复数据

回复数据包:
┌──────────────────────────────────────┐
│ 源 IP: 202.117.80.233                │
│ 源端口: 80                           │
│ 目标 IP: 10.68.139.195  ← 公网地址!  │
│ 目标端口: 12345                      │
│ 数据: "这是网页内容..."               │
└──────────────────────────────────────┘
        ↓
    通过互联网路由回 OpenWrt

第 4 步:OpenWrt 反向转换(De-NAT)

OpenWrt 收到回复,查询 NAT 表:
"端口 12345 对应的是 192.168.0.140:54321"
        ↓
    修改数据包

地址反向转换:
┌──────────────────────────────────────────┐
│ 源 IP: 202.117.80.233 (不变)            │
│ 源端口: 80 (不变)                       │
│ 目标 IP: 10.68.139.195 → 192.168.0.140  │  改回内网 IP!
│ 目标端口: 12345 → 54321                 │  改回原端口!
└──────────────────────────────────────────┘
        ↓
    转发给 NAS

第 5 步:NAS 成功收到回复

✅ NAS (192.168.0.140) 收到网页内容!

通俗比喻:小区寄信的故事

场景设定

你住在一个小区(内网),小区有很多住户,但只有一个大门,门牌号是 "幸福小区 1 号"(公网 IP)。

没有门卫帮忙(没有 IP 动态伪装)

你(140 房)给朋友寄信:

信封:
┌─────────────────────┐
│ 发件人:140 房       │  ← 邮局不认识!
│ 收件人:市中心大厦   │
└─────────────────────┘
        ↓
    直接交给邮局

邮局:❓ "140 房?这是什么地址?"
      "全国有无数个 140 房!"
      "不知道怎么回信,丢掉吧!"

结果:❌ 寄不出去,也收不到回信

有门卫帮忙(有 IP 动态伪装)

你(140 房)给朋友寄信:

原信封:
┌─────────────────────┐
│ 发件人:140 房       │
│ 收件人:市中心大厦   │
└─────────────────────┘
        ↓
    交给门卫

门卫:📝 "好,我记下来:12345 号信 = 140 房的信"

门卫改信封:
┌─────────────────────────┐
│ 发件人:幸福小区1号-12345│  ← 公网地址!
│ 收件人:市中心大厦        │
└─────────────────────────┘
        ↓
    交给邮局

邮局:✅ "幸福小区 1 号,知道在哪!"
      "送过去,回信也寄到这个地址。"
        ↓
    朋友收到信并回信

回信:
┌─────────────────────────┐
│ 发件人:市中心大厦        │
│ 收件人:幸福小区1号-12345│
└─────────────────────────┘
        ↓
    邮局送回小区门口

门卫收到:📝 "12345 号信是 140 房的!"

门卫改信封:
┌─────────────────────┐
│ 发件人:市中心大厦   │
│ 收件人:140 房       │
└─────────────────────┘
        ↓
    转交给你

结果:✅ 成功收到回信!

总结

  • 门卫 = OpenWrt 的 IP 动态伪装
  • 小区门牌号 = 公网 IP
  • 房间号 = 内网私有 IP
  • 信件编号 = 端口号

技术细节

NAT 连接跟踪表

OpenWrt 内部维护一个 连接跟踪表(Connection Tracking Table):

┌──────────┬─────────────────┬────────────────────┬───────┐
│ 公网端口 │ 内网 IP:端口     │ 目标 IP:端口        │ 状态  │
├──────────┼─────────────────┼────────────────────┼───────┤
│ 12345    │ 192.168.0.140:54321 │ 202.117.80.233:80  │ ESTABLISHED │
│ 12346    │ 192.168.0.150:33445 │ 8.8.8.8:53         │ ESTABLISHED │
│ 12347    │ 192.168.0.140:54322 │ 223.5.5.5:53       │ ESTABLISHED │
└──────────┴─────────────────┴────────────────────┴───────┘

查看连接跟踪表

cat /proc/net/nf_conntrack

为什么需要端口映射?

问题:多个内网设备可能使用相同的源端口

NAS (192.168.0.140:54321) 访问 nwpu.edu.cn
电脑 (192.168.0.150:54321) 也访问 nwpu.edu.cn

解决:OpenWrt 分配不同的公网端口

192.168.0.140:54321 → 10.68.139.195:12345
192.168.0.150:54321 → 10.68.139.195:12346

这样就不会冲突了!

iptables 规则示例

# 查看 NAT 规则
iptables -t nat -L POSTROUTING -n -v

# 输出示例
Chain POSTROUTING (policy ACCEPT)
pkts bytes target     prot opt in  out        source           destination
 123  456K MASQUERADE all  --  *   pppoe-wan  192.168.0.0/24   0.0.0.0/0

规则解释

  • MASQUERADE:地址伪装动作
  • 192.168.0.0/24:源地址范围(内网)
  • pppoe-wan:出口接口(WAN)
  • 0.0.0.0/0:目标地址范围(任意)

IP 动态伪装解决的问题

1. ✅ 让内网设备可以访问互联网

没有:内网设备无法上网
有了:所有设备共享一个公网 IP 上网

2. ✅ 节省公网 IP 地址

没有:每个设备需要一个公网 IP(根本不够用)
有了:整个家庭/公司只需一个公网 IP

3. ✅ 提供安全隔离

  • 外网无法直接访问内网设备(除非配置端口转发)
  • 内网设备主动发起的连接才能建立
  • 充当简单的防火墙

4. ✅ 支持多设备同时上网

  • 通过端口映射区分不同设备的连接
  • 理论上可以支持 65535 个并发连接(一个 IP 的端口数量)

5. ✅ 动态适应 IP 变化

  • MASQUERADE 是动态的
  • PPPoE 重新拨号获得新 IP 后,自动使用新 IP
  • 不需要手动修改配置

MASQUERADE vs SNAT

两种 NAT 方式对比

特性MASQUERADESNAT
IP 类型动态获取静态指定
适用场景PPPoE、DHCP(动态 IP)固定公网 IP
性能稍慢(需查询接口 IP)稍快(直接使用指定 IP)
配置复杂度简单需要指定 IP 地址
IP 变化适应✅ 自动适应❌ 需手动修改

MASQUERADE 示例

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o pppoe-wan -j MASQUERADE

特点

  • 自动使用 pppoe-wan 接口的当前 IP
  • IP 变化后自动适应

SNAT 示例

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source 1.2.3.4

特点

  • 固定使用 1.2.3.4 这个 IP
  • IP 变化后需要手动修改规则

如何选择?

  • 家庭宽带(PPPoE 拨号):用 MASQUERADE
  • 企业专线(固定 IP):用 SNAT
  • 不确定:用 MASQUERADE 更保险

OpenWrt 配置方法

方法 1:Web 界面(推荐)

  1. 登录 OpenWrt:http://192.168.1.1
  2. 网络 → 防火墙 → 区域设置
  3. 找到 wan 区域,点击编辑
  4. 勾选:
    • ☑️ 伪装(Masquerading) ← 关键!
    • ☑️ MSS 钳制(MSS Clamping)
  5. 点击 保存并应用

方法 2:命令行配置

# 1. 启用 masq(IP 动态伪装)
uci set firewall.@zone[1].masq='1'

# 2. 启用 mtu_fix(MSS 钳制)
uci set firewall.@zone[1].mtu_fix='1'

# 3. 保存配置
uci commit firewall

# 4. 重启防火墙
/etc/init.d/firewall restart

方法 3:临时测试

# 临时添加规则(重启后失效)
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o pppoe-wan -j MASQUERADE

# 验证
iptables -t nat -L POSTROUTING -n -v

# 在内网设备测试
ping 8.8.8.8

常见问题

Q1:为什么叫"动态"伪装?

:因为它能自动适应公网 IP 的变化。

  • PPPoE 每次拨号可能获得不同的 IP
  • MASQUERADE 会自动使用当前的公网 IP
  • 不需要手动修改配置

Q2:会影响性能吗?

:有轻微影响,但几乎可以忽略。

  • 需要维护 NAT 连接跟踪表
  • 需要修改每个数据包的 IP 和端口
  • 对于家庭网络,影响可以忽略不计

Q3:有安全风险吗?

:相反,NAT 提供了一定的安全保护。

  • ✅ 外网无法直接访问内网设备
  • ✅ 隐藏了内网的网络结构
  • ⚠️ 但不能替代防火墙

Q4:能同时支持多少设备?

:理论上 65535 个并发连接。

  • 一个公网 IP 有 65535 个端口
  • 实际受限于路由器性能和内存
  • 家庭使用完全够用

Q5:IPv6 还需要 NAT 吗?

:IPv6 不需要 NAT。

  • IPv6 地址非常多(2^128)
  • 每个设备都可以有公网 IPv6 地址
  • 但为了安全,仍需要防火墙

总结

IP 动态伪装的本质

一句话总结:让使用私有 IP 的内网设备,通过路由器的公网 IP 访问互联网。

形象比喻

  • 内网设备 = 小区住户(房间号)
  • 公网 IP = 小区大门(门牌号)
  • IP 动态伪装 = 门卫(地址转换服务)
  • 端口号 = 信件编号(区分不同住户)

技术原理

出站

私有 IP + 私有端口 → 公网 IP + 随机端口

入站

公网 IP + 随机端口 → 私有 IP + 原始端口

记录

维护 NAT 连接跟踪表

关键价值

  1. ✅ 节省公网 IP 地址(解决 IPv4 地址不足)
  2. ✅ 让内网设备可以上网(地址转换)
  3. ✅ 提供基础安全防护(隐藏内网)
  4. ✅ 支持多设备共享上网(端口映射)
  5. ✅ 自动适应 IP 变化(动态特性)

参考资料


关键词:IP 动态伪装, MASQUERADE, NAT, 网络地址转换, OpenWrt, iptables, 私有 IP, 公网 IP


版权声明

本文原创,转载请注明出处。


相关文章


大道至简,知易行难

清一色

isfp 探险家

站长

具有版权性

请您在转载、复制时注明本文 作者、链接及内容来源信息。 若涉及转载第三方内容,还需一同注明。

具有时效性
切换评论

目录

八月寻英,扬帆起航,追风逐梦!!!

44 文章数
7 分类数
2 评论数
15标签数