LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: diekiss

做NAT后如何获得从外网访问的真实IP?

[复制链接]
发表于 2005-10-27 21:31:53 | 显示全部楼层
~!   好~~~~~
            终于明白了 为什么要第三条~!!!!   受教了  谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-28 23:48:29 | 显示全部楼层
谢谢大家那么热心的帮助,我这里说明一点,就是内网用户不需要用 www.xxxxx.com 去访问 OA, 只需要用 http://10.168.172.242 去访问就可以了。
并且内网用户也不一定通过 10.168.172.254 访问互联网的,他们还有别的出口可以使用。
因此可以互联我第一贴中的第一条规则(用作内网用户共享上网)

虽然可以在DNS设置 www.xxxxxx.com 指向的端口为 8080,但是我还是不想这样做。互联网端口也采用默认 80 的话,比较自然。
由于我单位内部网络所有计算机都是用 10.168.172.1 作为网关的,所以不存在内网访问OA服务器困难的问题,所以我将焦点放在 如何通过互联网 www.xxxxx.com 访问内网OA服务器。
回复 支持 反对

使用道具 举报

发表于 2005-10-29 11:34:02 | 显示全部楼层
Post by diekiss
谢谢大家那么热心的帮助,我这里说明一点,就是内网用户不需要用 www.xxxxx.com 去访问 OA, 只需要用 http://10.168.172.242 去访问就可以了。
并且内网用户也不一定通过 10.168.172.254 访问互联网的,他们还有别的出口可以使用。
因此可以互联我第一贴中的第一条规则(用作内网用户共享上网)

虽然可以在DNS设置 www.xxxxxx.com 指向的端口为 8080,但是我还是不想这样做。互联网端口也采用默认 80 的话,比较自然。
由于我单位内部网络所有计算机都是用 10.168.172.1 作为网关的,所以不存在内网访问OA服务器困难的问题,所以我将焦点放在 如何通过互联网 www.xxxxx.com 访问内网OA服务器。


无语。。。

解释:

内网用户使用内网IP访问,直接删除第三条就OK了

用8080我只是作个例子,说明这个是可以实现的,我机器的80端口有其他业务,不能用。。。

具体情况要具体分析,可能有些很小的配置你认为是不重要的,但实际却是很关键的地方,你没有提到,所以从你的帖子中看不出问题
你下的结论是不可能实现,而实事是可以实现的,所以我才去弄了一个example来证明,不代表这个example就可以解决你的问题

因为你没有说明:
Post by diekiss
并且内网用户也不一定通过 10.168.172.254 访问互联网的,他们还有别的出口可以使用。

所以大家都再疑惑中。。。

因为是多出口,如果不通,那肯定就是来回的路径不一致了,和上面的内网用户访问www.xxx.com一个效果

个人意见:
多多使用ethereal or tcpdump看看收发数据包的流向
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-30 22:41:43 | 显示全部楼层
对不起,我是新手,可能表述得不清楚。
最后的问题还是我的帖子题目。
至于内网用户怎么访问互联网大家不必去操心了,甚至我禁止他们上互联网也没有问题的。
或者是我交代的情况没有说中重点……

焦点应该是:互联网上的用户如何访问内网的Web服务器,并且该服务器可以记录互联网访问者的真实IP。——这就是我第一贴的主要问题。

上面各位说的,我在家里SSH上去服务器都做过调试,包括各位给的例子,
端口8080是示范性质的我也知道。只不过如此这般,最后连OA服务器都访问不到了。

至于wenzk说的两个命令,我要找找文档才行,重复一遍,我是Linux新手,很新那种。相信大家也有过当新手的时候。呵呵。
大家的热心,先谢过先。
回复 支持 反对

使用道具 举报

发表于 2005-11-8 22:15:41 | 显示全部楼层
# eth0 = 10.168.172.254 (内网)
# eth1 = 61.143.A.B (互联网IP)
# eth1:0 = 61.143.A.C (互联网IP)(跟上面的eth1同一个网卡)
# 上述已经设置好,可用。
#
# 操作目标:
# 1.使得内网的计算机的网关用 10.168.172.254 就能访问互联网,浏览网页、上QQ等;
# 2.使得互联网上的用户输入 61.143.A.C 或 www.xxxxxx.com (指向61.143.A.C) 就能访问内网的OA服务器,并且被web识别真实IP(即通过互联网访问时候,web服务器得到客户端的IP不是10.168.172.254而是客户端的互联网IP


# 允许转发

echo 1 > /proc/sys/net/ipv4/ip_forward

============================
分析:
10.168.172.242是内网的OA服务器(需要对外提供服务,以61.143.A.C的地址)
10.168.172.0/24是内网

首先必须对OA服务器进行SNAT
iptables -t nat -A POSTROUTING -s 10.168.172.242 -j SNAT --to-source 61.143.A.C
然后对OA服务器进行DNAT
iptables -t nat -A PREROUTING -d 61.143.A.C -p tcp --dport 80 -j DNAT --to- destination 10.168.172.242
这样做,保证OA服务器对外时以61.143.A.C的身份出现,而外网访问61.143.A.C的80端口时将定向到OA服务器

# 共享一个Internet连接 针对 61.143.A.B
iptables -t nat -A POSTROUTING -s 10.168.172.0/24 -j SNAT --to-source 61.143.A.B

因为netfilter执行时是按照顺序执行的,所以必须先对OA服务器做SNAT,然后再对其他的机器做SNAT

这么设置规则后,内网用户将不能以61.143.A.C的地址访问OA服务器。
回复 支持 反对

使用道具 举报

发表于 2005-11-8 22:30:54 | 显示全部楼层
Post by diekiss
OA的网关是 10.168.172.1 而不是 10.168.172.254。 OA本身访问网络是没有问题的,在OA服务器上可以访问自己、内网上其他机器、互联网。

OA上也没有安装任何防火墙软件或者做iptables之类的规则(OA是Windows2000服务器上的)。鉴于《Iptables 指南1.1.19》中说这种情况不能取得真实的IP,我打算放弃这种想法。


OA服务器访问互联网时traceroute是否经过10.168.172.254,如果不经过的话,就不可能通过nat的方式实现了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表