ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

NAT网络地址转换实战:从PAT配置到会话表排查的运维指南

NAT网络地址转换实战:从PAT配置到会话表排查的运维指南

干了这么多年网络运维,接手过的网络故障没有一百也有八十了,但真正让我觉得“别以为你懂了”的,恰恰是最基础的NAT网络地址转换协议。无论是公司里几百号人共用一个公网IP上网,还是在家里路由器上给监控做个端口映射,背后都是它在起作用。很多刚入门的朋友觉得NAT就是个“把内网IP换成公网IP”的简单操作,可真到了排查视频打不开、游戏掉线、外网访问不到内网服务器的时候,才发现自己对它理解得远远不够。

这篇内容不打算写成教科书式的原理讲解,而是把我这些年在一线设备上配置、调试、踩坑的经验整理出来,从NAT为什么存在、有哪几种模式,到具体参数怎么配、出了问题怎么查,一次性说透。无论你是刚接触网络的入门者,还是被NAT问题困扰过一段时间的运维同路人,这篇文章应该都能给你一些参考。

1. 为什么需要NAT:一个公网IP不够用的现实问题

1.1 从一次断网排查说起

前几年给一家初创公司做网络整改,他们整个办公室大概六七十台设备,却只有一个公网IP。网络偶尔抽风,具体表现是某些同事网页打不开,但QQ微信还能发消息。当时同事的第一反应是DNS有问题,换了好几个DNS服务器都没解决。后来我登进网关设备看了一眼NAT会话表,发现表项被占满了,新发起的连接根本没有多余的端口可用,自然表现为“网页打不开、即时通讯还凑合”。

这件事让我意识到,很多网络问题的根子不在链路、不在DNS,而在NAT的资源管理和映射方式上。说白了,NAT承担的不只是“地址转换”,它同时负责内网流量的会话跟踪和资源分配。理解不了这一层,排查方向就会跑偏。

1.2 IPv4地址枯竭催生了NAT

NAT出现的根本原因,是IPv4地址总量只有约43亿个,而全球设备数量早已远超这个数字。如果每一台设备都要一个独一无二的公网IP,地址空间早就被分光了。于是,协议设计者划出了三段私有地址范围——10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。私有地址可以在任意一个局部网络里重复使用,但不能直接在公网上路由。

NAT的作用,就是在这两类地址之间架起一座桥:内网设备使用私有地址通信,当数据包穿过网关到达公网时,NAT设备把源IP替换成公网IP;响应数据包返回时,再把目标IP替换回原来的私有地址。整个过程对终端设备是透明的——你只管上网,NAT在背后默默操作。

这个设计的巧妙之处在于,它不仅仅省了IP,还天然形成了一道隔离层。外部网络无法直接发起连接进入内网,除非网管主动配置了端口映射。这也是为什么NAT被很多人视为“穷人的防火墙”,虽然它本身并不是安全设备。

2. NAT的几种核心工作模式,分清楚才能不翻车

2.1 静态NAT:一对一映射

静态NAT就是给内网某一台设备绑定一个固定的公网IP,映射关系长期不变。常用于需要稳定对外提供服务的服务器场景,比如公司官网、邮件服务器。配置静态NAT后,所有来自公网、指向该公网IP的流量都会被转发到内网对应的那台服务器上。

它的优势是映射关系清晰,排查起来一眼就能看明白。缺点是浪费公网IP,毕竟现在公网IPv4资源紧张,一个人能分到一两个固定IP已算不错,不可能给每台服务器都分配独立公网IP。所以实际部署中,静态NAT往往只用于最核心的几台设备。

2.2 动态NAT:多对多映射

动态NAT维护一个公网IP地址池,内网设备发起连接时,NAT设备从地址池里临时分配一个公网IP给它,连接结束并等待超时后回收。这种方式比静态NAT灵活,但本质上仍然是一对一占用公网IP,适合公网IP数量充足、内网同时上网设备不多的场景。

