NAT简介

NAT是将私有IP地址通过边界路由转换成外网IP地址,在边界路由的NAT地址转换表中记录下这个转换,当数据返回时,路由使用NAT技术查询NAT转换表,再将目标地址替换成内网用户IP地址。

SNAT策略

局域网主机共享单个公网IP地址接入Internet(内网的地址改成公网)

DNAT策略

目标地址转换

SNAT、DNAT工作原理

详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

SNAT

局域网PC封装源、目ip(源地址:192.168.100.77,目的地址:172.16.16.101),到达网关路由器,SNAT将源地址转换成唯一的一个公网ip,此时源地址变成了公网ip172.16.16.254(eth0),再把数据包重新封装。当外网服务器收到,进行数据回复的时候。源目对调,源地址是web服务器地址,目标地址是网关地址,找到网关路由之后,在网关路由中会有一个状态记录(局域网内或许不止一台主机访问外网),转发回去。

DNAT

外网客户机发送http请求,请求的是公网IP地址(eth0),数据到达网关服务器时,查看访问是80端口,将目的地址172.16.16.254(公网IP只有一个)改为192.168.100.77。内网服务器收到以后返回数据,使用的是SNAT(通过SNAT原理来解释)

实验环境

  • 系统环境:CentOS6.5
  • 内网IP:192.168.100.77/24
  • 公网IP:172.16.16.101/24
  • 网关防火墙:
    公网网网卡:eth0:172.16.16.254
    内网网卡:eth1:192.168.100.254

搭建步骤:

一、准备工作

1、清空防火墙规则、关闭Selinux

[root@Init5 ~]# vim /etc/sysconfig/selinux
详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

[root@Init5 ~]# reboot #重启

[root@Init5 ~]# /etc/init.d/iptables stop #清空防火墙规则

2、查看网卡信息

[root@Init5 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 #查看网关防火墙公网网卡信息
详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

[root@Init5 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 #查看网关防火墙内网网卡信息
详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

[root@client ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 #查看公网网卡信息
详解iptables防火墙SNAT、DNAT地址转换工作原理及使用
[root@redhat6 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 #查看内网网卡信息
详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

3、开启网关防火墙路由功能

[root@Init5 ~]# vim /etc/sysctl.conf #配置一些系统信息以及内核参数
详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

[root@Init5 ~]# sysctl -p #重新加载配置文件

4、测试互联互通

[root@client ~]# ping -c 3 172.16.16.254 #公网服务器ping公网网关
[root@client ~]# ping -c 3 192.168.100.254 #公网服务器ping内网网关
详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

二、构建SNAT地址转换

1、网关防火墙设置SNAT规则

[root@Init5 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j SNAT --to-source 172.16.16.254 #将内网192.168.100.0/24网段的IP转换成公网网关IP172.16.16.254

-t:指定规则表是nat(修改源目IP或端口)
-A:追加规则链是POSTROUTING(路由后)
-s:指定源地址
-o:指定出站网卡
-j:指定控制类型
--to-source:指定转换的源地址

[root@Init5 ~]# iptables -L -t nat -v #查看防火墙规则
详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

2、设置公网服务器

[root@client ~]# yum -y install httpd #安装web服务
[root@client ~]# vim /etc/httpd/conf/httpd.conf #修改配置文件
ServerName www.bt.com:80 #开启完整主机名
Listen 172.16.16.101:80 #开启监听地址

[root@client ~]# /etc/init.d/httpd start #启动web服务器

[root@client ~]# tail -f /var/log/httpd/access_log #监视access_log日志文件的尾部内容

3、内网客户机访问公网Web服务器

[root@redhat6 ~]# yum -y install elinks #安装基于文本的浏览器工具
[root@redhat6 ~]# elinks 172.16.16.101 #访问外网Web服务器

详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

4、查看公网访问日志信息

详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

三、构建DNAT地址转换

1、网关防火墙设置SNAT规则

[root@Init5 ~]# iptables -t nat -A PREROUTING -i eth0 -d 172.16.16.254 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.77 #将公网客户机IP 172.16.16.254/24转换成192.168.100.77/24内网IP

[root@Init5 ~]# iptables -L -t nat -v #查看防火墙规则
详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

2、设置内网服务器

[root@redhat6 ~]# yum -y install httpd #安装web服务
[root@redhat6 ~]# vim /etc/httpd/conf/httpd.conf #修改配置文件

#修改以下参数
ServerName www.test.com:80 #开启完整主机名
Listen 192.168.100.77:80 #开启监听地址

[root@redhat6 ~]# /etc/init.d/httpd start #启动web服务器

[root@redhat6 ~]# tail -f /var/log/httpd/access_log #监视access_log日志文件的尾部内容

3、公网客户机访问内网Web服务器

[root@client ~]# elinks 172.16.16.254 #注意访问的是公网网关IP,通公网网关才可以将地址进行转换,之前规则也已经写清楚了
详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

4、查看内网访问日志信息

详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

四、公网客户机通过访问内网ssh服务实现修改端口

1、网关防火墙设置端口规则

[root@Init5 ~]# iptables -t nat -A PREROUTING -i eth0 -d 172.16.16.254 -p tcp --dport 999 -j DNAT --to-destination 192.168.100.77:22 #注意这里将ssh服务端口改为999

[root@Init5 ~]# iptables -L -t nat -v #查看防火墙规则
详解iptables防火墙SNAT、DNAT地址转换工作原理及使用

2、公网客户端访问内网ssh服务实现远程连接

[root@client ~]# ssh root@172.16.16.254 -p 999
详解iptables防火墙SNAT、DNAT地址转换工作原理及使用