IPtables中可以灵活的做各种网络地址转换(NAT)

网络地址转换主要有两种:SNAT和DNAT

SNAT是source network address translation的缩写即源地址目标转换

比如,多个PC机使用ADSL路由器共享上网,每个PC机都配置了内网IP。PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip。当外部网络的服务器比如网站web服务器接到访问请求的时候,他的日志记录下来的是路由器的ip地址,而不是pc机的内网ip。

这是因为,这个服务器收到的数据包的报头里边的“源地址”,已经被替换了。所以叫做SNAT,基于源地址的地址转换。

DNAT是destination network address translation的缩写即目标网络地址转换

典型的应用是,有个web服务器放在内网,配置内网ip,前端有个防火墙,配置公网ip,互联网上的访问者使用公网ip来访问这个网站。当访问的时候,客户端发出一个数据包,这个数据包的报头里边,目标地址写的是防火墙的公网ip。防火墙会把这个数据包的报头改写一次,将目标地址改写成web服务器的内网ip,然后再把这个数据包发送到内网的web服务器上这样,数据包就穿透了防火墙,并从公网ip变成了一个对内网地址的访问了,即DNAT,基于目标的网络地址转换 。

MASQUERADE,地址伪装,在iptables中有着和SNAT相近的效果,但也有一些区别:

SNAT,DNAT,MASQUERADE都是NAT,MASQUERADE是SNAT的一个特例。

SNAT是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来源是被替换的那个IP的主机。

MASQUERADE是用发送数据的网卡上的IP来替换源IP,因此,对于那些IP不固定的场合,比如拨号网络或者通过dhcp分配IP的情况下,就得用MASQUERADE。

DNAT,就是指数据包从网卡发送出去的时候,修改数据包中的目的IP,表现为如果你想访问A,可是因为网关做了DNAT,把所有访问A的数据包的目的IP全部修改为B,那么,你实际上访问的是B。

因为,路由是按照目的地址来选择的,因此,DNAT是在PREROUTING链上来进行的,而SNAT是在数据包发送出去的时候才进行,因此是在POSTROUTING链上进行的

但使用SNAT的时候,出口ip的地址范围可以是一个,也可以是多个,例如:

如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3的ip然后发出去

iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT –to-source 192.168.5.3

如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3/192.168.5.4/192.168.5.5等几个ip然后发出去

iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT –to-source 192.168.5.3-192.168.5.5

这就是SNAT的使用方法,即可以NAT成一个地址,也可以NAT成多个地址

但是,对于SNAT,不管是几个地址,必须明确的指定要SNAT的ip

假如当前系统用的是ADSL动态拨号方式,那么每次拨号,出口ip192.168.5.3都会改变

而且改变的幅度很大,不一定是192.168.5.3到192.168.5.5范围内的地址

这个时候如果按照现在的方式来配置iptables就会出现问题了

因为每次拨号后,服务器地址都会变化,而iptables规则内的ip是不会随着自动变化的

每次地址变化后都必须手工修改一次iptables,把规则里边的固定ip改成新的ip

这样是非常不好用的

MASQUERADE就是针对这种场景而设计的,他的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT

比如下边的命令:

iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE

如此配置的话,不用指定SNAT的目标ip了

不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做SNAT出去

这样就实现了很好的动态SNAT地址转换

注:

对于MASQUERADE,只是计算机的负荷稍微多一点。因为对每个匹配的包,MASQUERADE都要查找可用的IP地址,而不象SNAT用的IP地址是配置好的。当然,这也有好处,就是我们可以使用通过PPP、 PPPOE、SLIP等拨号得到的地址,这些地址可是由ISP的DHCP随机分配的。

实例:

我们可能需要将访问主机的7979端口映射到8080端口。也可以iptables重定向完成

iptables -t nat -A PREROUTING -p tcp --dport 7979 -j REDIRECT --to-ports 8080

更改iptables,使之实现nat映射功能

将外网访问192.168.75.5的80端口转发到192.168.75.3:8000端口。

# iptables -t nat -A PREROUTING -d 192.168.75.5 -p tcp --dport 80 -j DNAT --to-destination 192.168.75.3:8000

将192.168.75.3 8000端口将数据返回给客户端时,将源ip改为192.168.75.5

# iptables -t nat -A POSTROUTING -d 192.168.75.3 -p tcp --dport 8000 -j SNAT 192.168.75.5

转载于:https://blog.51cto.com/dengaosky/2129665

