核心内容摘要
17c.ccm登录入口网页版:开启数字新纪元,畅享无限可能
NAT 基本概念
1 什么是 NATNATNetwork Address Translation网络地址转换就像是一个大楼的总机接线员text想象一栋大楼 - 内部100个房间内网设备每个房间有内部号码私有IP - 外部只有1个对外电话号码公网IP - 接线员NAT的工作
房间A要打外线 → 接线员用自己的电话打出去记下房间A ↔ 分机101
外线电话打进来要找房间B → 接线员转接到房间B
2 为什么需要 NATtextIPv4 地址危机 - IPv4地址只有约
4
9亿个 - 全球设备超过100亿台 - 解决方案私网IP NAT 私网IP地址段
10.
0.
0 -
10.
255.
2
255 约1677万个
172.
16.
0 -
172.
31.
2
255 约104万个
192.
168.
0 -
192.
168.
2
255 约65536个 这些地址可以重复使用通过NAT上网
NAT 的五大类型详解
1 静态 NAT1对1固定映射配置示例bash# 华为/华三设备 [R1]nat static global
122.
1.
10 inside
192.
168.
100 # 思科设备 R1(config)#ip nat inside source static
192.
168.
100
122.
1.
10工作原理text永久绑定
192.
168.
100 ⇄
122.
1.
10 数据包变化 出方向
192.
168.
100 →
122.
1.
10 入方向
122.
1.
10 →
192.
168.
100特点✅双向访问外网可以主动访问内网设备✅端口不变1对1映射端口号保持不变❌浪费IP一个公网IP只能给一台设备用❌配置繁琐每台设备都要单独配置适用场景bash#
对外服务器 Web服务器
192.
168.
100 →
122.
1.
10 #
特殊设备 监控摄像头、门禁系统、IP电话 #
需要固定公网IP的应用 VPN网关、金融终端
2 动态 NAT多对多池映射配置示例bash#
定义地址池 [R1]nat address-group 1
122.
1.
10
122.
1.
20 #
定义哪些内网可以转换ACL [R1]acl 2000 [R1-acl-basic-2000]rule permit source
192.
168.
0
0.
0.
255 #
在接口应用NO-PAT模式 [R1-GigabitEthernet0/0/1]nat outbound 2000 address-group 1 no-pat工作原理text地址池
122.
1.
10 -
122.
1.
2011个公网IP 动态分配 设备A上网时
192.
168.
10 → 分配
122.
1.
10 设备B上网时
192.
168.
11 → 分配
122.
1.
11 ... 设备K上网时
192.
168.
20 → 分配
122.
1.
20 设备L上网时没有可用IP了等待...NAT 表bash# display nat session NO-PAT Session:
192.
168.
10 ⇄
122.
1.
10
192.
168.
11 ⇄
122.
1.
11
192.
168.
12 ⇄
122.
1.
12特点✅节约IP多个内网设备共享多个公网IP✅负载均衡轮流使用地址池中的IP❌仍然1对1一个内网设备独占一个公网IP❌不支持外网主动访问地址池分配算法bash#
轮询分配默认 设备1 → IP1, 设备2 → IP2, 设备3 → IP3, 设备4 → IP
.. #
端口块分配高级功能 每个设备分配一个端口块类似PAT但端口范围固定
3 NAPTPAT - 网络地址端口转换配置示例bash# 标准配置与动态NAT类似但去掉no-pat [R1]nat address-group 1
122.
1.
1
122.
1.
3 [R1]acl 2000 [R1-acl-basic-2000]rule permit source
192.
168.
0
0.
0.
255 [R1-GigabitEthernet0/0/1]nat outbound 2000 address-group 1 # 注意没有 no-pat 参数工作原理重点text公网IP
122.
1.
1一个IP就够了 设备A访问百度
192.
168.
10:1555 → PAT →
122.
1.
1:60001 设备B访问百度
192.
168.
20:1555 → PAT →
122.
1.
1:60002 设备A的另一个连接
192.
168.
10:1666 → PAT →
122.
1.
1:60003NAT 表端口是关键bash# display nat session PAT Session Table: 协议 内网IP:端口 外网IP:端口 状态 TCP
192.
168.
10:1555 ⇄
122.
1.
1:60001 ESTABLISHED TCP
192.
168.
20:1555 ⇄
122.
1.
1:60002 ESTABLISHED TCP
192.
168.
10:1666 ⇄
122.
1.
1:60003 ESTABLISHED UDP
192.
168.
30:1234 ⇄
122.
1.
1:60004 ACTIVE端口号管理bash# 端口范围 可用端口
约64512个 # 分配策略
随机分配从端口池随机选取
递增分配60001, 60002,
..
端口复用连接关闭后端口可重新使用 # 连接数计算 假设每个设备平均20个并发连接 一个公网IP可支持64512 ÷ 20 ≈ 3225台设备特点✅极度节约IP一个公网IP带数千设备✅真正的多对一多个内网共享一个公网IP❌外网无法主动访问无固定映射❌某些协议不兼容FTP、SIP等可能需要ALG
4 Easy IP特殊NAPT配置示例bash# 最简单的配置 [R1]acl 2000 [R1-acl-basic-2000]rule permit source
192.
168.
0
0.
0.
255 [R1-GigabitEthernet0/0/1]nat outbound 2000 # 注意没有address-group使用接口IP工作原理text假设接口IP是动态获取的PPPoE拨号 今天IP是
113.
208.
7
122 明天IP是
113.
208.
8
155 Easy IP自动使用当前接口IP做PAT 设备A
192.
168.
10:1555 →
113.
208.
7
122:60001 设备B
192.
168.
20:1555 →
113.
208.
7
122:60002与普通NAPT的区别bash# 普通NAPT 需要预先配置 address-group nat outbound 2000 address-group 1 # Easy IP 自动使用接口IP无需配置地址池 nat outbound 2000适用场景✅家庭宽带PPPoE动态IP✅小微企业只有一个公网IP✅4G/5G路由器IP经常变化
5 NAT Server端口映射配置示例bash# 标准语法 [R1-GigabitEthernet0/0/1]nat server protocol tcp global
122.
1.
1 80 inside
192.
168.
100 8080 # 使用别名 [R1-GigabitEthernet0/0/1]nat server protocol tcp global
122.
1.
1 www inside
192.
168.
100 8080 # 映射所有协议 [R1-GigabitEthernet0/0/1]nat server global
122.
1.
1 inside
192.
168.
100工作原理text端口映射表 外网访问
122.
1.
1:80 → 映射到 →
192.
168.
100:8080 外网访问
122.
1.
1:21 → 映射到 →
192.
168.
200:21 外网访问
122.
1.
1:3389 → 映射到 →
192.
168.
50:3389各种变体
一对一完全映射bash# 所有端口都映射 nat server global
122.
1.
10 inside
192.
168.
100 # 相当于静态NAT
多对一不同端口到不同服务器bash# Web服务器 nat server protocol tcp global
122.
1.
1 80 inside
192.
168.
100 80 # 邮件服务器 nat server protocol tcp global
122.
1.
1 25 inside
192.
168.
200 25 nat server protocol tcp global
122.
1.
1 110 inside
192.
168.
200 110 # 远程桌面 nat server protocol tcp global
122.
1.
1 3389 inside
192.
168.
50
端口重定向bash# 外网端口和内网端口不同 nat server protocol tcp global
122.
1.
1 8080 inside
192.
168.
100 80 # 用户访问 http://
122.
1.
1:8080 → 实际访问内网80端口
使用接口IP动态IP场景bashnat server protocol tcp global current-interface 80 inside
192.
168.
100 80 # 无论接口IP怎么变都映射80端口特点✅外网可主动访问主要用途✅灵活可以只开放特定端口✅安全隐藏内网真实端口❌配置复杂每个服务都要单独配置
ACL 与 NAT 的搭配使用
1 ACL 在 NAT 中的作用基本规则bash# ACL 只做 筛选不做 允许/拒绝转发 # NAT 只转换 ACL permit 的流量 流程 数据包 → 匹配ACL → permit → NAT转换 → 转发 ↓ deny/未匹配 → 不转换 → 可能丢弃看其他策略典型配置结构bash# 步骤1创建ACL定义谁可以上网 [R1]acl 2000 [R1-acl-basic-2000]rule 5 permit source
192.
168.
0
0.
0.
255 [R1-acl-basic-2000]rule 10 permit source
192.
168.
0
0.
0.
255 # 隐式规则rule deny source any # 步骤2应用NAT [R1-GigabitEthernet0/0/1]nat outbound 2000 address-group 1 # 结果 -
192.
168.
0/24 可以上网被NAT转换 -
192.
168.
0/24 可以上网被NAT转换 - 其他网段不能上网不转换通常无法访问外网
2 ACL 的
注意事项注意1ACL 的隐式拒绝bash# 所有ACL末尾都有隐式的 rule deny source any # 这意味着 如果你希望所有内网都能上网必须 acl 2000 rule permit source any # 否则 acl 2000 rule permit source
192.
168.
0
0.
0.
255 # 其他网段默认被拒绝转换注意2ACL 编号的含义bash# 华为/华三 ACL
基本ACL只匹配源IP ACL
高级ACL匹配源IP、目标IP、协议、端口等 # 思科 标准ACL
,
只匹配源IP 扩展ACL
,
可匹配五元组 # NAT outbound 通常用基本ACL
# NAT server 可以用高级ACL做精细控制注意3ACL 规则的顺序bash# ACL 按规则号从小到大匹配 acl 2000 rule 5 deny source
192.
168.
50 0 # 禁止某个IP上网 rule 10 permit source
192.
168.
0
0.
0.
255 # 允许整个网段 # 结果
192.
168.
50 不能上网优先匹配rule 5 # 调整顺序解决问题 acl 2000 rule 5 permit source
192.
168.
0
0.
0.
255 rule 10 deny source
192.
168.
50 0 # 结果
192.
168.
50 也能上网匹配rule 5就停止了注意4反向流量控制bash# NAT只控制出方向的转换 # 返回流量自动反向转换不受ACL控制 # 如果你要控制外网访问内网服务器 # 错误做法在outbound的ACL里配置 # 正确做法使用NAT server 接口ACL # 示例只允许特定外网访问Web服务器 acl 3000 rule 5 permit tcp source
8.
8.
8 0 destination
122.
1.
1 0 destination-port eq 80 interface GigabitEthernet0/0/1 nat server protocol tcp global
122.
1.
1 80 inside
192.
168.
100 80 traffic-filter inbound acl 3000 # 在接口上应用ACL过滤
3 复杂场景的 ACL 设计场景1不同部门使用不同出口IPbash# 研发部用 IP1市场部用 IP2 nat address-group 1
122.
1.
1
122.
1.
1 nat address-group 2
122.
1.
2
122.
1.
2 acl 2000 rule 5 permit source
192.
168.
0
0.
0.
255 # 研发部 acl 2001 rule 5 permit source
192.
168.
0
0.
0.
255 # 市场部 interface GigabitEthernet0/0/1 nat outbound 2000 address-group 1 nat outbound 2001 address-group 2场景2限制某些应用不上网bash# 高级ACL禁止BT下载假设BT用
端口 acl 3000 rule 5 deny tcp source
192.
168.
0
0.
0.
255 destination-port range 6881 6889 rule 10 deny udp source
192.
168.
0
0.
0.
255 destination-port range 6881 6889 rule 15 permit ip # 允许其他所有 # 基本ACL允许上网 acl 2000 rule 5 permit source
192.
168.
0
0.
0.
255 # 应用到接口 interface GigabitEthernet0/0/1 nat outbound 2000 address-group 1 traffic-filter outbound acl 3000 # 过滤特定应用场景3工作时间限制bash# 创建时间段 time-range work-time periodic daily 9:00 to 18:00 # ACL结合时间段 acl 2000 rule 5 permit source
192.
168.
0
0.
0.
255 time-range work-time # 非工作时间不能上网不匹配规则隐式拒绝
NAT 的详细工作流程
1 数据包转换过程以PAT为例出方向转换bash# 原始数据包 源MAC设备A的MAC 源IP
192.
168.
10 源端口1555 目标IP
8.
8.
8 目标端口53 # 步骤1路由查询 目标
8.
8.
8 → 查路由表 → 下一跳走GigabitEthernet0/0/1 # 步骤2检查NAT配置 接口G0/0/1配置了nat outbound 2000 address-group 1 # 步骤3匹配ACL 源IP
192.
168.
10 → 匹配ACL 2000 rule permit → 允许转换 # 步骤4分配外网地址和端口 从address-group 1选取IP
122.
1.
1 从端口池分配端口60001 # 步骤5修改数据包 源IP
192.
168.
10 → 改为
122.
1.
1 源端口1555 → 改为 60001 重新计算校验和 # 步骤6记录NAT会话 创建会话表项
192.
168.
10:1555 ↔
122.
1.
1:60001 ↔
8.
8.
8:53 # 步骤7转发数据包入方向转换返回流量bash# 返回数据包 源IP
8.
8.
8 源端口53 目标IP
122.
1.
1 目标端口60001 # 步骤1查找NAT会话表 查找目标
122.
1.
1:60001 → 找到对应项
192.
168.
10:1555 # 步骤2反向转换 目标IP
122.
1.
1 → 改为
192.
168.
10 目标端口60001 → 改为 1555 # 步骤3转发到内网
2 NAT 会话表详解查看会话表bash# 华为 display nat session # 思科 show ip nat translations会话表字段bashProtocol: TCP/UDP/ICMP Source IP:Port : 原始内网地址 Translate IP:Port : 转换后的公网地址 Dest IP:Port : 目标地址 State : 连接状态 TTL/Timeout : 剩余生存时间会话超时时间bash# 默认超时时间华为 TCP会话1200秒20分钟 UDP会话120秒 ICMP会话60秒 FIN/RST包30秒快速释放 # 修改超时时间 nat session tcp timeout 3600 # TCP改为1小时 nat session udp timeout 300 # UDP改为5分钟
3 NAT ALG应用层网关为什么需要ALGtext某些协议在数据包中嵌入了IP地址和端口信息
FTPPORT命令中携带IP和端口
SIPSDP消息中携带IP和端口
H.323同样嵌入地址信息 普通NAT只改IP头不改数据内容 → 协议会中断 ALG会解析并修改应用层数据中的地址ALG 支持的协议bash# 查看支持的ALG display nat alg # 通常包括 FTP21端口 : ✅ 默认开启 SIP5060端口 : ✅ 默认开启 H.323 : ✅ 默认开启 RTSP : ✅ 默认开启 PPTP : ✅ 默认开启 DNS : ❌ 通常不开启会破坏DNSSECALG 工作原理以FTP为例bash# FTP主动模式 客户端
192.
168.
10 → PORT 192,168,1,10,60,80表示60*2568015440端口 NAT ALG检测到PORT命令 → 修改为PORT 122,1,2,1,60,80 同时在NAT表中添加
122.
1.
1:15440 ↔
192.
168.
10:15440 # FTP被动模式类似处理PASV响应启用/禁用ALGbash# 启用特定ALG nat alg ftp enable # 禁用如果ALG导致问题 nat alg ftp disable # 注意某些安全设备会默认禁用ALG
NAT 的配置最佳实践
1 企业网络典型配置bash#
定义内网网段 vlan batch 10 20 30 interface Vlanif10 ip address
192.
168.
1 24 # 研发部 interface Vlanif20 ip address
192.
168.
1 24 # 市场部 interface Vlanif30 ip address
192.
168.
1 24 # 服务器区 #
定义地址池3个公网IP nat address-group office
122.
1.
1
122.
1.
3 #
ACL控制不同部门 acl 2000 rule 5 permit source
192.
168.
0
0.
0.
255 # 研发部 rule 10 permit source
192.
168.
0
0.
0.
255 # 市场部 # 服务器区默认不能上网 #
配置PAT上网 interface GigabitEthernet0/0/1 ip address
122.
1.
254 24 nat outbound 2000 address-group office #
配置服务器映射 nat server protocol tcp global
122.
1.
1 80 inside
192.
168.
100 80 nat server protocol tcp global
122.
1.
1 443 inside
192.
168.
100 443 nat server protocol tcp global
122.
1.
2 25 inside
192.
168.
200
2
2 家庭网络典型配置bash#
外网接口PPPoE拨号 interface Dialer0 ip address ppp-negotiate nat outbound 3000 # Easy IP #
内网接口 interface GigabitEthernet0/0/0 ip address
192.
168.
1 24 #
允许所有内网上网 acl 3000 rule 5 permit source
192.
168.
0
0.
0.
255 #
游戏机/摄像头固定IP可选 ip source static user-bind ip-address
192.
168.
100 mac-address xxxx-xxxx-xxxx
3 高可用配置双出口bash# 主链路 interface GigabitEthernet0/0/1 # 电信 ip address
122.
1.
1 24 nat outbound 2000 address-group telecom # 备链路 interface GigabitEthernet0/0/2 # 联通 ip address
122.
2.
1 24 nat outbound 2000 address-group unicom # 地址池 nat address-group telecom
122.
1.
10
122.
1.
20 nat address-group unicom
122.
2.
10
122.
2.
20 # 策略路由主链路优先 acl 3000 rule 5 permit ip route-policy P1 permit node 10 if-match acl 3000 apply ip-address next-hop
122.
1.
254 # 电信网关 apply ip-address next-hop
122.
2.
254 # 联通网关备份 interface Vlanif10 ip policy route-policy P1
NAT 的
常见问题与排错
1 无法上网的排查步骤bash# 步骤1检查内网能否ping通路由器 ping
192.
168.
1 # 步骤2检查路由表 display ip routing-table # 要有默认路由
0.
0.
0/0 → 下一跳 # 步骤3检查NAT配置 display nat outbound display nat address-group # 步骤4检查NAT会话 display nat session # 如果有会话说明NAT工作正常 # 步骤5检查ACL display acl 2000 # 确认源IP匹配permit规则 # 步骤6抓包分析 tcpdump -i GigabitEthernet0/0/1 host
8.
8.
8.
8
2 NAT 会话不建立的可能原因bash
ACL 不匹配 - 源IP不在permit规则中 - ACL应用到了错误的方向
地址池耗尽 - NO-PAT模式下IP用完了 - PAT模式下端口用完了罕见
路由问题 - 没有默认路由 - 策略路由覆盖了NAT
防火墙阻止 - 接口ACL拒绝了数据包 - 区域策略阻止
硬件限制 - NAT会话数超限 - CPU/内存不足
3 NAT 会话建立但无法通信bash
返回路径问题 - 非对称路由去程和回程路径不同 - 回程路由器没有到NAT公网IP的路由
ALG 问题 - FTP/SIP等协议需要ALG - ALG被禁用或工作异常
MTU 问题 - NAT后数据包变大如VPN over NAT - 需要调整MTU或启用MSS钳制
状态检测问题 - 防火墙看到内网IP→外网但返回是外网→公网IP - 需要状态化检测或关闭严格检查
4 常用排错命令bash# 华为/华三 display nat session verbose # 详细会话信息 display nat statistics # NAT统计信息 display nat alg # ALG状态 reset nat session # 清除NAT会话谨慎 # 思科 show ip nat translations verbose show ip nat statistics debug ip nat # 实时调试生产环境谨慎 clear ip nat translation * # 清除会话
NAT 的高级特性
1 NAT 负载均衡bash#
服务器负载均衡SLB nat server-group web-servers section 1
192.
168.
100 80 section 2
192.
168.
101 80 section 3
192.
168.
102 80 interface GigabitEthernet0/0/1 nat server protocol tcp global
122.
1.
1 80 inside server-group web-servers # 算法轮询/加权/最少连接
2 双向 NAT两次转换bash# 场景内网访问内网服务器但要走公网IP # 源和目的都转换 nat bidirectional
122.
1.
1
192.
168.
100 # 内网访问
122.
1.
1 → 转换为访问
192.
168.
100 # 同时源地址也转换如果需要
3 NAT 与 VPN 的结合bash# 场景分支机构通过VPN访问总部服务器 # 问题两边都用
192.
168.
0/24网段 # 解决方案NAT before VPN acl 3000 rule 5 permit ip source
192.
168.
0
0.
0.
255 interface GigabitEthernet0/0/1 nat outbound 3000 address-group 1 # 这样
192.
168.
0/24 → 转换为
172.
16.
0/24 → 走VPN
4 NAT 日志与审计bash# 启用NAT日志 info-center enable nat log enable nat flow log enable # 日志内容 %Oct 27 14:30:01 R1 NAT/6/NAT_FLOW: SrcIP
192.
168.
10 SrcPort1555 DstIP
8.
8.
8 DstPort53 ProtocolUDP ActionTRANSLATE XlateIP
122.
1.
1 XlatePort60001 # 用于安全审计、故障排查、计费
八、