详解iptables防火墙SNAT、DNAT地址转换工作原理及使用
NAT简介
NAT是将私有IP地址通过边界路由转换成外网IP地址,在边界路由的NAT地址转换表中记录下这个转换,当数据返回时,路由使用NAT技术查询NAT转换表,再将目标地址替换成内网用户IP地址。
SNAT策略
局域网主机共享单个公网IP地址接入Internet(内网的地址改成公网)
DNAT策略
目标地址转换
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
[root@Init5 ~]# reboot #重启
[root@Init5 ~]# /etc/init.d/iptables stop #清空防火墙规则
2、查看网卡信息
[root@Init5 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 #查看网关防火墙公网网卡信息
[root@Init5 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 #查看网关防火墙内网网卡信息
[root@client ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 #查看公网网卡信息
[root@redhat6 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 #查看内网网卡信息
3、开启网关防火墙路由功能
[root@Init5 ~]# vim /etc/sysctl.conf #配置一些系统信息以及内核参数
[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内网网关
二、构建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 #查看防火墙规则
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服务器
4、查看公网访问日志信息
三、构建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 #查看防火墙规则
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,通公网网关才可以将地址进行转换,之前规则也已经写清楚了
4、查看内网访问日志信息
四、公网客户机通过访问内网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 #查看防火墙规则
2、公网客户端访问内网ssh服务实现远程连接
[root@client ~]# ssh [email protected] -p 999