Chinaunix

标题: linux nat 和web server同在一个ROUTER下,访问WEB SERVER的问题,求高人 [打印本页]

作者: ybbnew    时间: 2006-09-13 17:25
标题: linux nat 和web server同在一个ROUTER下,访问WEB SERVER的问题,求高人
如图的一个网络结构,WEB SERVER和我的LINUX SERVER都挂在同一个路由器下,且路由器上只有一个公网IP,web server为192.168.150.8  linux server 为172.168.0.1 linux server主要是充当网关功能,下面的机器全部通过我的Linux server再通过路由器访问外网。WEB SERVER则通过路由器分配的地址直接到外面,路由器上做了映射,可以转到192.168.150.8的80上。
  现在主要问题是,我LINUX NAT下的PC 无法在浏览器上访问这个路由器下的web server(直接用www.xxx.com),WEB SERVER做好了域名解析了,解析到路由器的公网IP。但我在PC上ping www.xxx.com能通,nslookup 也行。

不知道怎么回事,我怀疑是不是WEB SERVER和我的LINUX NAT 是同一个公网出口,PC的数据包能出去,但回不来了,不知道回哪去了???

求高人帮忙!!

结构图.jpg (37.08 KB, 下载次数: 77)

结构图

结构图

作者: net_robber    时间: 2006-09-13 17:28
相关信息提供的太少了,无法回答
作者: net_robber    时间: 2006-09-13 17:35
楼主能否提供更加详细的资料呢???
作者: ybbnew    时间: 2006-09-13 17:35
啊,比如190.168.0.x的电脑访问www.xxx.com(为我的web server的域名,当然也是指向到路由器的公网IP)时显示无法访问该页面.
作者: ybbnew    时间: 2006-09-13 17:41
谢谢,net_robber,还需要什么资料?
作者: 独孤九贱    时间: 2006-09-13 17:42
原帖由 ybbnew 于 2006-9-13 17:25 发表
如图的一个网络结构,WEB SERVER和我的LINUX SERVER都挂在同一个路由器下,且路由器上只有一个公网IP,web server为192.168.150.8  linux server 为172.168.0.1 linux server主要是充当网关功能,下面的机器全部通 ...


当然不行了,你只能用私网IP去访问啦,自己做个hosts或者DNS吧……

用公网IP也是可行的,只是要在源地址转换和目标地址转换上下功夫,三弯九倒拐,还不如用第一种……
作者: ybbnew    时间: 2006-09-13 17:43
linux nat 上用iptables做了转发了,linux nat下的PC访问其它任何网页都可以,就是无法访问路由器下的web server,郁闷
作者: ybbnew    时间: 2006-09-13 17:46
可是就是要用访问公网的啊,源地址转换和目标地址转换下了一点功夫了,还是不行,求达人指点啊!!
作者: skylove    时间: 2006-09-13 18:58
加2条

当源地址为内网,对网关机外网ip ,dport 为80访问的请求时,DNAT 方式自动转到 内网ip那台机器的80口;(这条可能不一定必须要做,因为和前面的 外部访问内部这web重复)
当源地址为内网,对网关机外网ip ,dport 为80访问的请求时,SNAT 方式设置发起地址为网关机的内网ip

其实很好理解的: 根据tcp的三次握手。。。如果只做了dnat,那么web在返回时候,是直接朝客户机丢回应的,而这个时候,内网客户机会觉得很莫名其妙——我从来没有朝内网的web主机发过包呀,肯定是欺骗,丢掉~!!!  所以就造成了楼主的情形

按照我说的设置一下吧。。。dnat那条你可以先设置起,调试好了再试着取消掉(或许可以取掉的,因为你针对外网访问你的web那里也有条dnat,或许可以通用),snat那条是必须设的!!!!! (顺带一提,如果网关和内网之间有桥方式的第三方firewall,还必须在桥上允许才行)

[ 本帖最后由 skylove 于 2006-9-13 18:59 编辑 ]
作者: lecjone    时间: 2006-09-13 20:58
对web服务器所有的80端口的数据都作snat
应该就可以了吧?
作者: 河里的鱼    时间: 2006-09-13 21:53
原帖由 skylove 于 2006-9-13 18:58 发表
加2条

当源地址为内网,对网关机外网ip ,dport 为80访问的请求时,DNAT 方式自动转到 内网ip那台机器的80口;(这条可能不一定必须要做,因为和前面的 外部访问内部这web重复)
当源地址为内网,对网关机外网 ...



好像在ROUTE上加一条就可以了吧

从LINUX NAT过来的包,访问WWW的80的,直接将目地的地址切到WWW上不就可以了吗?

同进考虑一下回来的,源地址是LINUX NAT的地址,WWW上走到ROUTE,然后ROUTE有对应的tables就可以了
作者: skylove    时间: 2006-09-14 00:20
原帖由 河里的鱼 于 2006-9-13 21:53 发表



好像在ROUTE上加一条就可以了吧

从LINUX NAT过来的包,访问WWW的80的,直接将目地的地址切到WWW上不就可以了吗?

同进考虑一下回来的,源地址是LINUX NAT的地址,WWW上走到ROUTE,然后ROUTE有对应的tables就 ...


从道理上来说,是dnat和snat 需要同时做,我之前说做2条,是为了帮助这位朋友整理思路。 由于snat可以将内部访问/外部访问的时候一起做,所以自然可以只增加一条。 但是要明确的原理依然是 snat和dnat都要做,lz之所以不通,就是由于snat的缘故
作者: wx2008    时间: 2006-09-14 09:08
我认为可以这样解决
就是以前linux数据包回流过程
第一,不知道你的linux nat  能不能直接访问192.168.150.8  如不能加条静态路由  使其能互访问
第二,查web的外问地址(就是dns解析的地址,假设为a.b.c.d),在 linux nat 上做条DNAT 把访问a.b.c.d 都转到192.168.150.8上
作者: 河里的鱼    时间: 2006-09-14 09:39
原帖由 skylove 于 2006-9-14 00:20 发表


从道理上来说,是dnat和snat 需要同时做,我之前说做2条,是为了帮助这位朋友整理思路。 由于snat可以将内部访问/外部访问的时候一起做,所以自然可以只增加一条。 但是要明确的原理依然是 snat和dnat都要做, ...



道理上是需要两条,数据来回必须指定
作者: net_robber    时间: 2006-09-14 10:57
你可以把你的iptables的配置脚本贴上来,

我看看,然后帮你添加你想要的,你对比一下看看好么???
作者: net_robber    时间: 2006-09-15 09:49
怎么已经解决了么?????


解决要记得总结,以便后人查阅!!
作者: ybbnew    时间: 2006-09-15 18:04
不好意思,前两天出差了!环境在用户那边,找个时间我会继续测试!并告知结果。
dnat ,snat我都加了的。
再次谢谢大家!
作者: maxlu    时间: 2006-09-28 10:11
抓些包看看吧,,,,,首先要知道问题出在什么地方,,,,




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2