我在实际项目里用动态NAT用得不多,因为绝大多数中小企业的公网IP通常只有个位数,而内网设备却有几十上百台,动态NAT很快就无IP可分了。如果你们公司手头公网IP比较多,动态NAT可以缓解一部分压力,但终究不是解决地址短缺的根本手段。

2.3 PAT端口复用:大多数家用路由器的默认模式

PAT是Port Address Translation的缩写,也就是端口地址转换。它让多个内网设备共享同一个公网IP地址,通过区分源端口来保持会话独立。这是目前应用最广泛的NAT模式,家庭宽带路由器、企业出口网关默认都在用PAT。

它的原理可以这样理解:内网设备A发起一个访问外部网站的请求,源端口是50000;设备B同时发起另一个请求,源端口是50001。NAT设备把源IP统一换成公网IP,源端口保留或重新分配为全局唯一的端口号,然后记录到会话表里。外部服务器返回数据时,NAT设备根据目标端口找到对应会话,把数据转交给正确的内网设备。

理解了PAT之后,再回看那个“表项占满”的故障就很简单了。一台NAT设备可用的端口数量是有限的,一般一个公网IP的可用端口范围是0到65535,除去一些保留端口,实际可用的大约几万个。当一个端口被一条会话占用,在会话超时之前不能被复用。如果内网同时发起大量连接——尤其是某些P2P软件、迅雷下载这种“连接狂魔”——几万个端口很快会被耗尽,新连接就无法建立。

2.4 NAT与NAPT的关系

严格来说,NAT是地址转换的统称,而NAPT是带有端口转换功能的地址转换。很多资料把两者混用,但实际在配置层面是有区分的:纯NAT只改IP不改端口,NAPT则在改IP的同时也改端口。我们在日常所说的“上网用的NAT”,绝大多数是指NAPT,但大家已经习惯叫它NAT了。在设备上配置的时候,要留意厂商文档里的用词,有些厂商把NAPT单独列为一个选项,选错了行为会不一样。

3. 核心概念与参数选型:配置之前必须搞懂的术语

3.1 inside和outside,以及四种地址概念

无论你用的是哪家厂商的设备,NAT配置都绕不开四个概念:内部本地地址、内部全局地址、外部本地地址、外部全局地址。我当年学的时候也被这四个词绕晕过,后来用一句话总结:站在NAT设备的角度,“内部”指内网,“外部”指公网;“本地”指转换前,“全局”指转换后。

常见的场景是配置“内部本地地址到内部全局地址”的映射,也就是内网设备的私有IP到公网IP的转换。理解了这个坐标,配置文件里那些access-list和nat语句就不再是死记硬背的咒语了。比如在思科设备上写一句:

ip nat inside source static 192.168.1.10 203.0.113.5

翻译成人话就是:把内网的192.168.1.10静态映射到公网203.0.113.5,所有从内网出去、源IP是192.168.1.10的流量都改为203.0.113.5;所有从公网进来、目标IP是203.0.113.5的流量都改为192.168.1.10。

同时你还需要在接口上声明哪些口是“内部”、哪些是“外部”:

interface GigabitEthernet0/0 ip nat inside interface GigabitEthernet0/1 ip nat outside

接口声明错了方向,配置再好也白搭。我曾经见过一个现场,技术人员把两个接口的nat方向全写反了,结果内网全部上不了网,排查了半天才发现是方向的问题。

3.2 启用PAT的关键参数

如果只是让员工上网,一般配置一个基本的PAT即可。华为设备上典型的配置思路是:

acl number 2000 rule 5 permit source 192.168.1.0 0.0.0.255 nat address-group 1 203.0.113.10 203.0.113.20 interface GigabitEthernet0/0/0 nat outbound 2000 address-group 1

这个配置的含义是:允许192.168.1.0/24网段的内网设备通过出口接口上网,公网地址自动从地址组里选取。如果只有一个公网IP,不需要额外指定地址组,直接在接口上写nat outbound 2000即可。

在家庭路由器上,这些参数已经被厂商封装成“上网方式”的下拉选项,无非是PPPoE拨号、动态IP、静态IP三种。但了解底层逻辑对你排查家庭网络故障依然有帮助,比如当你给NAS做了端口映射却仍然访问不了,多半是PAT会话表或者端口映射的优先级出了问题。

3.3 防火墙与NAT的交互

企业防火墙上的NAT配置通常比路由器更复杂,因为防火墙自带安全策略,NAT转换完成之后还要过一遍域间策略。常见的误区是:明明NAT规则配好了,外网还是访问不了内网映射出去的服务器,查来查去发现是安全策略放行规则没有写。

以某品牌防火墙为例,外网用户访问内网Web服务器,至少需要三步:

  1. 创建安全策略,允许外部区域访问内部区域的HTTP服务。
  2. 创建目的NAT规则,把公网IP加端口映射到内网服务器的私有IP加端口。
  3. 确认服务器的网关指向防火墙接口,回包路径正常。

这三步缺一不可。我见过太多人只配了第二步,然后对着屏幕上“连接超时”发呆。安全策略、NAT规则、路由走向三位一体,缺一个都无法访问。

4. 实操过程与核心环节实现:从零配置一个标准PAT场景

4.1 场景设定与地址规划

假设一个场景:某公司有一条宽带,运营商分配了一个公网IP 203.0.113.88,网关是203.0.113.1。公司内网使用192.168.10.0/24网段,网关设备是一台支持NAT的企业路由器。目标很简单:让内网所有员工正常访问互联网,同时把内网一台监控服务器的8080端口映射出去,方便出差时远程查看。

规划如下:

项目参数
内网网段192.168.10.0/24
路由器内网接口192.168.10.1/24
路由器外网接口203.0.113.88/24
运营商网关203.0.113.1
监控服务器内网IP192.168.10.88
监控服务器端口8080(内网),映射到外网8080

4.2 基础连网NAT配置

首先配置接口地址,让路由器的两个接口都属于各自网络。

interface GigabitEthernet0/0 description LAN ip address 192.168.10.1 255.255.255.0 ip nat inside interface GigabitEthernet0/1 description WAN ip address 203.0.113.88 255.255.255.0 ip nat outside

然后配置ACL,只允许内网网段做NAT转换:

acl number 2000 rule 5 permit source 192.168.10.0 0.0.0.255

最后在出接口上绑定NAT:

interface GigabitEthernet0/1 nat outbound 2000

配置完成后,内网终端把网关指向192.168.10.1,正常情况下就能上网了。验证命令通常是:

display nat session all

这条命令会显示当前活跃的全部NAT会话,包括协议、源地址、转换后的地址、状态等信息。如果会话表里能看到192.168.10.0/24的设备源源不断地产生新条目,说明NAT工作正常。

4.3 端口映射配置

接着是端口映射,把内网监控服务器的8080端口映射到公网IP的8080端口。华为设备上的配置思路是配置一个NAT server,或者用目的NAT的方式实现。

interface GigabitEthernet0/1 nat server protocol tcp global 203.0.113.88 8080 inside 192.168.10.88 8080

这条命令的含义是:公网用户访问203.0.113.88的8080端口时,把流量转交给192.168.10.88的8080端口。

如果采用目的NAT方式,需要额外声明一个地址池或者直接用公网IP做映射,同时还要搭配安全策略,过程更长但逻辑更清晰。家用路由器上通常把这部分叫做“端口转发”或“虚拟服务器”,本质上就是目的NAT。

配置完之后,建议从外网用telnet或浏览器验证一下端口是否通了:

telnet 203.0.113.88 8080

如果不通,优先检查安全策略,再检查NAT会话,最后看服务器本身有没有监听端口。

4.4 验证与抓包分析

