NAT(Net Addres Trancelate,网络地址转换)
是将局域网里的内部地址
(如192.168.0.x)转换成公网(Internet)上的IP地址(如1.1.1.2),以使内部地址能像有公网地址的主机一样上网和访问。NAT包括:DNAT、SNAT、MASQUERADE。
介绍
修改ip报文
的头部的source ip
或者destination ip
,NAT
通常都是router
的行为。在linux中,iptables可以作为NAT执行的角色。
实现方式
- Static NAT(静态地址转换,内网IP:公网IP=1:1)
- Pooled NAT(动态地址转换,内网IP:公网IP=M:N)
- NAPT(内网IP:公网IP=M:1)
DNAT
DNAT(Destination Network Address Translation)
修改网络包目的ip地址
。当内部需要提供对外服务时(如对外发布web网站),外部地址
发起主动连接,由路由器或者防火墙
上的网关接收这个连接,然后将连接
转换到内部
,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT
,主要用于内部服务对外发布,比如:将 NAT 网关上的公网 IP 映射给云实例使用,使云实例能够提供互联网服务。
SNAT
SNAT(Source Network Address Translation)
修改网络包源ip
地址。内部地址
要访问公网上的服务时(如web访问),内部地址会主动发起连接,由路由器或者防火墙
上的网关对内部地址
做个地址转换
,将内部的私有IP
转换为公网的公有IP
,网关
的这个地址转换
称为SNAT
,主要用于内部共享IP访问外部,比如:为VPC中无公网IP的ECS实例提供访问互联网的代理服务。SNAT是为了解决ip地址不够用的情况。
RFC 1918保留了3个网段作为private addresses
:
- 10.0.0.0/8 (即 10.0.0.0 - 10.255.255.255)
- 172.16.0.0/12 (即 172.16.0.0 - 172.31.255.255)
- 192.168.0.0/16 (即 192.168.0.0 - 192.168.255.255)