免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2524 | 回复: 6
打印 上一主题 下一主题

[网络管理] 关于版主-精灵使提出的那经典问题请版主给出经典解决方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-16 15:38 |只看该作者 |倒序浏览
版主-精灵使在回“如何用iptables实现状态检测? ”的7楼提出了如下问题:

1、DNS服务器在网络外部,为对你的WWW访问提供解析。
2、WWW服务器在你的网络内部DMZ区中,并且是私有IP。
3、在LINUX网关上做了DNAT来转发外部的流量并且在出口上做SNAT带动私网上网。

问题:此时你内部的私网能够访问WWW服务吗?为什么?

我的环境也正是如此,只得在内网架设DNS服务器解决了解析的问题。盼望版主进一步阐明此问题的原因,以便兄弟没对iptables有一个更深的理解,并给出好的解决办法。期待~~~~~~~~

论坛徽章:
0
2 [报告]
发表于 2007-08-16 15:44 |只看该作者
1、DNS服务器在网络外部,为对你的WWW访问提供解析。
2、WWW服务器在你的网络内部DMZ区中,并且是私有IP。
3、在LINUX网关上做了DNAT来转发外部的流量并且在出口上做SNAT带动私网上网。

问题:此时你内部的私网能够访问WWW服务吗?为什么?

不一定,要看你第 3 步具体怎么做的

论坛徽章:
0
3 [报告]
发表于 2007-08-16 18:36 |只看该作者

回复 #2 platinum 的帖子

只知道全局做DNAT和在外网口上做DNAT这两种方式。请版主阐明具体做法,最好能结合实例。呵要求有点高版主勿怪。谢谢了

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
4 [报告]
发表于 2007-08-16 18:55 |只看该作者
我以前有一个帖子,说这个问题。现在我重发一遍:
看到论坛内很多弟兄做了DNAT,外网正常访问,内网却无法访问.现将原因总结如下:
设网络结构如下:

外网某机器为W1,路由器为R1,内网服务器为S1,内网某机器为C1,设服务为80
地址分布如下:
R1:外(eth0):192.168.0.5 内(eth1):192.168.1.254
S1:192.168.1.5
C1:192.168.1.8

原因如下:
外网为什么能成功:
当W1以某IP端口80访问R1的外网地址192.168.0.5时,数据包到达192.168.0.5的接口eth0,ROS根据DNAT规则做了到S1 192.168.1.5的转发,S1 192.168.1.5收到来自某IP的包后S1会发出正确的相应,此响应的目的IP为W1的IP,根据默认网关(R1的eth1)192.168.1.254规则把回应包发到R1,因为R1先前DNAT的关系(有DNAT的记录),R1回做一个反方向的NAT转发,从而数据包能够正确的到达W1,因此能够正确通信。
内网为什么不能成功:
1、        DNAT规则是针对eth0口配置的:
设R1的DNAT规则:iptables –t nat –A PREROUTING –i eth0 –p tcp –m tcp –d 192.168.0.5 –dport 80 –j DNAT –-to-destinstion 192.168.1.5
当C1以192.168.0.5为目的IP访问80服务的时候,数据包从192.168.1.254口传入,R1根据路由规则,会把目的192.168.0.5的地址直接送到上层接口,而不会经过R1为eth0接口配置的DNAT规则,那么此时192.168.0.5开了80服务了吗?很显然没有,因此无法访问。

2、        DNAT的规则是全局的:
设R1的DNAT规则:iptables –t nat –A PREROUTING –p tcp –m tcp –d 192.168.0.5 –dport 80 –j DNAT –-to-destinstion 192.168.1.5
当C1以192.168.0.5为目的IP访问80服务的时候,数据包从192.168.1.254口传入,R1根据DNAT规则会把此数据包DNAT到正确的S1服务器192.168.1.5,当S1收到包的时候S1会根据自己的路由表不经过R1的转发而会直接把数据发到C1,因为C1和S1是在同一个网络,这时候C1回收到S1的回应,按说此时应该能正常通信。但不幸的是我们忽略了源IP的问题。C1是把数据包发给的是R1的外网IP 192.168.0.5,而收到的IP的源地址却是S1的IP192.168.1.5,虽然数据包的除IP外所有的都是正确的,但C1仍然不会接受,会把这个包丢弃的。因此通信还是无法进行。

解决办法:
1、        从DNS入手,在内网设置自己的DNS,或者编辑client的hosts表把S1的地址不要解析成外网的IP,这样就变成内网的通信,还不占用ROS的带宽。这是我首推的方法。
2、        如果一定要走ROS,首先你要为每个可能进入的接口配置相应的DNAT策略,当然使用我上面举例的全局策略就完全可以的,那么我们下面应该如何设置呢?又有两种情况:
1)        如果可以把服务器放到一个单独的网段请你及时这样做。因为这样可以避免攻击,便于控制等等好处N多了。麻烦就是需要ROS多加一个网卡当然如果你配置多地址的话,网卡都可以省了,不过这么省不太好吧。当然还需要配置正确的SNAT。
2)        有些人说我就不能放到单独的网段,那我也有办法,这是我最不赞成的方法,就是请你删掉S1上到192.168.1.0网络的路由表项目,这样会强制S1到C1的数据包走R1,这样R1就可以实施相反的转换,当然也就可以正常通信了。
route del –net 192.168.1.0 netmask 255.255.255.0 gw * dev eth1

论坛徽章:
0
5 [报告]
发表于 2007-08-16 19:18 |只看该作者
這個問題不是很好解決嗎 ? 就是一條 POSTROUTING rule 搭配 MASQUERADE rule 即可

置頂內的 iptables faq 內也已經有提到解決方式, 這包含 netfilter NAT HOWTO 內也有提供解決方式.

dns 等方式雖然方便, 但是依據我個人實際經驗時有時候 client 端可能有機會配置使用其他 dns 導致查詢到外網 ip, 所以還是得考慮真的發生內網瀏覽 nat 該主機對外 ip 問題.


--

[ 本帖最后由 kenduest 于 2007-8-16 19:33 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2007-08-17 10:06 |只看该作者
哈哈,典型的三角TCP握手问题。。。做个MASQUERADE就OK啦

论坛徽章:
0
7 [报告]
发表于 2007-08-17 10:40 |只看该作者
好像直接加一个规则,内网地址访问,就用snat,改变成内网网关的ip,就ok了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP