网络地址转换也称为NAT。NAT是一种通过中间设备(如防火墙、路由器、调制解调器等)更改IP地址和TCP端口号的过程或技术。NAT有不同的使用情况,但最流行的情况是对位于LAN的多个服务器和客户机使用单个WAN IP地址。
拓扑学
NAT一般有以下拓扑结构。NAT将发生在路由器上,从LAN发出的请求将转换为路由器的WAN IP地址。

局域网IP地址
LAN IP地址是私有IP地址,如下所示。
- 192.168.0.0 – 192.168.255.255
- 172.16.0.0 – 172.31.255.255
- 10.0.0.0 – 10.255.255.255
如果我们用 ipconfig
对于Windows或 ip address
Linux命令我们将看到我们的IP地址在给定IP地址的范围内。这些LAN IP地址不能在internet上使用,因此我们需要一种新类型的IP地址而不更改LAN IP地址。
> ipconfig

广域网IP地址
广域网IP 地址被命名为公共IP地址。它们在因特网上使用,在下列地址之间编号,局域网IP地址除外
- 0.0.0.1 – 255.255.255.255
我们可以用不同的方式检查我们的广域网IP地址,但如果我们有浏览器,谷歌是最实用的网元 what is my ip address

TCP和UDP端口
TCP和UDP协议用于主机或客户机与服务器之间的数据传输。在NAT期间,TCP和UDP端口号通常是变化的。因为每个TCP或UDP数据包都有一个源端口和目标端口。这些端口号将在NAT操作期间更改。
相关文章: 什么是DNS服务器或协议端口号?
NAT是怎么工作的?
现在我们来看看NAT 一步一步地工作。我们将使用以下拓扑和步骤进行描述。

- 首先,驻留在局域网中的客户机将创建一个数据包。包源和目标IP地址和端口号如下所示。
![图片[5]-什么是NAT(网络地址转换)及其工作原理?-yiteyi-C++库](https://www.yiteyi.com/wp-content/uploads/2019/03/poftut_img_5c98614c7ea35.png)
- 当数据包到达路由器时,给定的源IP地址和端口号将被改变。源IP地址将是路由器的WAN IP地址。源端口号将由路由器随机设置或根据给定的配置进行设置。我们可以在红色框中看到改变的值。新的源IP地址将是
176.43.223.203
源端口号3019
.
![图片[6]-什么是NAT(网络地址转换)及其工作原理?-yiteyi-C++库](https://www.yiteyi.com/wp-content/uploads/2019/03/poftut_img_5c98620e42319.png)
- 此包将重定向到internet上的服务器。在服务器处理请求并为响应创建数据包之后,源和目标IP地址如下所示。
![图片[7]-什么是NAT(网络地址转换)及其工作原理?-yiteyi-C++库](https://www.yiteyi.com/wp-content/uploads/2019/03/poftut_img_5c9862c378729.png)
- 当这个数据包到达路由器时,它将被NAT’ted或翻译成LAN,目的地IP地址和端口号将改变如下。目标IP地址将是
192.168.142.100
目标端口号为2019
.
![图片[8]-什么是NAT(网络地址转换)及其工作原理?-yiteyi-C++库](https://www.yiteyi.com/wp-content/uploads/2019/03/poftut_img_5c98633392c9b.png)
NAT类型
作为一种流行的机制,NAT可以在不同的情况下以不同的方式进行。
- 静态地址转换
- 动态地址转换
- 超载
静态地址转换
如果我们想提供一个IP地址或端口完全进入一个局域网客户端IP地址和端口永久我们需要使用静态NAT的NAT配置将是静态的,不会改变。例如,我们可以通过NAT’ting它的端口80或443为一个网页或服务器提供服务。
相关文章: Linux Netstat命令及其示例
动态地址转换
动态NAT对于那些不向广域网提供任何服务而只使用internet的客户机来说非常有用。在动态NAT中,IP地址和端口在每个请求或会话中都会发生变化。不会有静态配置。
超载
重载用于静态地将单个WAN IP地址端口号重定向为多个IP地址端口号。这在只有一个WAN IP地址但需要NAT多个IP地址和服务器端口的情况下非常有用。
Linux下iptables的NAT配置
iptables是一种流行的网络工具,用于路由、NAT、阻塞网络流量。我们可以通过以下iptables配置为局域网启用NAT。我们指定 eth1
用于LAN接口。
$ sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE