网络地址转换这四个字,很多人第一次接触是在设备配置界面的菜单里,第二次接触就是线上出故障的时候。我带的几个新人里,几乎所有人都能背出“把内网地址换成公网地址”这句话,但真让他们在拓扑图上指出转换发生在哪一跳、会话表里那一行长什么样、为什么回包能自己找回来,十个人里有八个说不清楚。这篇内容就是把我这些年配NAT、查NAT、被NAT坑的经历摊开讲一遍。适合刚接手网络运维的朋友打底子,也适合已经会敲配置、但遇到“单向通”“时通时不通”就发懵的人补思路。全文围绕**网络地址转换(NAT)**的转换逻辑、会话表机制、端口映射实践、配置验证路径和故障排查链路展开,不讲空话,能直接对着拓扑抄。
1. NAT的第一性问题:它到底在补哪块短板
1.1 一个地址冲突现场,把NAT的必要性讲透
前几年接手过一个办公区的网络整改,现场情况很典型:主链路上有一台出口设备,下面挂了三个部门各自的交换网络,每个部门的负责人都在自己的小圈子里按习惯编地址,结果三个网段全是 192.168.1.0/24。刚开始大家相安无事,因为彼此不互通,后来业务要打通,一接上就炸——同一时刻网络里存在三份完全相同的源地址,任何一台主机发出的请求,回包该往哪份 192.168.1.x 送,谁也说不准。当时最直接的想法是重新规划地址,但涉及到几十台服务器和打印设备的静态配置,改动窗口排到了两周后。
那两周我们用的临时方案,就是在三个部门各加一台转换设备,把各自的 192.168.1.0/24 统一翻译成一段唯一的 10.x 地址再往上走。这一手本质上就是网络地址转换最原始的动机:当私有地址空间在多个位置被重复使用,或者内部编址与外部要求不一致时,在边界上做一次地址的“翻译”,让两侧各自以为自己看到的世界是连续的。
这件事让我对NAT的定位有了比较清楚的认识。它不是一种“高级功能”,而是编址自由与路由可达之间的一道折中。内部想怎么编就怎么编,方便扩容、方便迁移、方便按业务划分;外部只认一套全局可达的地址。转换设备站在中间,负责把两套编址体系缝合起来。理解了这层,后面所有的配置动作都能找到落点——你干的每一件事,无非是在告诉设备:哪种流量,从哪个口进来,要翻译成什么样,再从哪里出去。
1.2 转换动作拆开看,就是改两个字段
很多人被NAT搞晕,是因为把它想成了一个整体的“开关”。实际上把报文头摊开看,转换设备干的事极其朴素:改源地址或者改目的地址,改完顺手把校验和重算一遍。就这么两件事。
- 改源地址:内部主机发出去的包,源IP是私有地址,出公网前替换成公网地址。这叫SNAT(源地址转换),出口上网用的基本都是它。
- 改目的地址:外部访问某个公网地址的请求进来,设备把目的IP替换成内部真实服务器的地址。这叫DNAT(目的地址转换),端口映射就是它的一种具体形态。
真正让事情变复杂的,不是“改地址”这个动作本身,而是改完之后怎么把回程的包认回来。因为一旦你改了源地址,内部主机就再也认不出那个回包是给自己的了;一旦你改了目的地址,回包的源就变成了内部服务器,外部客户端同样一脸茫然。所以设备必须记住“我改过什么”,这份记录就是会话表。所有的端口复用、老化时间、并发上限、故障现象,都是从这张表衍生出来的。
我在给新人讲这块的时候常用一个类比:转换设备像一栋写字楼的前台。楼里每个人有自己的工位号(私有地址),对外只公布一个总机号码(公网地址)。外面打总机找某个人,前台得记下“分机8023对应工位A区12号”,等人接完电话再把这条记录划掉。总机号码只有一个,但同时可能几十个人在用,靠的是不同的分机号来区分——这正是端口在NAT里扮演的角色。
1.3 四类NAT的差别不在名字,在转换表的写法
教材上通常会列四种类型,实际工程里我更愿意按“转换表的写法”来区分,这样一眼就能看出它适不适合当前场景。
| 类型 | 转换依据 | 地址关系 | 典型用途 | 明显短板 |
|---|---|---|---|---|
| 静态NAT | 一对一固定绑定 | 一个私有地址永久对应一个公网地址 | 内部服务器需要固定对外呈现 | 消耗公网地址,几台服务器就要几个地址 |
| 动态NAT | 地址池按需分配 | 从池中临时取一个,用完归还 | 少量用户偶尔访问外部 | 池子空了就断,且无法主动对外提供服务 |
| NAPT(端口复用) | 地址+端口组合映射 | 多个私有地址共用一个公网地址 | 绝大多数上网场景 | 会话表压力大,某些带地址信息的应用层协议会翻车 |
| 目的地址转换 | 按目的地址和端口匹配 | 公网地址端口映射到内网主机端口 | 对外发布服务 | 配置粒度粗容易暴露多余端口 |
这四类里,第三类是日常接触最多的,也是坑最集中的。它带来一个副作用:外部看到的所有流量都来自同一个地址,这让基于源IP做的限速、审计、黑白名单全部失效。我遇到过一次很典型的连带问题,某业务方在外部合作方那边做了IP白名单,结果整个办公区出去都是一个地址,一个人触发风控,全楼被拦。后来只能单独给这个业务划一个额外的公网地址做静态映射,把流量从大池子里摘出来。这类需求在规划阶段就该问清楚,等到出事再改,窗口和协调成本都很高。
还有一点值得提醒:静态NAT和目的地址转换在配置上经常被混为一谈,但语义完全不同。前者是“内部主动出去时用哪个地址”,后者是“外部进来时送到哪台机器”。有些设备把两者写在同一个策略里,靠方向字段区分;有些则分成两个独立配置段。上手一台陌生设备时,第一件事就是搞清楚它的策略匹配方向和优先级,否则很容易出现“配了但不生效,也没报错”的情况。
2. 会话表是怎么建起来又怎么老化的
2.1 出方向:一次首包触发的转换决策
内部主机发出第一个包的时候,转换设备上发生的事情有固定顺序。以最常见的内网访问外部为例:包从内网口进来,设备先看目的地址是不是需要做目的转换,通常不是;然后看源地址所在的网段有没有匹配上某条源转换策略,匹配上了,就去地址池里取一个可用的公网地址和端口,把源地址端口替换掉,重算校验和,从外网口发出去。与此同时,在会话表里写下一行记录,大致包含这么几个关键字段:
- 转换前的源地址与源端口(内网视角)
- 转换后的源地址与源端口(外部视角)
- 目的地址与目的端口
- 协议号
- 会话状态与剩余老化时间
这一行就是整个NAT能跑通的根基。我一直建议运维同学在排查任何NAT问题前,先想办法把这张表打出来看一眼。很多看起来玄乎的“时通时不通”,表里一眼就能看出问题:要么根本没有表项,说明策略没匹配上;要么表项存在但状态不对,说明回程没收到;要么同一内网地址对应的外部端口在疯狂增长,说明连接没正常关闭。
这里有个容易被忽略的细节:端口分配是有优先级的。多数设备会优先复用同一内网主机上次用过的外部端口,这样做的好处是某些依赖源端口一致性的应用能正常工作,也便于日志对照。但一旦这个端口已经被别的会话占用,就只能另取一个。所以在高并发场景下,同一台内网主机对外的源端口是不固定的,如果你的外部合作方要求源端口固定,那必须走静态的一对一映射,靠端口池是保证不了的。
2.2 回方向:五元组反查与逆向转换
外部回包到达时,设备拿到的信息是:源是外部服务器地址端口,目的是那个公网地址端口,协议已知。它拿这五项去会话表里做反查,找到匹配项之后,把目的地址端口还原成内网主机的地址端口,再从内网口送出去。整个过程对两端主机完全透明,它们都以为自己是在和一个同网段的伙伴通信。
反查能成立的前提是五元组唯一。这就解释了为什么端口复用必须依赖端口号:如果只靠IP,多个内网主机共用一个公网地址时根本无法区分。也解释了为什么某些协议会出问题——如果应用层载荷里还嵌了一份IP地址或端口,设备只改了报文头,载荷里那份没改,对端按载荷里的地址回连,自然连不上。这是后面要专门讲的坑。
还有一个经常被问到的点:如果会话表里没有匹配项,回包会怎么处理?答案取决于设备的策略。默认情况下绝大多数设备会选择丢弃,因为一个来路不明的包没有对应的转换记录,转发出去也没意义。少数场景下会配置成放行,但我不建议这么干,那等于把转换设备当成普通路由器用,安全边界就没了。查故障时如果发现“外网口抓包能看到回包,内网口抓不到”,八成就是会话表里那条记录已经老化掉了,包被当成无主流量丢掉了。
2.3 端口复用、冲突与耗尽
端口复用的容量上限,是很多人规划时估不准的地方。理论上一台设备能提供的最大并发,等于可用公网地址数乘以每个地址可用的端口数。实际可用的端口远小于理论值,因为要避开系统保留端口,还要考虑某些端口被固定用途占用。经验上,单个公网地址能撑住的并发会话数,取决于设备的内存和会话表实现,不同档次差别很大,不能拿理论值去套。
我给一个粗略的估算方法:先统计内网高峰时段的活跃终端数,乘以每个终端平均并发的连接数(浏览器开十几个标签页就能轻松贡献几十条),再乘以一个1.5到2的安全系数,得到的就是需要的会话容量。如果这个数字逼近设备标称值的一半以上,就该考虑加地址或者换设备了,别等到跑满再处理,那时候的现象是随机丢包、随机断连,排查成本极高。
端口耗尽的表现很有特征:新连接建立失败,已有连接不受影响。用户感受就是“网页打不开但微信还能发消息”“刷新几次偶尔能进”。这时候去看会话表,会看到大量处于等待关闭状态的表项堆积,往往是某些客户端异常退出没有正常挥手,或者内部有程序在高频短连接。治标的办法是缩短老化时间,治本是找到那个异常程序。我遇到过一次是某台机器上的监控探针每秒发几十个短连接,把出口的会话表撑得满满当当,定位花了半天,因为从流量上看它并不大。
2.4 老化时间:设短设长都出事
老化时间这个参数看着不起眼,实际影响面很大。设得太短,长连接会被中途掐断,表现是传输大文件传到一半失败、数据库连接莫名重连、远程会话掉线。设得太长,异常断开的连接会长期占着表项,慢慢把容量吃光。
比较稳妥的做法是按协议分开设:TCP的已建立状态可以设长一些,比如按业务最长空闲时间再加余量;TCP的半开状态要短,因为对端可能已经没了;UDP没有连接概念,只能靠空闲计时,一般设得比TCP短。有些设备支持对特定端口单独设老化时间,那就把数据库、长连接推送这类业务单独拎出来配。
还有一个隐蔽的坑:双向流量的老化是分别计时的。某些应用只在有数据时才发心跳,如果心跳间隔大于老化时间,连接就会被判定为空闲而回收,等下一次数据来了,会话表里已经没有对应项,只能重建。表现出来就是“每隔固定时间断一次”,周期和老化时间吻合。看到这种规律性故障,第一反应就该去查老化配置。
3. 内网服务对外发布:端口映射的实践细节
3.1 一对一与一对多的映射取舍
要把内网的一台服务器发布到外部,有两条路。一条是给这台服务器单独配一个公网地址,做一对一映射,所有端口全通;另一条是共用一个公网地址,只映射需要的端口。前者简单省事,但等于把这台机器完全暴露在外部,安全上没有任何缓冲;后者配置稍繁琐,但能精确控制对外开放的面。
我的习惯是默认走端口映射,只把确有必要的一两个端口放出去,其余一律不通。这个习惯来自一次教训:早期给一台测试机做了一对一映射,想着反正只是临时用两天,结果那台机器的远程管理端口用的是默认口令,第三天就被扫到并尝试登录,日志里密密麻麻全是失败记录。从那以后,凡是走一对一映射的,我都会同步确认两件事:机器本身的口令强度,以及设备上有没有做源地址限制。
端口映射的配置要素其实就四条:外部地址、外部端口、内部地址、内部端口。但实际写的时候要注意端口能不能复用——同一个外部地址的同一个端口,只能映射到一台内网主机,这是硬约束。如果两个业务都想用80端口对外,那就必须要么加公网地址,要么让其中一个改用非标端口。有些设备支持按源地址区分,同一个外部端口对不同来源映射到不同内网主机,这种做法在特定场景下有用,但可读性差,交接时容易出问题,我不太推荐。
3.2 内网用户访问自己公网地址的回流问题
这是端口映射里最容易踩、也最容易被认为“设备有毛病”的一个坑。现象是:外网用户访问映射后的公网地址一切正常,内网用户拿同样的地址去访问,打不开。
原因不复杂。内网用户发出的请求,目的地址是公网地址,按正常路由它会被送到转换设备;设备收到后做了目的地址转换,把包送到内网服务器;服务器看到源地址是同网段的内网地址,就直接按内网路由回包,回包的源是自己的内网地址,而不是那个公网地址。客户端一看,我请求的是公网地址,回的却是内网地址,连接对不上,直接丢弃。
解决办法有两个方向。一是在设备上做回流处理,让内网访问公网地址的流量也走一遍源地址转换,把源改成设备的内网口地址,这样服务器回包就会回到设备,再由设备转回去。二是更省事的做法——在内网DNS上做一条记录,让内网用户解析到服务器的内网地址,压根不走公网绕一圈。后者性能更好,但要注意内外网地址不一致带来的配置维护问题,尤其是证书、回调地址这类写死了域名的场景。
提示:排查回流问题时,先在内网客户端上确认它解析到的到底是哪个地址。很多所谓“映射不生效”的案例,最后发现是DNS解析走了外部,根本没经过设备。
3.3 映射是缩小攻击面还是扩大,取决于你怎么配
端口映射本质上是在防火墙上开洞。开得好,只放通必要业务;开得随意,等于把内网的一角直接挂到了公网上。我见过最夸张的一份配置,外部地址上映射了二十多个端口,从 web 到数据库到远程管理一应俱全,问起来说是“先都开着,以后再收”。这种“以后再收”通常永远不会发生。
我的做法是建立一张映射台账,至少包含这几列:外部地址端口、内部地址端口、业务归属人、开通时间、最近一次确认时间。每隔一段时间过一遍,把已经下线的业务对应的映射删掉。这件事听起来很枯燥,但它能挡掉大部分因为“历史遗留”造成的暴露面。另外,能在映射前面加一层访问控制的,一定加上,哪怕只是限制来源网段。多一层限制,被扫到的概率就低一截。
4. 从配置到验证的完整落地路径
4.1 动手前先把地址和流向画清楚
我见过太多配置出错,根子不在命令敲错,而在于动手前没想清楚。所以在任何设备上配NAT之前,我要求先在纸上或者文档里写清楚四件事:
- 内网有哪些网段,各自的用途是什么,哪些需要出去,哪些不需要。
- 出口有几个公网地址,分别打算怎么用,是做共用还是做映射。
- 哪些内部服务需要对外发布,用哪个端口,来源有没有限制。
- 转换设备的接口地址和路由怎么走,尤其是回程路由。
第四点最容易被跳过。转换设备要能把包送回内网,靠的是路由表里有对应网段;要能把包送出去,靠的是默认路由指向上游。这两条缺一条,NAT配得再对也不通。我曾经在一个双出口环境里折腾了很久,最后发现是回程路由指向了另一个出口,包从A口出去却想从B口回来,天然不通。
4.2 一份可复用的配置骨架
下面用通用开源工具的命令行风格给一份骨架,方便对照理解。不同设备的具体命令差异很大,但逻辑是同一套,看懂这个再去看设备手册会快很多。
# 开启转发(转换设备的基本前提) sysctl -w net.ipv4.ip_forward=1 # 源地址转换:内网网段从外网口出去时,替换成外网口地址 iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -o eth1 -j MASQUERADE # 如果用的是固定公网地址池,则指定地址 iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -o eth1 -j SNAT --to-source 203.0.113.10 # 目的地址转换:把外部访问 203.0.113.10:8080 的请求送到内网 10.20.0.30:80 iptables -t nat -A PREROUTING -d 203.0.113.10 -p tcp --dport 8080 \ -j DNAT --to-destination 10.20.0.30:80 # 配套放行(否则包会被过滤链拦掉) iptables -A FORWARD -d 10.20.0.30 -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -s 10.20.0.0/24 -o eth1 -j ACCEPT这段骨架里有几点值得展开说。第一,源转换写在外出方向上,目的转换写在进入方向上,位置搞反了就不生效,而且是静默不生效,不会有任何报错。第二,绝大多数“映射配了但不通”的情况,不是转换没做,而是过滤链把包拦了,转换发生在过滤之前,转换成功不代表能通过。第三,如果出口有多个地址,源转换建议明确指定用哪个,不要依赖自动选择,否则在某些路由不对称的环境下会出现源地址和回程路径不匹配的问题。
4.3 验证三板斧:查表、抓包、对照
配置敲完只是开始,验证才是关键。我通常按三个步骤走,顺序不能乱。
第一步,看会话表。从内网发一个请求出去,立刻在设备上查会话表,看有没有生成对应的表项。有表项,说明策略匹配上了,转换动作执行了;没表项,说明流量压根没匹配到策略,问题在匹配条件上,跟转换逻辑无关。这一步能砍掉一半的排查路径。
第二步,在内外两个接口同时抓包。内网口抓到的是转换前的报文,外网口抓到的是转换后的报文,两个对照着看,源地址端口是不是按预期变了,校验和是不是正常,TTL有没有异常。抓包的价值在于它是唯一能让你看到“事实”的手段,会话表告诉你设备认为发生了什么,抓包告诉你线上真正跑的是什么,两者不一致的时候,往往就是问题所在。
第三步,从两端分别发起验证。只从内网往外测是不够的,还要从外部真实环境往里测;只测TCP连通是不够的,如果业务跑UDP,那必须单独测UDP。我遇到过只测了端口通不通、没测应用层协议的情况,端口是通的,但应用层因为载荷里带了地址信息而失败,白高兴一场。
4.4 变更窗口里的回退设计
NAT配置的变更风险比想象中高,因为它一旦出错,影响的往往不是一台机器而是整个出口。所以我坚持两条规矩:一是变更前把当前配置完整导出备份,别只记自己改了哪几行;二是变更必须安排可回退的窗口,并且提前想好回退命令是什么。
回退设计里有个细节值得说:如果改的是会话表相关参数(比如老化时间、容量上限),改完之后已有的会话不受影响,新的参数只对新会话生效。这意味着你改完立刻测试,可能测不出效果,得等旧会话老化了才能验证。这种情况我会在变更记录里注明“验证时间点”,避免自己或者同事第二天误判。
5. 高频故障的排查链路实录
5.1 出得去回不来:从抓包位置判断丢在哪一跳
“单向通”是NAT环境里出现频率最高的描述。用户说“能上不能下”“发得出去收不回来”,实际可能是好几个完全不同的原因,必须靠抓包位置来切分。
排查链路我一般这么走:先在内网主机上确认它发出的包源地址是否正确,如果主机本身配错了网关,包根本到不了设备。再在设备内网口抓,看包是否到达、是否被策略匹配。然后在外网口抓,看转换是否发生、源地址是否按预期替换。接着在外部服务器侧看有没有收到请求、有没有回包。最后回到设备外网口抓,看回包是否到达、是否被会话表认领。
这个链路里,每一跳的抓包结果组合起来,基本能唯一确定问题位置。比如外网口有转换后的出包、外部服务器侧没收到,那是中间链路或上游策略的问题,跟NAT无关;外部服务器回了包、外网口抓到了、内网口没有,那就是会话表没认领或者过滤链拦了。照着这个顺序走,比自己瞎猜快得多。
5.2 会话表耗尽引发的间歇性断网
这个故障的迷惑性在于它是“间歇性”的,而且往往在业务高峰出现,一过高峰自己就好了,导致很多人怀疑是运营商线路问题。识别特征我总结了几条:故障期间新建连接失败率高,但已有连接表现正常;设备CPU和内存不一定高,但会话表计数贴近上限;重启设备或者清空会话表后立刻恢复。
定位到之后,处理分两层。短期先扩容量或者调老化参数把水放掉,保证业务连续;长期一定要找到源头。源头的常见形态有三种:内部有程序在做高频短连接且没有连接复用;设备侧的老化时间设置得过长导致僵尸会话堆积;某个网段被扫描或者有异常流量。前两种靠调参数和改程序解决,第三种要看流量特征,必要时在边界上做限速。
5.3 带地址信息的应用层协议为什么容易翻车
有些协议在应用层载荷里会携带IP地址和端口,最典型的是文件传输类协议在主动模式下,服务端会告诉客户端“你连我这个地址和端口”。问题在于,服务端告诉客户端的是它自己视角的地址,如果中间隔了转换设备,这个地址在客户端那边根本不可达。表现出来就是控制连接正常建立、登录也成功,一到传输数据就卡住。
解决方向有三个:一是让设备具备应用层识别能力,能深入载荷把地址改掉,这依赖设备功能和协议支持程度,不是万能;二是改用被动模式,让客户端主动发起数据连接,绕开服务端告知地址的环节;三是在架构上把这类服务放到不经过转换的位置。我个人偏好第二种,改动小、依赖少,虽然需要客户端配合,但比起在设备上开各种深度检测要稳妥得多。同类问题在语音、视频类协议里也存在,思路是一样的:先确认载荷里有没有地址,再决定从哪一侧绕开。
5.4 MTU、分片与NAT叠加出的怪现象
有一类故障特别气人:小包通、大包不通;ping 通、传文件断;网页能打开、上传附件失败。这大概率是MTU和分片的问题,而NAT会让它更隐蔽。
原因是转换设备在改地址的时候需要重算校验和,某些实现下会影响到分片报文的处理。如果链路上某一跳的MTU比预期小,大包需要分片,而分片后的后续片段里没有完整的三层头信息(只有第一个片段带端口),转换设备无法正确匹配会话,就会把这些片段丢掉。表现出来就是握手成功、小数据成功、大数据中断。
处理办法是先把链路的MTU摸清楚,然后在关键节点上调整MSS或者做分片处理。具体调多少要看链路实际情况,一上来就调成很小的值虽然能通,但会严重拖累性能,属于治了病伤了身。我的做法是先在两台主机之间用不分片的探测包逐步加大长度,找到实际可通过的临界值,再留一点余量来配。
6. NAT在云、容器和IPv6环境下变成了什么样子
6.1 云上NAT网关与本地设备的差异
云环境里的网络地址转换,能力边界和本地设备很不一样。最明显的一点是配置入口变成了控制台和接口,你看不到会话表,也没法在接口上抓包。排查手段受限,就得换个思路:依靠流日志、连接计数这类可观测数据,配合安全组和网络ACL的配置来推断。
另一个差异是云上的地址转换通常和弹性地址绑定在一起,地址可以随时挂载和摘除。这带来了便利,也带来了新问题——地址变更后,依赖固定地址的外部白名单、证书绑定、回调配置全部要同步更新。我见过因为没更新白名单导致业务中断一整天的情况,事后复盘发现变更单上压根没提这一项。所以凡是涉及出口地址变更的操作,我都会拉一张“依赖清单”,逐个确认。
6.2 容器网络里的SNAT/DNAT
容器环境里,这两种转换几乎是默认存在的。容器访问外部时,源地址会被替换成宿主机或者节点的地址,这是源转换;外部访问容器内的服务时,通过端口发布把节点的端口映射到容器端口,这是目的转换。很多人在容器里跑服务,发现服务自己获取到的客户端地址全是节点地址,做不了按来源限流,就是源转换造成的。
理解这一点之后,很多“容器网络奇怪现象”就有解释了:容器里看到的连接数、对端地址、端口,都是转换之后的视角,与真实客户端视角不同。如果需要拿到真实来源,要么在入口处做透传(比如在四层代理上保留来源信息),要么调整架构让流量不经过源转换。这块没有银弹,只能在设计阶段就考虑清楚。
6.3 有了IPv6,NAT为什么还在
经常有人问,地址不够用的问题不是靠新一代地址空间解决了吗,转换是不是该退场了。理论上是的,但实际情况要复杂得多。
一方面,大量既有系统和设备仍在用旧协议,迁移是渐进过程,两套体系长期共存,转换就成了衔接层。另一方面,很多组织用转换不仅仅是为了省地址,更是为了隐藏内部结构和统一出口管控。即便地址充足,仍然会希望内部拓扑不对外暴露,仍然会希望所有出向流量经过一个点做审计和策略。这种需求不会因为地址变多而消失。
我个人的判断是,转换技术会长期存在,只是形态会变——从“省地址的手段”更多转向“边界管控的手段”。对做运维的人来说,这意味着这项技能不是过渡性的,该深入还是得深入。
最后分享一个我自己的习惯:每次配完NAT,我都会在文档里补一段“这个转换是为了解决什么问题、如果不配会怎样、依赖它的业务有哪些”。写了几年下来发现,真正省时间的不是配置本身,而是半年后接手的人(很可能就是我自己)能一眼看懂当初为什么这么配。转换规则这种东西,脱离了上下文就是一堆地址,谁也看不懂。