有一段时间我习惯在关键变更后抓包验证,尤其是NAT这种“看不见摸不着”的环节。在路由器上开启抓包,或者在出口交换机上做镜像,观察数据包在转换前后的差异。正常情况下,内网发出的包源IP是192.168.10.x,到了路由器外网口之后,源IP变成了203.0.113.88,同时源端口被改成一个高位端口。响应包回来时,目标IP和目标端口会被还原成原来的私有地址和端口。

抓包时重点关注两个点:一是TCP序列号是否正常,二是会话超时后是否有残留包。很多人遇到“连接不稳定”的问题,往往是因为NAT超时时间与业务不匹配。比如某些数据库长连接,如果NAT会话空闲超时设置得太短,连接空闲超过设置时间就会被设备切断,业务端看到的就是“连接被重置”或者“远程主机强迫关闭了一个现有的连接”。这时候需要调整NAT会话的超时时间,或者开启应用层的保活机制。

5. 常见问题与排查技巧实录

5.1 NAT类型与P2P联机问题

游戏玩家对NAT类型应该不陌生,Switch、PS5等主机上会显示NAT类型是A、B还是C/D。这里的NAT类型指的是NAT设备对入站连接的处理策略,主要分为全锥形、受限锥形、端口受限锥形和对称NAT几种。

全锥形NAT:只要内网设备向外发过包,外部任何主机都能用这个映射的地址和端口主动向内网设备发包。这种类型对P2P最友好,但安全性最差。

对称NAT:每次对外通信都使用不同的端口映射,外部无法预测映射关系,安全性高,但对P2P极不友好,容易出现“双方都在NAT后面互相连不上”的情况。

家用路由器默认大多是锥形NAT,有条件的话在路由器设置里找“NAT类型”“ALG”“UPnP”等开关。如果你的应用要求比较高,又不想为了联机去折腾路由器,可以考虑用支持端口映射和UPnP的设备,让应用程序自己申请端口映射。

5.2 FTP、VoIP等特殊协议穿不过NAT

FTP协议分为主动模式(Active)和被动模式(Passive)。主动模式下,客户端连接服务器21端口后,服务器会主动向客户端发起一条新连接去传数据。但这条新连接的源端口是20,目标端口是客户端随机开放的端口。问题来了:客户端的这个端口是内网设备临时监听的,如果不做特殊处理,公网上的FTP服务器无法穿过NAT去连接这个内网端口。

解决FTP穿NAT问题的常规手段是开启设备的FTP ALG(应用层网关)。ALG会解析FTP控制连接里的IP和端口信息,自动生成对应的NAT映射,保障数据连接能够建立。同样的道理适用于很多带动态端口协商的协议,比如VoIP的SIP、H.323。现在大多数商用路由器默认开启了常用协议的ALG,但如果你在硬路由上刷了开源固件,可能默认没开,需要手动确认。

注意:ALG不是越多越好。因为ALG需要深度解析数据包内容,开启过多会消耗设备CPU,还可能干扰像QUIC这类加密协议的正常通信。我在实践中倾向于只开启必需的ALG,其他保持关闭状态。

5.3 NAT表项耗尽与端口冲突

回到开头那个案例,NAT表项耗尽在中小型网络里并不少见。表现形式很典型:办公网络一到下午就有人反映网页打不开、视频会议卡掉,但内网互访完全正常。在外网口上看流量,带宽占用并不高,说明瓶颈不在带宽,而在NAT资源。

排查思路如下:

  1. 登录网关设备,查看NAT会话数上限和当前使用量。
  2. 查看哪些内网IP占用的会话数最多,通常会是P2P下载、迅雷、在线视频类流量。
  3. 检查会话超时时间设置,尤其是TCP、UDP的默认老化时间。
  4. 如果想快速恢复,可以手动清除NAT会话:reset nat session,但这种方法效果是暂时的,根本解法是限制单IP会话数,或者增加公网IP做负载分担。

我在这类场景里经常采用的做法是,在ACL里针对高会话占用IP做限速或限制并发连接数。效果立竿见影,而且不影响正常办公。