IPTABLES中SNAT和MASQUERADE的区别相关推荐

  1. iptables中SNAT, DNAT, MASQUERADE

    文章出处:http://server.zdnet.com.cn/server/2008/0317/772069.shtml iptables中可以灵活的做各种网络地址转换(NAT) 网络地址转换主要有 ...

  2. iptables中DNAT、SNAT和MASQUERADE的理解

    IPtables中可以灵活的做各种网络地址转换(NAT),网络地址转换主要有两种:SNAT和DNAT SNAT是source network address translation的缩写,即源地址目标 ...

  3. iptables中的snat与dnat配置技术文档

    文章目录 一.SNAT实验: 二.DNAT实验 首先需要弄清楚snat与dnat的区别: 从定义来讲它们一个是源地址转换(snat),一个是目的地址转换(dnat).都是地址转换的功能,将私有地址转换 ...

  4. NAT转换技术(SNAT、MASQUERADE、DNAT策略)及代理服务(squid服务)

    NAT地址转换技术 一.NAT网络拓扑图 二.实验环境 本次实验均是在 RHEL6.5 虚拟机上进行的. WEB-内网(Client)IP地址:192.168.10.150 (VMnet1) 网关   ...

  5. CentOS 7 iptables 防火墙 SNAT DNAT 用法

    iptables 命令基本参数和用法 iptables[-t 表名]命令选项[链名][条件匹配][-j 目标动作或跳转] 说明: 表名链名:用于指定 iptables 命令所操作的表和链 命令选项:用 ...

  6. iptables之SNAT与DNAT

    iptables之SNAT与DNAT 前言 一.SNAT策略及应用 (1)SNAT策略概述 ①SNAT应用环境 ②SNAT的策略原理 ③SNAT转换前提条件 (2)开启SNAT命令 (3)SNAT案例 ...

  7. linux视频教程 iptables 跟踪,linux – 了解iptables中的连接跟踪

    我在对iptables中的状态/连接跟踪做了一些澄清. >这两条规则有什么区别? iptables -A FORWARD -m state –state ESTABLISHED,RELATED ...

  8. SNAT和DNAT的区别

    文章出处:http://sxj007.blog.51cto.com/521729/110924 SNAT, DNAT, MASQUERADE都是NAT MASQUERADE是SNAT的一个特例 SNA ...

  9. snat与dnat的区别

    原理上来讲nat 前导:NAT(Network AddressTranslation,网络地址转换)是将IP 数据包头中的IP 地址转换为另一个IP 地址的过程.(nat就是防火墙的nat表)实际上就 ...

  10. linux服务-iptables( snat 和dnat )

    iptables snat 和dnat说明 1.dnat是用来做目的网络地址转换的,就是重写包的目的IP地址.比如,你的Web服务器在LAN内部,而且没有可在Internet上使用的真实IP地址,那就 ...

最新文章

  1. 百度地图 app 点击事件无效、不触发 解决方案
  2. Common Lisp 初学者快速入门指导
  3. python游戏代码运行不了_无法使我的tic tac toe游戏在python中正确运行
  4. ajax中data传参报错
  5. Java日志记录最佳实践
  6. 做了5年程序员才明白,这项能力原来这么重要
  7. GitLab5.2 创建项目故障
  8. Anaconda3下载失败的解决方法
  9. 容器中Bean的生命周期
  10. 软件测试用例设计方法等价划分法
  11. imdisk 想说爱你不容易
  12. 书评 《编码: 隐匿在计算机软硬件背后的语言》
  13. LabelImage 安装过程
  14. 深度学习七:GAN和DCGAN入门
  15. 如何将安防摄像头接入互联网直播服务器
  16. html页面酒店日历插件,基于vue2.x的酒店日历选择插件
  17. 如何快速更改电脑ip地址【图文教程】?
  18. 全球及中国塑料机械行业十四五发展战略与竞争格局展望报告2022版
  19. ubuntu选择编辑器select-editor
  20. 傅里叶变换后信号的频谱分析中相位角的求法

热门文章

  1. JavaScript 代码的执行流程
  2. 阿里巴巴协助征战SARS(简单)
  3. nmn抗衰老是骗局吗,美国nmn骗局,正面解答
  4. TOM邮箱|怎么在邮箱里设置邮件个人签名呢?
  5. C++ MFC 如何画一个空心的即透明填充色的图形如矩形,圆形等
  6. pandas学习(四)之数据填充
  7. pageadmin CMS网站建设教程:模板中获取自定义文件的url节点值
  8. 作为软件开发人员需要具备的技术技能
  9. 什么是PLC可编程控制器,理论基础知识讲解QY-KC801
  10. 【电力电子】【2014.08】电力电子系统公用接口的三相功率因数校正设计