Linux之防火墙篇二DNAT与SNAT

  一:DNAT与SNAT讲解及准备工作

  SNAT:源地址转换,代理内部客户端访问外部网络

  目标地址不变,重新改写源地址,并在本机建立NAT表项,当数据返回时,根据NAT表将目的地址数据改写为数据发送出去时候的源地址,并发送给主机,目前基本都是解决内网用户用同一个公网IP地址上网的情况。

  DNAT:目标地址转换,将内部服务器发布至外部网络

  和SNAT相反,源地址不变,重新修改目标地址,在本机建立NAT表项,当数据返回时,根据NAT表将源地址修改为数据发送过来时的目标地址,并发给远程主机在DNAT的基础上,可以根据请求数据包的端口做PNAT(端口转换,也称为端口映射),可以根据请求数据包不同的端口改写不同的目标地址,从而发送给不同的主机这在用一个公网地址做不同服务时用的比较多,而且相对来说,用NAT的方式可以隐藏后端服务器的真实地址,比较安全。

  SNAT的数据流向过程

  首先进入PREROUTING,发现不是本网段的地址,而后开始查找路由表(查找路由的过程在PREROUTING和FORWARD之间),于是经过FORWARD链进行转发,在通过POSTROUTING时进行NAT转换。在这个流程中,NAT转换的步骤在POSTROUTING链上实现,之所以不再PREROUTING上做NAT是因为数据包在进来之前,还不知道是本网段地址还是外网地址。

  DNAT的数据流向过程

  在DNAT中,NAT要在PREROUTING链上做。在数据进入主机后,路由选择过程是在PREROUTING和FORWARD之间的,所以应该先做地址转换之后再进行路由选择,而后经过FORWARD链,最后从POSTROUTING链出去。

  这里三台计算机都使用的VMware来实现,172.16.的系统都是CentOS6.4_x86_64,192.168.是windows XP。

  PC1地址:172.16.251.185 网关指向:172.16.251.186

  route add default gw 172.16.251.186

  NAT服务器地址:172.16.251.185

  PC2地址:

  二、SNAT的实现:

  1、在我们做NAT之前,首先要把NAT服务器的路由功能打开,不然数据包过不了FORWARD链

  sysctl -w net.ipv4.ip_forward=1

  也可以使用文件永久生效,下面值改为1即可

  vim /etc/sysctl.conf

  net.ipv4.ip_forward = 1

  执行如下命令让其生效

  sysctl -p

  2、在NAT服务器添加iptables规则如:

  iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j SNAT –to-source 192.168.254.61

  //在POSTROUTING链上面,将来自源地址为172.16.0.0/16网段的数据包的源地址都转换为192.168.254.61

 

发表评论

邮箱地址不会被公开。 必填项已用*标注