iptables后,外网访问网站可以,内网无法访问已解决

Posted 技术颜良

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iptables后,外网访问网站可以,内网无法访问已解决相关的知识,希望对你有一定的参考价值。

  1. 最近,到处看到有人问这个问题,怎么以前没人问,现在这么多人问呢?前两天我还在华为的论坛上仔细的说了这个问题,现在复制到这边来。希望能帮助大家理解这个问题。    
  2.             这是个理论问题,我们先从NAT讲起:NAT有两种基本类型,一种是SNAT(Source   NAT),一种是DNAT(Dest.   NAT).SNAT即源NAT是改变数据包的IP层中的源IP地址,一般是用来将不合法的IP外出请求转换成合法的IP的外出请求,就是普通的用一个或者几个合法IP来带动一整个非法IP段接入。   DNAT即目的NAT,就是改变数据包的目标IP地址,使得能对数据包重新定向,可以用做负载均衡或者用于将外部的服务请求重定向到内网的非法IP的服务器上。      
  3.               好了,罗嗦了一通,大致就是这样了。   那么之所以会出现无法在DNAT的内部网络通过DNAT服务的外部IP地址来访问的情况,是因为,如果服务从内部请求,那么经过DNAT转换后,将目标 IP改写成内网的IP地址,譬如172.16.10.254,而请求的机器的IP是   172.16.10.100,数据包被网关172.16.10.1顺利的重定向到172.16.10.254的服务端口,然后,192.16.10.254根据请求发送回应给目的IP地址,就是172.16.10.100,但是,问题出现了,因为172.16.10.100请求的地址是外部IP   假设是221.232.34.56,所以他等待着221.232.34.56的回应,而172.16.10.254的回应请求被看做是非法的,被丢弃了。这就是问题的所在了。    
  4.               呵呵,写的有点混乱,不好意思。不知道大家明白没有.那么如何解决这个问题,我说个用iptables实现的例子,    
  5.           #我们先把发向外网IP221.232.34.56   80号端口的数据重定向到172.16.10.254   理论上来讲,如果只要从外网访问,这就完成了。    
  6.           iptables   -t   nat   -A   PREROUTING   -p   tcp   -d   221.232.34.56   --dport   80   -j   DNAT   --to-destination   172.16.10.254      
  7.           #解决内网通过外网IP访问的情况    
  8.           iptables   -t   nat   -A   POSTROUTING   -p   tcp   -d   172.16.10.254   --dport   80   -j   SNAT   --to-source   172.16.10.1    
  9.           我们将内网的请求强行送回到网关172.16.10.1,依靠网关在内核建立的状态表再转发到真实的请求地址172.16.10.100.    
  10.           当然,这并不是最好的解决方法,最好的解决方法是将服务器放在另外一个网段,也就是说所谓的DMZ(解除武装区),这样就不会出现上面所说的问题了。    
  11.           如果大家还不清楚,给个参考文档:    
  12.           http://iptables-tutorial.frozentux.net/iptables-tutorial.html#DNATTARGET   

以上是关于iptables后,外网访问网站可以,内网无法访问已解决的主要内容,如果未能解决你的问题,请参考以下文章

linux服务器上的网站 内网可以访问 外网无法访问

外网能访问,但是无法访问内网是怎么回事

Linux系统下的80端口公网无法访问。

nginx非80端口配置 外网无法访问

nginx非80端口配置 外网无法访问

关于内网用户访问外网ftp的问题:无法列出目录