缥帙各舒散,前后互相逾。这篇文章主要讲述iptables实现SNAT和DNAT,并对规则持久保存相关的知识,希望能为你提供帮助。
关于SNAT和DNAT,在上一篇已经提到,此篇就不再对这两个名词进行解释,主要看一下如何利用Linux中iptables来实现SNAT和DNAT,以及如何保持规则的持久有效。
- ?实验准备?
?1.1 防火墙服务器端?
要想实现内网和外网之间能进行访问等操作,需要开启ip_forward。打开/etc/sysctl.conf文件,在里面添加net.ipv4.ip_forward=1,保存后执行 ?sysctl -p ?命令生效(如下图)。
为了实现地址转换,还需再添加一张网卡,并且添加的网卡设定为仅主机模式,此时,防火墙服务器的网卡就有两个,一个10.0.0.153负责连接内网,一个192.168.191.153负责连接外网?,?同时这两种都删除网关??(如下图)??。
?1.2 内网主机端?
两台主机分别取名user1和user2,需将网卡中网关指向防火墙内网ip,保存后,如果是CentOS7可直接执行 ?service network restart? 命令生效,如果是8系列,需要重新加载网卡,然后再令网卡生效??(如下图)??。
?1.3 公网主机端?
公网主机取名server,将网卡改为仅主机模式,同时ip为192.168.191.180,并删除网关??(如下图)??。
?1.4 准备阶段测试?
现阶段,内网中的user1、user2和server是无法相关访问的,但是user1和user2可ping通防火墙的内网ip,server也可以ping通防火墙的公网ip??(如下图)??。
- ?SNAT?
在制定SNAT规则时,可以用到SNAT选项和MASQUERADE选项,其中前者要求的是固定的公网ip,在使用拨号网络等动态公网ip情况下,SNAT无法使用。而MASQUERADE选项都适合,所以我们在这里可以省略掉SNAT选项,直接使用MASQUERADE。
防火墙服务器清除已有的规则,执行 ?iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j MASQUERADE ?命令,即只要是内网来的,目标地址是非内网的,就进行地址转换,执行 ?iptables -vnL -t nat ?命令可查看NAT规则(如下图)。
此时,user1和user2去ping公网中server,已经可以ping通,公网中的server去抓包,显示的来源是192.168.191.153,即防火墙的公网ip,已经对地址进行了转换??(如下图)??。
由于没有路由,此时公网中的server是无法ping通内网中的主机??(如下图)??。
- ?DNAT?
假设现在内网中的user1主机也是一个web服务器,在防火墙服务器未制定DNAT规则前,防火墙服务器可以访问user1的网页内容,而server是无法通过防火墙公网ip查看内容的??(如下图)??。
此时,防火墙服务器端执行 ?iptables -t nat -A PREROUTING -d 192.168.191.153 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.154:80 ?命令,即只要是指向服务器公网ip的80端口请求,就自动转发到内网user1的80端口上去,此处因为端口相同,也可将内网服务器ip后的端口省略??(如下图)??。
server再去执行 ?curl 192.168.191.153? 命令时,访问的就是内网user1的网页内容??(如下图)??。
此时,user1去查看日志,看到的访问来源是源地址,即server的ip??(如下图)??。
- ?保持规则持久有效?
?4.1 读取文件?
刚好以上实验留下了两条规则,笔者这边就直接拿来做演示。执行 ?iptables-save > /data/iptables.rule ?命令,将规则保存到/data/iptables.rule文件中后清除掉所有NAT规则,此时NAT表中是没有规则记录的??(如下图)??。
执行 ?iptables-restore < /data/iptables.rule ?命令,即从/data/iptables.rule文件中恢复iptables规则,发现规则又回来了??(如下图)??。
?4.2 修改配置文件?
第二种方法就是修改/etc/rc.d/rc.local配置文件,打开配置文件,在里面添加iptables-restore < /data/iptables.rule一行,保存后执行 ?chmod +x /etc/rc.d/rc.local ?命令给予执行权限,也就是将第一种方法的手动执行改为了系统开机自动执行??(如下图)??。
【iptables实现SNAT和DNAT,并对规则持久保存】
重启主机后,原来的规则也自动加载进来了??(如下图)??。
推荐阅读
- Debian 二进制文件(华文宋体字体)打包解包
- mysql实验&ansible常用模块
- 运维小白成长记——第九周
- 云服务器快速配置阿里巴巴NTP(网络时间协议)
- rsync(下行同步)与inotify(实时同步)
- XML DOM – 访问节点概述
- Powershell-批量重命名替换文件名
- Markdown 是什么(#yyds干货盘点#)
- 使用VMware虚拟机安装windows10系统