【Linux 驱动】Netfilter/iptables (八) Netfilter的NAT机制
NAT是Network Address Translation的缩写,意即“网络地址转换”。
从本质上来说,是通过改动IP数据首部中的地址,以实现将一个地址转换成还有一个地址的技术。
当然在某种情况下。改动的不仅仅是IP首部的来源或目的地址。还包含其他要素。
随着接入Internet的计算机数量不断猛增。IP地址资源也就愈加显得捉襟见肘。这也是Ipv6出现的一大原因。
我们如今全部的IP地址是32位,意味着其代表的主机数量是有限的(2^32 ~= 42亿)。实际是不够用的(计算机、路由器、网络设备,PDA、无线网络电话等等都要占用IP地址)。
当初划分IP时。各保留一段私有IP区间。
私网IP(私有IP)是指这些IP仅仅能在企业内部使用,而无法应用在因特网上,简而言之,就是私有IP不能直接与Internet进行互相通信。
眼下NAT技术很多其他地被使用在将一个私网IP地址网段。转换为一个或几个公网IP地址,以实现私网与Internet的互相通讯。
Internet上的路由器如果看到这些私有IP的数据包,就会将其丢弃。
我们先来通过一个样例解释下这个问题:
在下图中,我们在192.168.0.0/24这个私有ip与10.0.1.0/24这个公有ip加了个路由器。如果10.0.1.200是公网ip。
首先。192.168.0.1的这台主机尝试訪问Internet上的1.2.3.4这台主机。因此。192.168.0.1主机会发送一个请求数据包给默认网关,这个数据包的源ip和目的ip如图中标记的1所看到的,来源ip是192.168.0.1,目的ip是1.2.3.4,因为是路由器的缘故,这个数据包的源ip和目的ip地址都不会发生改变,接着,路由器会转发这个数据包给1.2.3.4主机,当1.2.3.4主机收到请求数据包后,其源ip和目的ip如3所看到的。然后,1.2.3.4主机响应请求,回送一个数据包给192.168.0.1,可是该数据包中的目的ip是192.168.0.1。是一个私有ip。因此这个数据包不可能被回送给192.168.0.1,也就不能进行正常通信。
为了提高Internet上数据包的传输效率,Internet上的路由器通常不检查数据包中的“来源IP”,而仅仅会看目的端的IP,所以私有IP的主机能够发出请求,可是得不到回应。
这个问题的解决的方法就落到了我们今天要介绍的NAT机制上。仅仅要通过NAT的机制。就能够让成千上万台计算机同一时候通过一个公网IP来连接Internet。
以下我们大致介绍下NAT原理:
与上面路由器的差别在于,我们多个个NAT机制,NAT主机将这个数据包内的“来源IP”改成NAT主机上的公网IP(10.0.1.200)。如标记2所看到的,这样一来,该数据包的源ip和目的ip都变成了公有IP,同一时候。NAT主机会将这个数据包的信息记录起来。接下来。这个数据包发送到了1.2.3.4。该主机响应,发回响应数据报的时候。这个数据包的目的ip成了10.0.1.200这个公网ip。而不是192.168.0.1这个私有ip,这样该数据包就能够顺利的到达NAT主机,然后NAT主机依据之前记录下来的信息中找到当初NAT主机关于这个的转换记录,再转回来,该数据包的目的IP就成了真正的目的主机192.168.0.1这个私有ip。但此时已经不是在Internet上了,所以这个数据包是能够通过NAT主机回送给我们的私有IP主机的。
这样一来,通过NAT机制,就成功实现了私有IP通过NAT主机去訪问Internet上的资源。
除此之外,NAT机制应用在client,能够隐藏client的IP。由此达到保护client主机免于Internet的攻击行为。以及节省公用IP的使用量。应用在server端,则能够保护server端主机在Internet上的安全。
(须要知道,其实。单靠NAT机制并非万能的。)
对于NAT,有两个名字须要了解:那就是SNAT和DNAT,依据上面的分析以及这个名字,我们非常easy得知。SNAT就是变更Source IP的机制。DNAT就是变更 Destination IP的机制。
NAT种类繁多。有一对一、多对多、一对多和NATP等四种。
从以下这张图能够看出,NAT机制出如今PREROUTING、OUTPUT和POSTROUTING这三个chain中
以下以下图NAT的结构为例。介绍NAT的完整结构,并解释每一个链的用途。
1、 PREROUTING
该链的位置在整个NAT机制的最前面,该链的功能在于运行DNAT的任务。因此在运行DNAT时,差点儿是数据包一旦进入NAT机制,数据包内的 “Destination IP” 即被改动,而这个顺序问题在整个防火墙的设置上是非常重要的。
2、POSTROUTING
该链的任务是改动数据包内的“来源端IP”。也就是说。该链的功能用于运行SNAT的任务。该链位于整个NAT机制的最末端,因此当我们运行SNAT操作时,Source IP是在整个NAT机制的最末端才会被改动的。
3、OUTPUT
当本机进程生成数据包并向外发送时,这个数据包会先交给路由表来判决路由,接着数据包进入OUTPUT链,最后进入POSTROUTING链,然后离开本机。这个数据包是不可能经过PREROUTING链,前面说到PREROUTING链的功能是运行DNAT的任务。也就是改动目的端IP,所以由本机进程生成的数据包,须要通过OUTPUT链,而这个OUTPUT链的功能就是运行DNAT的任务。
所以对于本机进程生成的数据包的DNAT规则是要放在OUTPUT链之内,而不是PREROUTING中。
关于NAT机制的分类。我们这里就不赘述了。后面我们将深入到Netfilter 源代码内部探索SNAT机制和DNAT机制。
參考资料:
《Linux网络安全技术与实现》
【Linux 驱动】Netfilter/iptables (八) Netfilter的NAT机制的更多相关文章
- 嵌入式Linux驱动笔记(十八)------浅析V4L2框架之ioctl【转】
转自:https://blog.csdn.net/Guet_Kite/article/details/78574781 权声明:本文为 风筝 博主原创文章,未经博主允许不得转载!!!!!!谢谢合作 h ...
- linux驱动学习(八) i2c驱动架构(史上最全) davinc dm368 i2c驱动分析【转】
转自:http://blog.csdn.net/ghostyu/article/details/8094049 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 预备知识 lin ...
- Netfilter/iptables防火墙
http://os.51cto.com/art/201107/273443.htm [51CTO独家特稿]Linux系统管理员们都接触过Netfilter/iptables,这是Linux系统自带的免 ...
- Linux 防火墙:Netfilter iptables
一.Netfilter 简介 (1) Netfilter 是 Linux 内置的一种防火墙机制,我们一般也称之为数据包过滤机制,而 iptables 只是操作 netfilter 的一个命令行工具(2 ...
- Linux中级之netfilter/iptables应用及补充
一.iptables介绍 Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常 ...
- iptables和netfilter
1.iptables和netfilter说明 [1]netfilter/iptables组成Linux平台下的包过滤防火墙,iptables是用户空间的管理工具,netfilter是内核空间的包处理框 ...
- netfilter/iptables 简介
netfilter 是 Linux 内置的一种防火墙机制,我们一般也称之为数据包过滤机制.iptables 则是一个命令行工具,用来配置 netfilter 防火墙.下图展示了一个带有防火墙的简单网络 ...
- IPTables 和 Netfilter 框架
前言 防火墙是保护服务器的重要工具. Linux中最常用的基本防火墙软件是iptables.iptables通过与Linux内核网络堆栈(networking stack)中的包过滤钩子(packet ...
- 深入理解 iptables 和 netfilter 架构
[译] 深入理解 iptables 和 netfilter 架构 Published at 2019-02-18 | Last Update 译者序 本文翻译自 2015 年的一篇英文博客 A Dee ...
随机推荐
- 现场故障-数据量超出plsql developer结果集导致应用程序无数据现象
情景重现: 维护人员想要用plsql developer工具查看一年前某表的数据,表中数据约30W行,因为此时无业务,维护人员关闭了应用程序.查询时选择了将所有数据所有列出,结果在显示到3W多行时,弹 ...
- 解决javamail ssl 测试unable to find valid certification path to requested target
运行 java InstallCert smtp.interdrp.com:465 得到jssecacerts文件后复制到jdk1.6.0_14\jre\lib\security目录 然后再发送邮件就 ...
- 苹果无法连接到itunes store怎么办
方法1:设置--还原--还原网络设置,再进app store就可以了.方法2:重置访问限制“设置”–> “通用” –> “访问限制”,开启访问限制5秒,然后再关闭访问限制.方法3:重置当前 ...
- MySql、Oracle、MSSQL中的字符串的拼接
字符串的拼接 1,Mysql 在Java.C#等编程语言中字符串的拼接可以通过加号“+”来实现,比如:"1"+"3"."a"+"b ...
- Android UI布局之LinearLayout
LinearLayout是Android中最经常使用的布局之中的一个.它将自己包括的子元素依照一个方向进行排列.方向有两种,水平或者竖直.这个方向能够通过设置android:orientation=& ...
- Binary Search Tree 以及一道 LeetCode 题目
一道LeetCode题目 今天刷一道LeetCode的题目,要求是这样的: Given a binary search tree and the lowest and highest boundari ...
- .NET零基础入门10:打老鼠之数据存储
一:数据库设计 到此为止,打老鼠游戏还不能保存每次游戏的成绩,我们今天完成的任务就是要存储成绩到SQLSERVER的数据库中. 在上节课中,我们已经知道了如何创建数据库,所有,先创建数据库" ...
- C# 程序设置开机启动(一)
一.示例使用VBScript创建启动文件,并添加到Windows系统的启动目录 默认情况下 所有用户启动目录:C:\ProgramData\Microsoft\Windows\Start Menu\P ...
- Hadoop + ZK + HBase 环境搭建
Hadoop 环境搭建 参考资料: http://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/ClusterSetu ...
- ubuntu 安装 android studio
总共分三个步骤: 安装JDK 这里引用下别人的安装过程http://blog.csdn.net/bhq2010/article/details/6839762 注:android studio 版本为 ...