摘要:NAT,全称是Network Address Translation,中文叫网络地址转换。简单来说,它是一种让多个设备通过一个公共IP地址访问互联网的技术。想象一下,你家里的设备就像一个大家庭的成员,每个人都有自己的小房间(私有IP地址),但对外联系时,全家共
NAT,全称是 Network Address Translation,中文叫 网络地址转换。简单来说,它是一种让多个设备通过一个公共IP地址访问互联网的技术。想象一下,你家里的设备就像一个大家庭的成员,每个人都有自己的小房间(私有IP地址),但对外联系时,全家共用一个电话号码(公共IP地址)。NAT就是那个接线员,负责把内部的呼叫转到外面,再把外面的回复送回给正确的家庭成员。
NAT最常见的地方就是我们的家庭网络或者小型办公室网络。因为这些地方设备多,但公共IP地址少,NAT就像一个“省IP神器”,让大家都能愉快地上网。它的出现,不仅解决了IP地址不够用的问题,还顺便给网络安全加了一道防护墙。是不是很神奇?接下来,我们就来拆解一下它的“魔法”是怎么实现的!✨
要搞懂NAT,得先明白它是怎么干活的。
我们用一个生活化的例子来说明:
假设你家里有两台电脑,电脑A(IP: 192.168.1.100)和电脑B(IP: 192.168.1.101)。你的路由器(也就是NAT设备)有一个公共IP地址,比如 203.0.113.1。现在,电脑A想访问Google的网站(IP: 172.217.168.14,端口: 80),会发生什么呢?
电脑A会生成一个数据包,里面写着:
源IP:192.168.1.100(我的地址)源端口:50000(随便挑一个端口号)目的IP:172.217.168.14(Google的地址)目的端口:80(HTTP服务默认端口)这个数据包送到路由器后,路由器一看:哎呀,192.168.1.100是个私有IP,外面的人不认识,得换个“马甲”!于是,它把源IP改成自己的公共IP 203.0.113.1。但这还不够,如果电脑B也在上网,光靠IP地址没法区分两台电脑,所以路由器还会给这个数据包分配一个新的端口号,比如 60000。于是,出去的数据包变成了:
源IP:203.0.113.1源端口:60000目的IP:172.217.168.14目的端口:80路由器可不是随便改完就完事,它得记下来这个转换关系,不然Google回复的时候,它怎么知道该把数据包送回给谁呢?这就用到了 NAT表。路由器会在NAT表里加一条记录:
原始源IP: 192.168.1.100原始源端口: 50000转换后源IP: 203.0.113.1转换后源端口: 60000目的IP: 172.217.168.14目的端口: 80Google收到数据包后,会回复一个数据包,里面写着:
源IP:172.217.168.14源端口:80目的IP:203.0.113.1目的端口:60000这个数据包回到路由器后,路由器翻开NAT表一看:哦,203.0.113.1:60000对应的是192.168.1.100:50000!于是,它把数据包的目的IP和端口改回去,变成:
目的IP:192.168.1.100目的端口:50000然后把数据包转发给电脑A。整个过程无缝衔接,电脑A完全不知道自己的IP被“偷梁换柱”过!
这就是NAT的基本工作流程。是不是有点像快递员?它不仅帮你把包裹送到外面,还得确保回来的包裹送到正确的房间。接下来,我们就重点聊聊这个“账本”——NAT表。
NAT表是NAT设备的核心,它记录了每一次地址转换的细节。可以说,没有NAT表,NAT就没法正常工作。那么,NAT表里到底有什么?我们来一探究竟!
一个典型的NAT表包含以下几个关键字段:
原始源IP地址(Inside Local)这是你家设备的私有IP地址,比如192.168.1.100。
比喻:就像你家里的房间号,只有家里人知道。
原始源端口(Inside Local Port)这是设备发起连接时用的端口号,比如50000。端口号的作用是区分同一台设备上的不同连接。
转换后的源IP地址(Inside Global)这是路由器对外使用的公共IP地址,比如203.0.113.1。
比喻:就像家里的对外电话号码,外面的人都打这个。
转换后的源端口(Inside Global Port)这是路由器分配的新端口号,比如60000,用来区分不同的内部设备或连接。
目的IP地址(Outside Global)这是你要访问的外部服务器的IP地址,比如172.217.168.14(Google)。
目的端口(Outside Global Port)这是外部服务器的端口号,比如80(网页服务)。
有些高级的NAT表还会记录更多信息,比如协议类型(TCP还是UDP)、连接的时间戳等。
看懂NAT表我们来看一个实际的NAT表条目:
这行记录的意思是:
家里的一台电脑(192.168.1.100:50000)想访问Google的网站(172.217.168.14:80)。路由器把它的IP和端口改成了203.0.113.1:60000,然后发出去。Google回复时,路由器根据NAT表把数据包送回192.168.1.100:50000。如果家里还有其他设备,比如电脑B(192.168.1.101:50001),NAT表可能变成这样:
第二行表示电脑B在访问另一个网站(HTTPS服务,端口443)。你看,虽然两台电脑用的是同一个公共IP(203.0.113.1),但端口号不同(60000和60001),路由器就能分得清谁是谁!
想亲眼看看NAT表长什么样?那得看你用的是什么设备。
大部分家用路由器都有一个管理界面。你可以用电脑或手机登录(通常在浏览器输入192.168.1.1或192.168.0.1),找到 “NAT设置” 或 “端口转发” 页面,就能看到当前的NAT转换。有些路由器还支持命令行,可以通过SSH登录后输入特定命令查看。
如果你用的是专业设备,比如Cisco路由器,可以在命令行输入:
show ip nat translations结果可能会长这样:
Inside Local Inside Global Outside Global Outside Local192.168.1.100:50000 203.0.113.1:60000 172.217.168.14:80 172.217.168.14:80这就是一个典型的NAT表,快去试试吧!
如果你的NAT是在Linux服务器上用iptables实现的,可以输入:
iptables -t nat -L -n -v这会显示NAT规则和当前的状态。不过,这个命令更偏向于显示配置,而不是实时的NAT表。
这是最基础的命令,会列出当前所有的NAT会话。就像一个简易账本,告诉你有哪些设备在通过NAT上网。
或者更详细一点:
加了这个参数后,信息会更详细,比如源IP、目的IP、转换后的IP和端口,甚至协议类型(TCP/UDP)都会显示出来,相当于把账本翻到“明细”页。
示例输出:
[AR1] display nat session Slot: 0 Cpu: 0 Total: 2 Protocol InsideIP:Port OutsideIP:Port VPN-Index TCP 192.168.1.100:50000 203.0.113.1:60000 0 UDP 192.168.1.101:50001 203.0.113.1:60001 0InsideIP:Port:内部设备的IP和端口(私有地址)。OutsideIP:Port:转换后的公共IP和端口。VPN-Index:如果有VPN配置,这里会显示对应的索引。display nat session inside 192.168.1.100这就像在快递单里只查某个人的包裹,方便又精准!✨
display nat session显示当前所有的NAT会话,包含基本的源IP、目的IP和端口信息。
或者更详细:
加上这个参数后,会显示更多细节,比如会话的生命周期、协议类型等,适合深入排查问题。
示例输出:
[H3C] display nat session NAT Session Table: Protocol Local IP:Port Global IP:Port Destination IP:Port TCP 192.168.1.10:12345 202.1.1.1:54321 8.8.8.8:80 UDP 192.168.1.11:5000 202.1.1.1:5001 114.114.114.114:53Local IP:Port:内部设备的IP和端口。Global IP:Port:转换后的公共IP和端口。Destination IP:Port:目标服务器的IP和端口。如果NAT表很长,可以用管道符过滤,比如:
display nat session | include 192.168.1.10直接显示当前的NAT会话信息,包括源地址、目的地址和端口映射关系。
锐捷的输出相对简洁,适合快速查看,但如果需要更详细的信息,可能需要结合日志或调试命令。
示例输出:
[Ruijie] show nat session Protocol Src IP:Port Nat IP:Port Dst IP:Port TCP 192.168.10.2:1024 210.10.1.1:20001 172.16.1.1:80 UDP 192.168.10.3:5000 210.10.1.1:20002 8.8.8.8:53Src IP:Port:源IP和端口(内部设备)。Nat IP:Port:转换后的IP和端口。Dst IP:Port:目标IP和端口。debug nat然后用 show log 查看日志输出。不过要小心,这可能会让设备“忙得像热锅上的蚂蚁”,建议在非高峰期操作!
show security nat source summary显示NAT源地址转换的概要信息,包括规则名称、转换类型和会话数。
或者更具体:
列出所有NAT规则的详细信息,包括具体的IP和端口映射。
示例输出:
root@Juniper> show security nat source summaryTotal pools: 1 Pool name: nat-pool-1 Type: source Address range: 203.0.113.1 - 203.0.113.1 Port range: 1024-65535 Total sessions: 2Total rules: 1 Rule name: nat-rule-1 Type: source Action: pool nat-pool-1 Sessions: 2再看详细的会话:
root@Juniper> show security nat source rule allRule-set: nat-rule-set-1 Rule name: nat-rule-1 Source addresses: 192.168.1.0 - 192.168.1.255 Destination addresses: any Action: pool nat-pool-1 Sessions: 192.168.1.100:50000 -> 203.0.113.1:60000 -> 8.8.8.8:80 (TCP) 192.168.1.101:50001 -> 203.0.113.1:60001 -> 114.114.114.114:53 (UDP)Juniper的NAT表信息很丰富,但输出的条目可能很多。如果只关心某个规则,可以指定规则名:
show security nat source rule nat-rule-1这就像在账簿里只查某个客户的记录,直奔主题!
对于普通用户来说,查看NAT表可能不是日常需求。但如果你是个网络爱好者,或者需要调试网络问题(比如某个游戏连不上服务器),看看NAT表绝对能帮上忙!
NAT并不是“一招鲜吃遍天”,它有几种不同的玩法,每种都有自己的特点:
这是最简单的一种,管理员手动指定一个私有IP对应一个公共IP。比如,你家里有个服务器(192.168.1.10),想让外网访问它,就可以用静态NAT把它映射到203.0.113.2。
这种方式会从一个公共IP地址池中动态分配IP给内部设备。用完之后,IP还能回收再用。
也叫 NAT重载,是我们家里最常用的类型。它让多个设备共享一个公共IP,通过不同的端口号区分。前面例子里的路由器用的就是PAT。
NAT这么厉害,是不是完美无缺呢?当然不是,我们得客观看待它的两面性。
优点节省IP地址一个公共IP能让几十上百台设备上网,简直是IP界的“共享经济”!增加安全性
私有IP藏在NAT后面,外面的黑客想直接攻击都找不到门路。
看完这篇文章,你是不是对NAT有了全新的认识?它就像一个默默付出的幕后英雄,让我们的设备能共享IP地址,畅游网络世界。学会看懂NAT表,不仅能满足你的好奇心,还能在网络出问题时帮你快速定位原因。下次有人问你“什么是NAT”时,你可以拍着胸脯说:“NAT?那可是网络地址转换的魔法啊!想知道怎么看NAT表?我给你讲讲!”
希望这趟NAT之旅让你收获满满。如果还有疑问,随时来找我聊聊网络的那些事儿吧!✌️
来源:wljslmz一点号