【转载】通过iptables实现端口转发和内网共享上网
出处 http://blog51ctocom/wwdhks/1154032
作者张天成, zhangtiancheng@gmailcom
iptables操作的是24以上内核的netfilter,所以需要 linux的内核在24以上。其功能与安全性远远比其前辈 ipfwadm, ipchains强大,iptables大致是工作在OSI七层的二、三、四层,其前辈ipchains不能单独实现对tcp/udp port以及对mac地址的的定义与操作,所以我想ipchains应该是仅仅工作在三层的。
我们先简单介绍一下netfilter的大致工作流程,也就是一个数据包(或者叫分组、packet,我个人习惯叫包)在到达linux的网络接口的时候 (网卡)如何处理这个包,然后再介绍一下如何用iptables改变或者说控制对这个数据包进行操作。
netfilter内部分为三个表,分别是 filter,nat,mangle,每个表又有不同的操作链(Chains)。
下面有一张图清晰的描绘了netfilter对包的处理流程(该图摘自网上,不知作者是谁,在此深表敬意!),一般情况下,我们用不到这个mangle表,在这里我们就不做介绍了。
当一个包来到Linux的网络接口的时候先执行PREROUTING操作,依次经过mangle、nat的PREROUTING链。从这个Chain的名字我们可以看出,这个Chain是在路由之前(pre-routing)要过的。为什么要在路由之前过呢?因为在这个链里面我们对包的操作是DNAT,也就是改变目的地址和(或端口),通常用在端口转发(修改P
ort),或者NAT到内网的DMZ区(修改地址)。
环境配置如下:
我们怎么样能让Internet用户通过公网IP访问内部的web服务器呢? 在这个PREROUTING链上定义一个规则,把访问60111:80的用户的目的地址改变一下,改变为10112:80,这样就实现了internet用户对内网服务器的访问了。当然,这个端口是比较灵活的,我们可以定义任何一个端口的转发,不一定是80-->80。具 体的命令我们在下面的例子中介绍,这里我们只谈流程与概念上的实现方法。
好了,我们接着往下走,来到图中下方的那个菱形(FORWARD),转发!
默认情况下,当Linux收到了一个目的IP地址不是本地IP的包,Linux会把这个包丢弃。因为默认情况下,Linux的三层包转发功能是关闭的,如果要让我们的Linux实现转发,则需要打开这个转发功能,可以 改变它的一个系统参数,使用如下命令打开转发功能:
处理顺序上,依然是mangle优先、随后流经filter的FORWOARD链。我们操作任何一个链都会影响到这个包的命运,在 下面的介绍中,我们就忽略掉mangle表,我们基本用不到操作它,所以我们假设它是透明的。假设这个包被我们的规则放过去了,也就是ACCEPT了,它将进入POSTROUTING部分。
注意!这里我注意到一个细节问题,也就是上面的图中数据包过了FORWARD链之后直接进入了POSTROUITNG 链,我觉得这中间缺少一个环节,也就是ROUTING。对于转发的包来说,Linux同样需要在选路(路由)之后才能将它送出,这个图却没有标明这一点,我认为它是在过了ROUTING之后才进入的POSTROUITNG。当然了,这对于我们讨论iptables的过滤转发来说不是很重要,只是我觉得流程上有这个问题,还是要说明 一下。
POSTROUTING链是数据包要送出这台Linux的最后一个环节了,也是极其重要的一个环节。这个时候Linux已经完成了对这个包的路由(选路工作),已经找到了合适的接口送出这个包了,在这个链里面我们要进行重要的操作,就是被Linux称为 SNAT的一个动作,修改源IP地址!
为什么修改源IP地址?最常见的就是我们内网多台机器需要共享一个或几个公网IP访问 Internet。因为我们的内网地址是私有的,假如就让Linux给路由出去,源地址也不变,这个包能访问到目的地,但却回不来。因为 Internet上的路由节点不会转发私有地址的数据包,也就是说,不用合法IP,我们的数据包有去无回。
有人会说:“既然是这样,我就不用私有IP了,我自己分配自己合法的地址不行吗?那样包就会回来了吧?”。答案是否定的,IP地址是ICANN来分配的,Internet上的路由器会把这个返回包送到合法的IP去,你同样收不到。而你这种行为有可能被定义为一种ip欺骗,很多设备会把这样的包在接入端就给滤掉了。
那么Linux如何做SNAT 呢?环境配置如下:
当内网节点101112需要访问202222的web服务器,发送数据包时先路由到10111节点,随后(在10111节点配置SNAT)将源IP改为60111后送出。同时在ip_conntrack表里面做一个记录:内网的哪一个ip的哪个端口访问的这个web服务器,自己把它的源地址改成多少了,端口改成多少了,以便这个web服务器返回数据包的时候linux将它准确的送回给发送请求的这个pc
大体的数据转发流程我们说完了,我们看看iptables使用什么样的参数来完成这些操作。在描述这些具体的操作之前,我还要说几个我对iptables的概念的理解(未必完全正确),这将有助于大家理解这些规则,以实现更精确的控制。
上文中我们提到过,对包的控制是由我们在不同的Chain(链)上面添加不同的规则来实现的。那么既然叫链,一定就是一条或者多条规则组成的了,这时就有一个问题了,如果多个规则对同一种包进行了定义,会发生什么事情呢?
在Chain中,所有的规则都是从上向下来执行的,也就是说,如果匹配了第一行,那么就按照第一行的规则执行,一行一行的往下找,直到找到 符合这个类型的包的规则为止。如果找了一遍没有找到符合这个包的规则怎么办呢?iptables里面有一个概念,就是Policy(策略),如果找了一遍找不到符合处理这个包的规则,就按照policy来办。iptables 使用-P来设置Chain的策略。
对链的操作就那么几种:
比如我们要添加一个规则到filter表的FORWARD链:
在iptables中,默认的表名就是filter,所以这里可以省略-t filter直接写成:
iptables中的匹配参数: 我们在这里就介绍几种常用的参数,详细地用法可以man iptables看它的联机文档,你会有意外的收获。
环境信息:
或者使用如下命令
配置完成,在内网节点(19216823472)发起的服务器节点(8123473)请求,会由外网节点修改源ip后转发出去。
在8123473上启动nginx服务,在19216823472上通过curl访问效果如下:
可以将上述配置写到一个文件中,以便重复执行。
除此之外,也可以精确控制他的访问地址,比如我就允许101199访问3333这个ip
或者只允许他们访问80端口
更多的控制可以自己灵活去做,或者查阅iptables的联机文档。
环境信息:
确保服务监听的是ip是内网ip
或者使用如下命令
同样,可以将这部分配置放到一个文件中:
OK,至此配置完成,我们可以尝试在外网节点(8123473)上,通过网关节点(8123471)访问内网(19216823472)提供的服务(80端口)。
在前面的配置中,内网节点将互通的外网节点做为网关,由网关节点修改目的地址,源地址保持不变。其实,还存在另外一种配置方式,同时修改源地址、目的地址。将内网地址中的默认路由配置删除
增加一个SNAT配置
这条命令不太好懂?其实很简单,如果使用这条命令,那么你的web server不需要再设置默认网关,就能收到这个请求,只要他和linux的lan ip地址是能互访的(也就是说web server和Linux的Lan ip在一个广播域)。我们在根据上面的netfilter流程图来分析这个包到底被我们怎么样了:
修改目的地址,于是这个包变成了8123473:1333-->19216823472:80。
进入route box选路,找到合适路径,此时这个包依旧是8123473:1333-->19216823472:80。
原来是一个SNAT,改你的源地址,于是这个包变成了19216823471:xxxx(随机端口)-->19216823472:80。
看了上面的两个例子,不知道大家是否清楚了iptables的转发流程,希望对大家有所帮助。
下面来讲前面提到的ESTABLISHED,RELATED规则是怎么回事,到底有什么用处。
我们知道,网络的访问是双向的,也就是说一个Client与Server之间完成数据交换需要双方的发包与收包。在netfilter中,有几种状态,也就是New, Established,Related,Invalid。
当一个客户端,在本文例一中,内网的一台机器访问外网,我们设置了规则允许他出去,但是没有设置允许回来的规则啊,怎么完成访问呢?这就是netfilter的 状态机制 ,当一个Lan用户通过这个Linux访问外网的时候,它发送了一个请求包,这个包的状态是New(配置了内网IP的转发规则,放行)。当外网回包的时候他的状态就是Established,所以,Linux知道,哦,这个包是我的内网的一台机器发出去的应答包,他就放行了。
而外网试图对内发起一个新的连接的时候,他的状态是New,所以Linux压根不去理会它。这就是我们为什么要加这一句的原因。
还有那个Related,他是一个关联状态,什么会用到呢?sftp、ftp都会用到,因为他们的传输机制决定了,它不像http访问那样,Client_IP: port-->Server:80然后server:80-->Client_IP:port,ftp使用tcp21建立连接,使用20端口发送数据,其中又有两种方式,一种主动active mode,一种被动passive mode。主动模式下,client使用port命令告诉server我用哪一个端口接受数据,然后server主动发起对这个端口的请求。被动模式下,server使用port命令告诉客户端,它用那个端口监听,然后客户端发起对他的数据传输,所以这对于一个防火墙来说就是比较麻烦的事情,因为有可能会有New状态的数据包,但是它又是合理的请求,这个时候就用到这个Related状态了,他就是一种关联,在linux中,有个叫 ftp_conntrack的模块,它能识别port命令,然后对相应的端口进行放行。
对了,还有几个在实际中比较实用(也比较受用:-))的命令参数,写出来供大家参考
你的配置应该是正确的。但是有一些事情可能会导致源地址转换规则无效:
如果有其他的防火墙规则在 POSTROUTING 链上,那么这些规则可能会覆盖你的源地址转换规则。你可以尝试将你的源地址转换规则放在最后,以确保它是最后一个被应用的规则。
你可能需要设置主机的内核转发功能,以便转发数据包。你可以使用下面的命令来设置内核转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
如果你的主机正在运行其他的防火墙程序,比如 iptables-persistent 或 firewalld,那么这些程序可能会忽略你在 iptables 中设置的规则。你可以尝试停止这些程序,然后再尝试转发数据包。
如果你正在使用路由器,那么它可能会忽略你在主机上设置的规则,并将数据包转发回主机。你可以尝试在路由器上设置转发规则,或者将主机设置为路由器的 DMZ 主机,这样它就可以直接接收所有的数据包。
你的服务器可能正在运行 NAT 功能,导致源地址转换规则无效。你可以尝试关闭 NAT 功能,然后再尝试转发数据包。
如果你的服务器正在运行 V/P/N,那么 它 可能会更改数据包的源地址,导致你的源地址转换规则无效。你可以尝试关闭它,然后再尝试转发数据包。
最后,你可能需要在处理数据的服务器上检查防火墙规则是否有阻止数据包的规则。
希望这些建议能帮助你解决问题。如果你还有其他问题,请继续提问,我会尽力帮助你。
arcgis地理数据库文件可以转发。
打开arcmap软件,选择并打开gisdata文件下的oregon文件夹,选择oregongdatamdb打开,选择gtoposhd栅格并打开,打开orstationsxls,进一步查看字段和属性2设置坐标系统:在ArcMap中右键点击表名,选择Display。
ArcGIS 9所包含的三种服务端产品:
ArcSDE――一个在多种关系型数据库管理系统中管理地理信息的高级空间数据服务器。ArcSDE是一个位于ArcGIS其它软件产品和关系型数据库之间的数据服务器,其广泛的应用使得在跨任何网络的多个用户群体中共享空间数据库以及在任意大小的数据级别中伸缩成为可能。
ArcIMS――是一个可伸缩的,通过开放的Internet协议进行GIS地图,数据和元数据发布的地图服务器。ArcIMS已经在成千上万的应用中部署了,主要是为Web上的用户提供数据分发服务和地图服务。
蓝牙网关是一个集成蓝牙和Wi-Fi的网关设备,该设备主要用于iBeacon设备的远程云管理,简单来说就是一个用于iBeacon设备的扫描管理设备。
由于蓝牙网关是集成了蓝牙与Wi-Fi的网关设备,即蓝牙模块扫描设备并获取数据,Wi-Fi模块获取扫描数据再通过网将数据上传到服务器端,详细的说就是蓝牙模块扫描其信号覆盖范围内的iBeacon设备并且获取到被扫描的设备的数据,再通过蓝牙与Wi-Fi的串口将扫描到的设备通过网络把数据提交到服务器端,服务器端显示并管理这些扫描到的设备。
蓝牙网关最常用的功能就是进行反向定位,反向定位是利用蓝牙网关将扫描到的蓝牙数据通过网络上传到云端服务器上,并且利用了蓝牙扫描到的Beacon设备数据中的RSSI,然后在后台通过这个RSSI值能够确定iBeacon设备与蓝牙网关的距离或者范围,实现位置追踪的目的,并在后台地图实时展示Beacon设备位置。
同时,还可以将蓝牙网关的扫描范围标记为安全区域,一旦iBeacon设备离开安全范围,便能触发后台的安全报警。这就是实现安全看护和人员物资管理的关键。
花生壳端口映射如何配置
浏览:5
|
更新:
2014-10-04 10:39
代替路由映射的端口映射应用有花生壳、nat123、金万维等。内网发布网站或其他应用到外网访问,且本地无公网IP,或80端口被屏蔽,对于这些环境,就需要利用端口映射应用网络辅助。
端口映射应用原理:映射转发,或映射穿透。目的都是为了让外网可以正常访问。
花生壳端口映射原理:完全转发。通过转发服务器进行数据转发实现。速度完全取决于转发服务器网络线路,及转发服务器提供真正带宽大小。不支持https和udp。
nat123端口映射原理:80穿透、全端口映射p2p穿透、一般应用映射转发。不同的映射应用实现方式不一。解决80端口问题,可以使用80穿透,穿透后,可以配置本地公网IP加速,让网站加载直接走本地IP,发挥本地带宽优势,网站速度由本地带宽决定。全端口映射p2p是点到点的通信,速度由二点网络间通信速度决定,建立通信连接后,数据不经转发,即不限速度。
金万维端口映射原理:完全转发。且不支持80端口应用转发。
花生壳端口映射实现过程:
1,激活端口映射资格。可以每天抢资格,或直接花费开通。
2,添加界面时,使用内网映射。
3,添加映射,将内网地址映射到外网。
4,映射后,通过域名进行访问。域名可以是默认提供的随机二级域名,或将自己的域名转入解析后使用自己的域名。
nat123端口映射实现过程:
1,内网使用,并添加映射。可以使用80映射,或https映射,或全端口映射,或非网站应用映射,等,根据本地应用选择映射类型。
2,选择映射线路。默认是开放的免费线路。如有购买使用VIP线路,可以进行自助切换。
3,配置内网地址映射到外网域名。域名可以是自己的域名,或默认提示的自定义二级域名。
4,映射后,通过域名即可进行访问连接。
5,如本地有公网IP,只是为了解决80端口问题,可以配置下本地公网IP加速,发挥本地带宽优势。如本地上行带宽小,可以使用网站加速专用线路,提升网站访问速度
http://jingyanbaiducom/article/fd8044fae9d2b65030137a5ahtml
0条评论