好的高端网站,项目营销推广策划,企业做网站要注意哪些,新莱芜客户端这个问题#xff0c;困扰了我几年了#xff0c;今天终于得到解决。
问题是这样的#xff0c;在局域网内部有一台服务器#xff0c;通过IPTABLES的网关提供对外服务#xff0c;做过IPTABLES网关的人都知道#xff0c;这很容易做到#xff0c;只要在网关机器上写一个DNAT…这个问题困扰了我几年了今天终于得到解决。
问题是这样的在局域网内部有一台服务器通过IPTABLES的网关提供对外服务做过IPTABLES网关的人都知道这很容易做到只要在网关机器上写一个DNAT的地址转换即可。但是如果是内部机器去访问网关的外部地址则访问不了了解决之道是内网的机器要么在内部建立一个DNS服务器为那太服务器提供DNS解析要么在要访问的机器上设置hosts。但这两个解决方法都没涉及到IPTABLES不是根本的解决之道。有的时候这种解决之道还不一定能实现实际需求。
要解决这个问题首先要分析为何在内网访问不了
首先你可能在网关上做了一个DNAT iptables -t nat -A PREROUTING -d $InternetIp -p tcp --dport 8000 -j DNAT --to-destination 192.168.0.13:80
也就是访问网关的$InternetIp地址的时候会转换地址到192.168.0.13
现在当一台局域网内的机器如192.168.0.51访问 $InternetIp的8000端口时网关机器发现应该转换到192.168.0.13的80端口。服务器192.168.0.13接收到该请求时发现请求的机器来自局域网内192.168.0.51因此就直接发送响应给局域网内机器(192.168.0.51).问题就在了局域网内的机器是把请求发送给网关的$InternetIp地址并没有发送给内部服务器192.168.0.13所以这个包是不期望的会把它丢掉。
那到底该怎么做呢那台内部机器192.168.0.51如果得到从网关的响应包那局域网内部机器192.168.0.51就会认为这个包是它应该得到的响应包了因为是发送给网关的
所以只要在网关机器上再做一个SNAT就解决了请看下面的
iptables -t nat -A POSTROUTING -d 192.168.0.13 -s 192.168.0.0/24 -p tcp --dport 80 -j SNAT --to-source 192.168.0.1