5.4 外网访问不了内网服务器的排查清单

外网访问内网映射的服务失败,原因通常藏在下面几个环节里:

排查项检查内容
公网IP是否变化动态IP环境下,IP变了映射就失效,考虑用DDNS
运营商是否封端口80、443等常用端口可能被宽带运营商限制
安全策略是否放行防火墙策略没放行外网到内网方向的流量
服务器网关是否正确服务器网关指向了其他设备,回包路由错误
端口映射协议是否匹配TCP映射不能给UDP业务用,反之亦然

其中“服务器网关指向其他设备”是我遇到最多的问题。内网服务器上配置的网关如果还是旧路由器的IP,那么服务器收到外网请求后回应包直接扔给了旧路由器,旧路由器没有对应会话,直接把包丢弃。网上很多人称之为“NAT回流问题”,实际上这往往不是回流技术没实现,而是回包路径错误——我们管这叫非对称路由。遇到这种问题,把服务器网关改成正向NAT设备的接口IP就好。

5.5 NAT与DDNS配合动态IP场景

很多家庭的公网IP是动态变化的,今天是这个IP,明天可能换了另一个。如果要做端口映射对外提供服务,需要一个动态域名解析服务(DDNS)来把固定域名实时解析到当前的公网IP上。路由器里一般都有DDNS功能,填入服务商提供的域名和密钥即可。每过一段时间,路由器会自动检测公网IP变化,并主动更新域名解析记录。

我在实际使用中总结出一个小技巧:DDNS更新有延时,一旦发现访问不了,不要急着在客户端上刷新DNS缓存,先登录路由器后台看当前公网IP是不是已经变了。很多时候是旧IP还在本地DNS缓存里没过期,手动清一下缓存或者等TTL过期就能恢复。

6. NAT与IPv6的共存现状

6.1 IPv6地址量够用,为什么还需要NAT

IPv6地址空间大到几乎可以给地球上每一粒沙子分配一个地址,理论上不再需要NAT这种地址复用手段。主流的IPv6使用方式确实也更倾向于每台设备一个全球单播地址,端到端连通性得到保障,P2P应用不再害怕NAT阻挡。

但现实是,纯IPv6网络的部署进展比预期慢得多。很多内网设备、老旧应用和机房服务器仍然只支持IPv4,IPv6无法直接服务于它们。于是出现了各种过渡技术,比如双栈、隧道、翻译等。NAT64就是其中一种,它让IPv6网络中的终端可以访问IPv4网络中的资源。即使在未来,NAT64这类技术仍然有存在的意义,因为它解决的是“两个不同协议版本之间的互操作”问题,而不是单纯的地址短缺问题。

6.2 端到端透明性与网络安全的两难

IPv6恢复了端到端的透明性,每台设备都有公网地址,相当于把每一台设备都直接暴露在公网上,这让安全问题浮出水面。使用IPv4+NAT架构时,NAT天然隐藏了内网结构,外部无法扫描到内部每台设备的实时状态;切换到IPv6后,这些信息全部暴露,防火墙和主机安全加固的重要性进一步上升。

目前在纯IPv6环境中,很多人仍然会部署防火墙策略,甚至刻意使用ULA地址加NAT66来模拟传统NAT的效果。这种看似“倒退”的做法,其实反映了网络管理者对安全的考虑:与其让所有设备直接暴露在公网,不如在出口做统一收敛和策略管控。我个人的看法是,NAT不一定随着IPv6普及会完全消失,但它的职责会逐渐收敛:从“解决地址短缺”演变为“承担策略管控和过渡衔接”。

话说回来,不管下一代协议怎么演进,理解NAT的工作机制、会话原理和排查方法,始终是网络从业者绕不开的基本功。我在实际操作中的体会是,遇到NAT问题不要慌,先明确内外接口方向,再看会话表状态,最后抓包确认转换行为,基本上九成问题都能定位。如果你在实践过程中卡在某个环节,欢迎在评论区留言,我们一起讨论。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进