NAT英文名Network Address Translation,NAT是指网络地址转换。NAT可以将内网的地址转换为外网地址。(不一定是私网地址和公网地址的使用,下文会举例解释)
NAT原理介绍
NAT分为基本网络地址转换(Basic NAT)和网络地址端口转换(PAT或者NAPT)。
基本网络地址转换(Basic NAT) 仅支持IP地址转换,不支持端口映射。 Basic NAT分为静态NAT和动态NAT,其中静态NAT是将内网中的IP地址与外网地址进行一对一映射的绑定,由网络管理员管理,是永久的表项;动态NAT是指一个内网IP地址随机的绑定到一个外网IP地址,外网IP地址存放在IP地址池中,当IP地址池的合法IP地址都被映射了,内网的终端就无法建立地址映射关系了。
Basic NAT建立的无端口NAT表示例:
内网IP | 外网IP |
---|---|
192.168.1.55 | 219.152.168.222 |
192.168.1.59 | 219.152.168.223 |
192.168.1.155 | 219.152.168.224 |
网络地址端口转换(PAT或者NAPT)除了支持IP地址转换,还支持端口映射。 通常说的NAT指的是PAT,采用的是端口多路复用方式,PAT将多个内部地址映射到少量(甚至一个)外部地址。理论上来说,有三种转换的方式:只转换IP、转换IP+映射端口(只映射端口就不是NAT了)。同时,外网的IP可以是一个或者多个。
PAT建立的无端口NAT表示例:
内网IP | 内网端口 | 外网IP | 外网端口 |
---|---|---|---|
192.168.1.55 | 5566 | 219.152.168.222 | 5566 |
192.168.1.59 | 80 | 219.152.168.222 | 80 |
192.168.1.59 | 4465 | 219.152.168.222 | 4465 |
内网IP | 内网端口 | 外网IP | 外网端口 |
---|---|---|---|
192.168.1.55 | 5566 | 219.152.168.222 | 9200 |
192.168.1.59 | 80 | 219.152.168.222 | 9201 |
192.168.1.59 | 4465 | 219.152.168.222 | 9202 |
NAT不只是私网地址和公网地址的转换
NAT作为网络地址转换,不一定是私网地址和公网地址的使用。例如我们可以像套娃一样,在Internet→光猫→路由器→路由器→中端,可以在每一个路由器开启NAT,此时外网是我们的公网吗?很明显不是这样的。另一个例子,运营商modem→宿舍路由器(路由模式)→笔记本电脑上的VMware虚拟机(NAT模式)→虚拟机,在笔记本电脑上的VMware(NAT模式)也不是私网地址和公网地址的使用呀。但是NAT的提出就是为了解决两个问题,一个是公网Ipv4的地址稀缺,另一个是实现内网的匿名和隐私。所以,很多人还是有一个误区,认为NAT的外网就是公网(全球互联网Internet)。
参考图片:百度百科-nat(网络地址转换)-技术背景https://baike.baidu.com/item/nat/320024
参考图片来源:《网络安全基础》课程PPT
为什么需要端口映射呢?
原因有三点:
- 首先它可以保证网络的匿名和隐私(安全效果);
- 其次端口映射可以让内网中的一个终端使用多个不同的端口号访问多台外网终端(就像我们使用计算机可以同时发邮件、看视频、聊微信,不同的服务用不同的端口进行区分。Basic NAT也有这个功能,相当于找了一个代理。);
- 第三内网中的多个终端使用一个外网IP地址(节约外网的IP地址使用)。
第三点 “节约外网IP” 举个例子,假设有两台内网的终端PC1和PC2,PC1的IP地址分别为192.168.0.1,PC2的IP地址分别为192.168.0.2,假设使用219.152.168.222这一个外网IP地址。当PC1访问外网的某个服务,NAT做了一个映射192.168.0.1→219.152.168.222,但是如果这个外网的服务响应时,从外网访问内网的PC1,它只知道外网地址219.152.168.222,那么NAT怎么区分应该发送给PC1还是PC2呢?所以,为了进行区分,需要增加一个维度——端口(TCP或者UDP端口)。这里的思路其实有点像,我们在区分不同的子网时,需要子网掩码一样,都是通过增加维度来进行区分。本质上都是收集足够多特征,来进行判断。
虚拟机VMware的NAT设置
下图是虚拟机VMware中,对于NAT模式网卡的设置,我们可以在“端口转发”处实现简单的NAT穿透,使得外网的终端可以访问NAT网络中的虚拟机。
由NAT引申的几个问题,FAQ
- NAT服务器所支持的连接,必须是内部主机主动发起的,外网不能直接访问内网,所以需要使用RNAT,或者说NAT穿透。
- NAT表是有租期(老化时间、生存时间或者超时机制)的。这个点例如路由表、arp表、DHCP表等都是有的,因为动态分配为了保障自己的表不会被占满。
- 生成NAT中继表需要消耗性能。每次都会有查表的操作,不可避免的说,NAT表是会产生延迟的。
- FTP等功能需要NAT拓展功能ALG才能正常运行。
- NAT使IPsec更复杂。
文章参考链接
- 维基百科-网络地址转换(需要科学上网,或者使用维基百科的镜像访问)
- 百度百科-nat(网络地址转换)https://baike.baidu.com/item/nat/320024
- 网络地址转换NAT-动态NAT的使用范围和配置 作者:IE-LAB网络实验室 https://www.bilibili.com/read/cv4658226
- 【转载】网络地址转换(NAT)和端口映射 https://blog.csdn.net/weixin_37637399/article/details/85243427
- NAT地址转换详解(静态NAT,端口映射,动态NAT,PAT)https://blog.51cto.com/u_14449524/2443101
- NAT 协议解析https://baijiahao.baidu.com/s?id=1725514466082236919&wfr=spider&for=pc&searchword=nat
- 详解: IPsec 穿越 NAT 之道 https://blog.csdn.net/weixin_38387929/article/details/117586652?utm_source=app&app_version=5.3.1&code=app_1562916241&uLinkId=usr1mkqgl919blen
- 如何理解NAT使IPsec更复杂?https://www.zhihu.com/question/21042949
- NAT 原理以及 UDP 穿透https://paper.seebug.org/1561/
参考资料中,[1]、[2]和[6]主要是为了了解NAT技术。[3]和[8]主要是为了说明NAT表的超时机制和保活机制。[4]和[5]主要是为了说明NAT技术的优点和缺点。[7]主要是说明NAT使Ipsec复杂在实现层面上的详细解析。[9]是新看到的一篇文章,感觉里面内容不错,可以参考一下。