文章目录
简单理解 NAT
写这篇文章仅供自己参考 =W=
1. 简介
- NAT(NetworkAddressTranslation),即网络地址转换。利用网关,将不能访问外部网络的IP地址转换为可访问外部的IP地址,从而实现内部网络到外部网络的访问。
- 分类
- 静态NAT(Static NAT)
- 动态NAT(Pooled NAT)
- 网络地址端口转换NAPT(Port-Level NAT)-> 最常用
- 主要功能
- 数据包伪装、平衡负载、端口转发、透明代理
- 例子
- 平时运营商为大家安装的宽带(一般情况下,大家拥有的都是内网IP,统一由一个拥有公网IP的NAT网关进行转换,保证大家在Internet的访问)
- 虚拟机的NAT转换
2. 静态NAT(Static NAT)
- 特征
- 一个内网IP对一个外网IP,不会改变
- 外网可直接访问内网
- 示意图
- 解释(举栗子)
- 服务器A发出访问服务器X的请求(src=192.168.0.101, dst=14.215.177.39),由于在内网,请求先被发到网关处(192.168.0.1)
- NAT网关接收到请求,根据所设置的IP映射表,转换请求(src=14.215.177.21, dst=14.215.177.39),将请求通过网络发送至服务器X
- 服务器X收到请求,进行响应(src=14.215.177.39, dst=14.215.177.21),请求会先走到NAT网关处
- NAT网关接收到请求,根据所设置的IP映射表,转换请求(src=14.215.177.39, dst=192.168.0.101)
- 服务器A顺利收到服务器x的响应
3. 动态NAT(Pooled NAT)
- 特征
- 一个内网IP对一个随机外网IP,因为存在外网IP池
- 外网难以直接访问内网
- 示意图
- 解释
- 由于拥有的外网IP较少,每台内网服务器不能都分到外网IP。这个时候大家需要共享IP,使用时从IP池中分配,不用了就释放。
- 传输方式和静态相似,需要注意一下几点:
- 在NAT网关处分配IP后,NAT网关会做IP映射记录,用于将外部服务器的响应发送到正确的内网IP服务器
- 在NAT网关处分配IP后,一定时间内不使用,将会抹去映射记录,该IP进入空闲状态,可以被分配给其他内网服务器
- 由于内网访问外网的IP是动态的,所以外网向内网发送请求时难以成功
4. 网络地址端口转换NAPT(Port-Level NAT)
- 特征
- 多个内网IP对一个外网IP的不同端口
- 外网难以直接访问内网
- 示意图
- 解释
- NAT网关只需一个外网IP即可完成外网访问转换,极大地降低了外网IP的使用量
- NAPT传输方式依旧和前面的相似,只有一个外网IP的情况下,将映射关系改为了“内网IP -> 随机端口”,用端口来区分内网IP,保证正确的解析外网服务器的响应
- NAPT内部还有几个分类:全锥NAT、限制性锥NAT、端口限制性锥NAT、对称NAT等
5. 一些问题
- 平时运营商给个人用户设置网络,采用的是什么方式?
- 采用NAPT,这样节约公网IP
- 如果使用的是网络地址端口转换NAPT,外网真的没法向内网发起请求吗?
- 可以,通常有2种方式:
- 服务器中转:
- 在公网准备一台服务器S,内网服务器A与服务器S保持心跳连接。
- 外网服务器B若想要访问内网服务器A,需向服务器S发起请求,服务器S再向内网服务器A获取资源,返回给外网服务器B。
- 所有的数据传输都需要经过服务器S,性能较低。内网穿透方式不行时,可以这样干。
- 内网穿透:
- 在公网准备一台服务器S,服务器A与服务器S保持心跳连接,S获得服务器A的IP、Port。
- B服务器向服务器S发送消息,表明它想访问服务器A。S获得服务器B的IP、Port,同时向A发送B的IP、Port,向B发送A的IP、Port。
- 服务器A通过从服务器S处获得的B的IP、Port向服务器B发送消息。显然因为服务器B的NAT网关没有相关映射记录,服务器B收不到该消息。但是因为服务器A发送了这样一条消息,服务器A的NAT网关会记录下 A -> B的映射。
- 同时服务器B也会向A发送消息,此时服务器B的NAT网关会记录下 B -> A的映射
- 至此,服务器A与服务器B的网络通了
- 成功率:
- 静态端口映射的NAT成功率较高
- 动态端口映射的NAT成功率较低
- 服务器中转:
- 可以,通常有2种方式:
- 描述一下NAT的功能?
- 数据伪装:内网IP地址通过NAT被转换为外网IP,外网服务器只知道数据是NAT转换后的外网IP地址传过来的,这样内网服务器不用暴露在外网。
- 平衡负载:NAT网关将内网多台服务器IP映射到一个外网IP,当外网服务器直接请求外网IP时,NAT网关会对内网的服务器进行轮询,再响应外网服务器,这样就实现了负载均衡。但是NAT无法感知内网服务器故障,即便内网服务器出了问题,依然会转发请求。
- 端口转发:为内网某个服务器配置端口映射,例如 9000端口 -> 内网服务器A(192.168.0.100),即可将访问NAT网关该9000端口的请求转向内网服务器A。
- 透明代理:内网服务器只需要设置默认网关为该NAT网关即可,NAT网关再去代理与外网连接,内网完全感受不到代理的存在。
6. 其他
- Linux监控HTTP/TCP连接(三次握手/四次挥手)
- 安装:yum install tcpdump
- 开启监控:tcpdump -nn -i eth0 arp or port 80 (即监控网卡eth0的arp协议或80端口)
- 发送请求:
- curl www.baidu.com 80
- 或 arp -d 192.168.0.1 && nc www.baidu.com 80
- Windows监控HTTP/TCP连接(三次握手/四次挥手)