码迷,mamicode.com
首页 > 其他好文 > 详细

iptables_原理理解_DNAT&SNAT实践应用

时间:2015-12-03 17:13:48      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:iptables   snat   dnat   

  1. 我们都知道iptables 是防火墙,但是实际上 iptables只是配置防火墙的一种工具,真正在工作的是neifilter,netfilter存在于kernel,也就是说是kernel在处理进去出来的数据包;

    直接看图,看看kernel是如何处理这些数据包的,并且能干什么:

    技术分享

2. 先说收DNAT
DNAT目标地址转换在PREROUTING链上做;可以将虚拟机的服务映射到宿主机的ip上,达到访问宿主的 ip就等于访问虚拟机的效果;

iptables -t nat -A PREROUTING -d 192.168.1.51 -p tcp -m tcp --dport 80 -j DNAT --to-destination  192.168.122.2:80
 -d 物理机的ip                         --dport 端口         DNAT      被映射的内网主机ip:端口

应用场景:

这样主要是为了 能让内网的主机能够对外提供服务:数据包的第一站 PREROUTING  ,匹配到规则就执行规则进行DNAT转发,经过FORWARD ,到达POSTROUTING出站。没有匹配到就进入INPUT,进行匹配

3.再说SNAT
SNAT源地址转换在POSTROUTING链上做; 可以为局域网提供上网服务

iptables -t nat -A PORTROUTING -o br0 -j MASQUERADE

应用场景:

主机上的NAT 虚拟机需要访问物理网路,虚拟机直接通过先 经过FORWARD,然后通过POSTROUTING 将源地址转换 

4. 再说说不需要经过转换的数据包,如图示绿色的部分,直接到达INPUT-->OUTPUT-->POSTROUTING出来了,比如说我要ssh远程这个主机,走的就是这个流向;

5. 再来做几个实验,来加固一下知识

A. 如果想让相对的局域网内服务器对外提供web服务,需要做DNAT规则:

iptables -t nat  -A  PREROUTING  -d 公网IP  -p tcp –m tcp  --dport  公网端口 -j  DNAT  --to-destination 内网IP:80

技术分享看上图,我将外网IP 的80,8080 端口都映射到了内网IP的80端口:
看第一张图,

经过PREROUTING 链后还需要经过FORWARD 链,需要在FORWARD这开放提供web服务的80 端口:

iptables  -A FORWARD  -p tcp  -m tcp  --dport 80  -j ACCEPT

技术分享

理论上还需要开放一下--sport 80  , 但是如果已经有下面这个规则了,就不需要了:这个规则是允许已有连接直接通过;但有大量数据包经过时,可以提高速度!

iptables- I  FORWARD –p tcp  -m state -- state RELADE,RSTABLISHED - j
ACCEPT

看看实际的效果:
80端口
技术分享


8080端口

技术分享

B. 当然FORWARD链处,可以对转发进行数据包的过滤,比如我想通过公网服务器的ip,远程ssh连接局域网内的服务器,就可以使用DNAT进行转换内网主机的22端口,但是为了安全,我想限制可以远程的IP地址:我只想让我一个人可以 远程,我的ip192.168.1.154,内网网段是192.168.122.0/24

DNAT:

iptables -t  nat -A PREROUTING  -d 192.168.1.51 -p tcp -m tcp --dport 8081 --to-destination 192.168.122.2:22

技术分享

FORWARD:

iptables -A  FORWARD -s 192.168.1.154  -d 192.168.122.0/24 -p tcp -m tcp --dport 22 -j  ACCEPT

技术分享

看效果:

我的ip地址
技术分享

在192.168.1.154上 ssh远程一下看看
技术分享

再到其他的主机上ssh试试看,这个主机ip是192.168.1.20
技术分享

看的出来FORWARD 上的那个规则生效了。
C. 当内网的主机或本地的虚拟机需要通过本机上网时,需要做SNAT规则:我的环境是虚拟机要通过宿主机上网,虚拟机以宿主机为网关,虚拟机的网段是192.168.122.0/24,宿主机的网段是192.168.1.0/24,相对来说宿主机网段就是外网,虚拟机就是内网。-j  MASQUERADE 是当外网ip不固定时,这个配置 可以自动获取外网ip

iptables -t nat -A POSTROUTING  -o br0   -s 内网段/24  -j MASQUERADE

-s配置不是必须的,在真实局域网环境中,也许会有多个局域网段,这时就可以通过-s 配置,指定那个网段可以上网

技术分享

技术分享


一直都在用iptables,但是知识非常零碎,每次用起来需要很长时间梳理,于是就写下这个,写这个主要目的是为了能把我所知道的分享给大家,以及能以后能够帮自己快速的回忆起来这些知识,不耽误正常的工作。


本文出自 “lijp” 博客,请务必保留此出处http://jiapeng.blog.51cto.com/6706171/1719289

iptables_原理理解_DNAT&SNAT实践应用

标签:iptables   snat   dnat   

原文地址:http://jiapeng.blog.51cto.com/6706171/1719289

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!