Linux SNAT/DNAT简单理解与案例分析。

  在计算机网络中,网络地址转换(Network Address Translation,缩写为NAT),也叫做网络掩蔽或者IP掩蔽(IP masquerading),是一种在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问因特网的私有网络中。根据规范,路由器是不能这样工作的,但它的确是一个方便且得到了广泛应用的技术。当然,NAT也让主机之间的通信变得复杂,导致了通信效率的降低。

以上是维基百科对NAT技术的描述,我这里就不做过多的评价了。

目前两种常用NAT类型:

  • SNAT
  • DNAT

  NAT是作为一种解决IPv4地址短缺以避免保留IP地址困难的方案而流行起来的。网络地址转换在很多国家广泛使用。例如:我们家用路由器就是一种NAT技术,它可以将局域网的内部地址转换为公网地址使内部地址可以像有公网地址的服务器一样进行网络通信。

Linux 6/7防火墙变动:

  • 6

  防火墙使用iptables命令进行配置。

  • 7

  防火墙使用firewall-cmd命令进行配置。可以在7中安装iptables并通过iptables对防火墙策略进行管理。yum -y install iptables,直接yum安装 即可,因为很多人用iptables可能会比用firewall-cmd命令更熟悉,至于firewall-cmd我也只是会几条简单的命令,还没有研究过,这里就是欠下的账,迟早有一天是要还的。

PREROUTING、POSTROUTING与SNAT、DNAT的对应关系:

  从图上看可能更容易理解吧,首先这个路由器可以简单的理解为家用路由器,下面的服务器可以简单的理解为连接在路由器下面的手机或者PC,实际上我们可以将这个路由器理解为一个网关设备,数据从局域网到广域网会通过网关进行协商来实现。
  我们来从Linux防火墙的角度简单的分析下局域网设备访问公网流量是如何进行传输的。

1. 局域网访问互联网会先经过NAT table的PREROUTING链;
2. 经过路由时进行判断数据包是否要进入本机;
3. 再经过Filter table的FORWARD链;
4. 通过NAT table的POSTROUTING链传送到互联网

  NAT服务的重点在于上述流程的第1和第4步,也是NAT table中的两条重要的链:PREROUTING和POSTROUTING,如果想要了解这两个链与SNAT、DNAT的对应关系,就必须知道他们各自的作用。

  • POSTROUTING:目的在于修改来源IP地址(DNAT)。
  • PREROUTING:目的在于修改目标IP地址(SNAT)。

  那么就下来就好解释上面的流程了,PREROUTING修改目标IP地址是因为当前我们的局域网地址无法访问互联网,如果将目标地址修改为192.168.1.1那么路由器存在公网IP,我们就可以通过公网IP对互联网进行访问,POSTROUTING修改源地址我们就可以理解为我们访问互联网的地址时必须使用的是Public IP而不是局域网地址,这就是通过POSTROUTING链进行修改后的结果,也可以看成入流量会经过PREROUTING链,出流量会经过POSTROUTING链,相信这么解释后大家应该就可以差不多明白了,那接下来就上操作了。

操作案例

  无论做那个转发操作都需要我们将内核的路由转发功能打开,有一下两种方式:
第一种:
sysctl net.ipv4.ip_forward=1
第二种:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

通过NAT直接访问内网服务器

iptables -t nat -A PREROUTING -p tcp --dport 12345 -j DNAT --to-destination 192.168.1.2:22
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.2 -j SNAT --to-source 192.168.1.1

  我们这里也是同时使用了SNAT和DNAT,原因上面已经解释过了,执行的第一条命令是将所有发送到ens160这个网卡的12345端口请求转发给192.168.1.2的22端口,第二条命令是将192.168.1.2上发送的所有请求都看作是192.168.1.1发送的。接下来就可以ssh PublicIP:12345端口进行测试是否可以连接到内网主机了。

通过SNAT实现代理上网

  要实现的功能与上述实例恰好大致相反,我们需要在网关服务器上配置如下操作:
iptables -t nat -A POSTROUTING -o ens192 -s 192.168.1.0/24 -j SNAT --to-source 192.168.1.1
内网云主机上配置网关操作:
ip route add 192.168.1.0/24 via 192.168.1.1
  后续测试内网网卡是否可以 ping通公网地址即可。

猜你喜欢

转载自www.cnblogs.com/Cherry-Linux/p/9369012.html