做eNSP实验做到NAT这一章我发现很多人会卡在一个问题上静态NAT、动态NAT、Easy IP命令都认识各有各的用法但一旦放进一张综合拓扑里就不知道怎么配合了。这篇文章就把这三种NAT方式放在同一个实验里完整做一遍从设备选型、地址规划到每条命令为什么要这样写再到它们在同一出口上共存的流量走向全程按我在eNSP里实际敲过的顺序来。适合刚学完路由交换、准备啃NAT这块或者做企业网络配置想理清NAT选型思路的朋友。1. 静态NAT、动态NAT、Easy IP的本质差异三种映射模型1.1 三种NAT不是配置复杂度不同而是映射模型不同NAT说到底就一件事在转发的时候改IP头里的源地址或目的地址。但改的方式不同适用场景就完全不同。静态NAT是最基础的一对一映射内网一个固定IP对应外网一个固定IP。比如内网服务器192.168.1.100想让它以外网地址200.1.2.10的身份被外部访问就配一条静态映射。这个映射是永久存在的所以内网可以主动访问外网外网也可以主动访问内网双向都能通。动态NAT是有一组公网地址池内网主机发起访问时路由器从池里挑一个空闲地址做转换。这里面还有一个关键分支只转IP不转端口no-pat还是一起转端口pat也就是NAPT。如果只转IP就还是接近一对一的关系如果做端口转换那一个公网地址可以同时给多台内网主机用。Easy IP可以理解成NAPT的偷懒实现它不配地址池直接把出接口自己的公网IP作为转换后的源地址然后用端口号区分不同内网连接。适合只有一个公网IP的小出口比如宽带拨号、小型办公室。我把三种方式的对比整理成了一张表直接看差别对比项静态NAT动态NATno-patEasy IP公网地址来源手工指定的固定地址地址池动态分配出接口IP本身是否做端口转换否否no-pat/ 是pat是外部主动访问内网可以不行不行典型场景服务器对外发布需要独立公网身份的业务终端普通员工上网1.2 为什么综合实验里三种都要配有人会问既然Easy IP一个公网IP就能让全网出去那还要静态NAT和动态NAT干嘛真实企业网络里这三种策略往往是同时存在的。财务系统、官网、邮件服务器需要被外部稳定访问用静态NAT某些供应商对接系统要求从固定公网地址发起请求用动态NAT给它们分配独立公网IP普通员工上网才走Easy IP。一张出口路由器上针对不同的流量走不同的NAT策略这才是综合实验的价值。搞清楚这个背景配置命令就不再是死记硬背了而是这个流量该走哪种映射模型的决策过程。2. 拓扑搭建与地址规划先定好规则再动手2.1 设备选型与链路连接eNSP里模拟器设备我用的是最常搭配的组合两台AR2220路由器、一台S5700交换机、三台PC、一台服务器。其实一台路由器也能模拟但为了让外网侧有真实的回包路径我习惯再加一台R2当运营商侧设备。拓扑连接关系如下R1的GE0/0/0接S5700跑内网段R1的GE0/0/1接R2的GE0/0/0这是两个运营商互连段R2的GE0/0/1接一台公网服务器模拟外部网络资源PC1、PC2、内网服务器Server1全部接入S57002.2 地址划分与接口配置地址规划是整个实验最重要的一步我一开始图省事把NAT地址池直接选到了和互连网段同一个网段结果后面排错排了很久。后来老老实实按真实网络的做法把NAT用的公网地址放在独立的网段里互连段另外分一段。具体地址规划如下设备/网段地址用途内网段192.168.1.0/24办公网段R1 GE0/0/0192.168.1.1/24内网网关PC1192.168.1.10/24走Easy IP验证PC2192.168.1.20/24走动态NAT验证Server1192.168.1.100/24走静态NAT验证互连段200.1.1.0/30R1与R2之间R1 GE0/0/1200.1.1.1/30出接口R2 GE0/0/0200.1.1.2/30对端接口NAT公网段200.1.2.0/24分配给NAT转换的地址池和静态地址R2 GE0/0/1200.1.3.1/24连接公网服务器Server2200.1.3.10/24外部服务器R1的接口配置如下system-view sysname R1 interface GigabitEthernet0/0/0 ip address 192.168.1.1 255.255.255.0 quit interface GigabitEthernet0/0/1 ip address 200.1.1.1 255.255.255.252 quitR2的配置对应如下system-view sysname R2 interface GigabitEthernet0/0/0 ip address 200.1.1.2 255.255.255.252 quit interface GigabitEthernet0/0/1 ip address 200.1.3.1 255.255.255.0 quit2.3 基础路由必须先行接口配完先别急着做NAT路由不通后面全是白忙。R1上要写一条默认路由指向运营商侧R2让内网流量能找到出去的路ip route-static 0.0.0.0 0.0.0.0 200.1.1.2R2那边也需要一条回程路由目的是告诉R2如果你看到目的地是200.1.2.0这段公网地址把包转给R1因为这些地址实际上是R1后面内网设备转换出来的ip route-static 200.1.2.0 255.255.255.0 200.1.1.1这里多说一句回程路由。很多人做NAT实验只配置了出去的默认路由忽略了运营商侧到NAT公网地址的回包路径。数据包出去后对方回包如果R2不知道200.1.2.21、200.1.2.10这些地址在哪里就会直接丢弃表现出来就是ping超时但NAT配置看起来全对。这条静态路由就是解决这个问题的关键。配置完基础路由后先用R1 ping 200.1.1.2确认互连通再用PC1 ping 200.1.3.10确认内网可以出公网。这里的内网出口暂时用的是R1接口上200.1.1.1直接做路由转发还没启用NAT所以ping通不代表后面NAT配置一定会通但至少证明路由层面没有病灶。3. 静态NAT配置让内网服务器拥有固定公网身份3.1 在出接口下发静态映射静态NAT配置的核心命令非常短但要注意它配置的位置是在R1的出口接口GE0/0/1上不是系统视图也不是内网接口interface GigabitEthernet0/0/1 nat static global 200.1.2.10 inside 192.168.1.100这条命令的意思是当内网192.168.1.100访问外部时源地址改成200.1.2.10当外部访问200.1.2.10时目的地址改成192.168.1.100。这里有个值得注意的版本差异。在部分eNSP自带的AR路由器版本里nat static命令需要在系统视图下定义再到接口上使能写法是这样的nat static global 200.1.2.10 inside 192.168.1.100 interface GigabitEthernet0/0/1 nat static enable如果你在接口下输入nat static命令报错就改用这种系统视图加接口使能的组合方式。两种本质一样都是建立一个全局静态映射然后在出口方向上启用。3.2 验证双向可达性配置完成后用display nat static查看映射表是否建立display nat static正常会看到这样一行关键信息200.1.2.10 192.168.1.100 --- --- ...接下来做两个方向的验证第一从内网服务器Server1发起访问在Server1的命令行里ping外网服务器200.1.3.10。通了之后到R1上执行display nat session all能看到源地址从192.168.1.100变成了200.1.2.10目的地址是200.1.3.10。第二从外网主动访问内网服务器。在R2上用ping 200.1.2.10测试。因为R2上有到200.1.2.0/24网段的回程路由数据包会交给R1R1再根据静态NAT表转给192.168.1.100。这个方向能不能通是静态NAT区别于另外两种NAT的标志。为了证明静态映射双向可达我在R2上打开扩展ping指定源接口后持续ping 200.1.2.10然后回到R1上查看会话表。注意如果回包路径上的路由不完整这里会表现为能发出请求但等不到应答排错时优先检查R2上面的回程静态路由到底生效没有。4. 动态NAT配置地址池模式的完整链路4.1 ACL与地址组的配合动态NAT的配置比静态NAT多两步先用ACL定义哪些内网地址允许被转换再定义一个公网地址池。下面是R1上的完整配置acl number 2000 rule 5 permit source 192.168.1.0 0.0.0.255 quit nat address-group 1 200.1.2.21 200.1.2.30 interface GigabitEthernet0/0/1 nat outbound 2000 address-group 1 no-patACL 2000的作用是匹配内网流量允许192.168.1.0/24网段的所有主机做NAT。注意这里用的是反掩码0.0.0.255不是子网掩码255.255.255.0很多人刚学的时候会把这两个搞混。如果写成0.0.0.0那ACL只能匹配192.168.1.0这一台主机其他PC全部无法转换。address-group定义了公网地址池200.1.2.21到200.1.2.30一共10个地址。最后在接口上的nat outbound后面跟了no-pat参数表示只做地址转换不转端口。如果你希望同时启用端口转换把no-pat去掉就行这种模式下就叫NAPT。4.2 地址池分配过程与验证配置完成后先用display nat address-group确认地址池状态再用display nat outbound确认出接口策略display nat address-group display nat outbound实测时我从PC1192.168.1.10发起ping到外网服务器200.1.3.10然后在R1上查看NAT会话表display nat session all关键信息是转换关系那一行能看到源地址字段变成了200.1.2.21对应PC1的192.168.1.10。再让PC2192.168.1.20也同时跑起来你会发现PC2使用的是另一个地址比如200.1.2.22。因为no-pat模式不做端口转换每台内网主机都要独占一个公网池地址。这里有一个非常有价值的验证思路把地址池故意缩成只有一个地址比如改成nat address-group 1 200.1.2.21 200.1.2.21然后让PC1和PC2同时访问外网你会发现只有一台能通另一台ping不通。原因很简单池里没有空闲公网地址了。这个现象在真实网络中就是公网地址不足导致的网络故障。4.3 从no-pat改成pat的对比实验顺便做一次性价比很高的对比实验把接口上的策略改成不带no-patinterface GigabitEthernet0/0/1 undo nat outbound 2000 address-group 1 no-pat nat outbound 2000 address-group 1同样的流量重新发起再观察会话表PC1和PC2就会共享同一个公网地址200.1.2.21但源端口不同。这就是NAPT对公网地址使用率的大幅提升。很多人在动态NAT这里搞不明白no-pat和pat的区别做了这个对比实验基本就通了。5. Easy IP配置单公网IP也能让全网访问外网5.1 复用出接口地址实现端口级转换Easy IP是配置最简单的一种NAT方式不需要创建地址池只需要一条nat outbound加ACL就行。我把动态NAT那行undo掉之后配置如下interface GigabitEthernet0/0/1 undo nat outbound 2000 address-group 1 nat outbound 2000这条命令的意思是出接口上凡是匹配ACL 2000的内网流量转换后源地址统一使用接口自身IP 200.1.1.1同时启用端口转换。关键点在这里Easy IP为什么能用同一个公网IP服务很多台内部PC因为它把传输层端口号也拿来用了。举个例子PC1的192.168.1.10访问外网的TCP 80端口路由器把它转换成200.1.1.1加某个随机源端口比如20000同时PC2的192.168.1.20也访问外网的TCP 80端口路由器把它转换成200.1.1.1加另一个随机源端口比如20001。对端服务器看到的是同一个公网IP加不同端口回包时路由器再根据端口号反查回对应的内网主机。5.2 Easy IP的验证要点验证时我去掉ACL 2000禁止了192.168.1.20之后只剩PC1能转换PC2则无法访问外网。这里ACL不仅筛选内网网段还决定了哪类流量能享受Easy IP的出口通道。然后把PC1的流量跑起来在R1上执行display nat session all看到转换后的源地址是200.1.1.1端口是一个随机值。再让PC2也访问还是同一个200.1.1.1但端口变了。这就是Easy IP和动态NAT no-pat在实际观察上最直观的区别。用R2上ping PC1转换后的地址是行不通的因为Easy IP的映射完全由内网主动发起。外部只知道200.1.1.1这个接口IP没有对应的静态映射根本找不到内网哪台主机。这也解释了为什么企业里服务器发布必须用静态NAT或者nat server而不能图简单用Easy IP。6. 三种NAT在同一出口共存流量走向与命中顺序6.1 共存配置的ACL设计综合实验的进阶玩法是让三种NAT同时生效。现实企业里不会把服务器、特殊终端、普通PC混在同一条策略里而是要划分不同流量分别走不同NAT。我把拓扑中三台设备的角色定为Server1192.168.1.100走静态NAT映射到200.1.2.10PC1192.168.1.10走动态NAT使用no-pat地址池200.1.2.21到200.1.2.30PC2192.168.1.20走Easy IP复用出接口地址200.1.1.1配置前需要删掉之前那条通配整个网段的ACL 2000避免和新的策略冲突。新ACL设计如下acl number 2001 rule 5 permit source 192.168.1.10 0 quit acl number 2002 rule 5 permit source 192.168.1.20 0 quit接口上的NAT策略interface GigabitEthernet0/0/1 nat static global 200.1.2.10 inside 192.168.1.100 nat outbound 2001 address-group 1 no-pat nat outbound 20026.2 报文命中NAT策略的顺序配置完整后我做了个很有说服力的验证三台设备同时发起到外部服务器200.1.3.10的访问然后在R1上查看完整会话表。你会同时看到三种转换记录192.168.1.100对应200.1.2.10固定不变192.168.1.10对应200.1.2.21独占一个公网池地址192.168.1.20对应200.1.1.1加随机端口这说明NAT查找顺序是有逻辑的报文走到出接口时路由器先查静态NAT表命中就直接转换没命中再依次匹配nat outbound下的策略。为了保证匹配不混乱ACL的匹配范围一定要避免重叠。如果一不小心让两条ACL都包含了同一台主机那么取决于ACL规则ID的先后顺序流量会固定走先命中的那条策略另一条对这台主机就变成了摆设。6.3 调试时的观察技巧多策略共存的情况下display nat session all的输出会比较长建议配合过滤条件查看。eNSP里常用的方式是把输出重定向到display nat session all verbose再根据协议类型和源地址信息筛查。也可以直接用display nat session protocol icmp只看ICMP会话这样一条一条核对转换关系会清晰很多。在新版eNSP里display nat session all的会话信息是双向的你会看到每条流都有两个方向的转换记录Batch和Detail字段也不用过分纠结重点看转换前后的IP和端口是否和预期一致。7. eNSP实测排错最容易踩的五个坑7.1 坑一NAT策略配在了错误接口上这是我见过最多的问题。NAT outbound和nat static必须配置在流量离开路由器、进入公网的那个接口上也就是拓扑里的GE0/0/1。有人图省事配在了内网接口GE0/0/0上结果内网PC访问外网时路由器根本不执行NAT操作因为报文出接口上没有找到对应策略。验证方法很简单在R1上display nat outbound确认策略挂在GE0/0/1而不是GE0/0/0。7.2 坑二回程路由缺失导致出得去回不来症状很典型内网PC能ping通目标公网服务器但丢包率居高不下或者完全不通。一查NAT转换表会话确实建立了但数据包就是没有应答。问题几乎都出在运营商侧路由器上。R2默认不知道200.1.2.0/24这个NAT公网段在哪里必须在R2上配置回程静态路由ip route-static 200.1.2.0 255.255.255.0 200.1.1.1没有这条路由外部回包到达R2后会认为200.1.2.21不可达直接丢弃。排查时可以在R2上执行display ip routing-table 200.1.2.21如果看到只有直连路由或者路由缺失基本就实锤了。7.3 坑三NAT公网地址段与互连段混用导致的ARP问题这个是综合实验里非常隐蔽的一个坑。如果把NAT地址池直接规划在和互连段相同的网段比如都放在200.1.1.0/24里那R2收到去往200.1.1.21的数据包时根据直连路由直接发ARP请求询问谁有这个地址。但200.1.1.21根本不在R1接口上R1不会回应这时候即使路由表全对也ping不通。所以我建议一开始就把NAT公网段和互连段分开规划。真实运营商环境中NAT公网地址往往是运营商分配的另一段通过路由方式指过来这和实验里用回程静态路由模拟的原理完全一致。7.4 坑四ACL匹配范围写错导致部分终端无法上网ACL 2000里rule 5 permit source 192.168.1.0 0.0.0.255和rule 5 permit source 192.168.1.10 0是两回事。后者只匹配一台主机后面所有主机都不在转换范围内。另外还要注意ACL规则的默认deny规则如果ACL里只有permit了一台主机其他主机默认是被拒绝转换的。建议在配置完成后先用display acl 2000确认规则内容再用PC逐个测试。如果PC ping不通外网但网关正常多半就是ACL匹配范围出了问题。7.5 坑五修改策略后旧会话影响验证结果NAT会话表是有老化时间的。你在实验过程中改了配置但旧的NAT会话可能还留在表里导致新配置好像没生效或者验证结果看起来不一致。修改NAT策略后稳妥的做法是主动清空会话表reset nat session all这个操作会中断所有正在进行中的NAT连接实验环境没问题生产环境要谨慎。清掉之后再发起新流量看到的转换结果就是最新配置下的结果。还有一个隐藏的经验ping测试时eNSP默认连续发送多个ICMP请求这些请求会被分到同一个会话里。如果想看多条不同的NAT记录建议从不同PC同时发起测试或者把ping包数量调低用 ping -c 1避免干扰观察。做完这个三项NAT的综合实验我最大的感受是NAT配置本身不复杂难的是把三种映射模型放在同一张拓扑里理清它们的协作关系。你可以在eNSP里反复切换动态NAT的no-pat和pat观察会话表的变化。看得多了以后再碰企业网络的NAT需求你第一反应就不会是背命令而是先想这个流量适合哪种映射模型再决定怎么配。
阅读完成 · 觉得有帮助?