SNAT 和 DNAT 的区别

发布时间: 更新时间: 总字数:917 阅读时间:2m 作者: IP上海 分享 网址

NAT(Net Addres Trancelate,网络地址转换) 是将局域网里的内部地址(如 192.168.0.x)转换成公网(Internet)上的 IP 地址(如 1.1.1.2),以使内部地址能像有公网地址的主机一样上网和访问。NAT 包括:DNAT、SNAT、MASQUERADE。

介绍

修改ip报文的头部的source ip或者destination ipNAT通常都是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 映射给云实例使用,使云实例能够提供互联网服务。

# 让外网用户访问局域网内不同的服务器,网关上配置
iptables –t nat –A PREROUTING –i eth1 –p tcp –d 222.222.222.222 –dport 80 –j DNAT --to-destination 192.168.10.10:80

iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to-destination 192.168.10.10

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)
# 解决多个内网用户通过一个外网地(222.222.222.222)上网
iptables –t nat –A POSTROUTING –s 192.168.10.10 –o eth1 –j SNAT --to-source 222.222.222.222

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT –to-source 222.222.222.222

# 若外网IP不稳定,使用MASQUERADE(动态伪装)
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数