LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 14053|回复: 11

网内用公网地址不能访问内网服务

[复制链接]
发表于 2007-1-22 19:39:34 | 显示全部楼层 |阅读模式
NAT中端口指向我Windows的服务器, 内网机子利用公网IP不能访问. 但外网可以访问进来.
我的NAT设置如下:

*nat
REROUTING ACCEPT [32358:4429150]
OSTROUTING ACCEPT [4057:589498]
:OUTPUT ACCEPT [4057:589498]
-A PREROUTING -i eth1 -p tcp -s 192.168.0.0/24 --dport 80 -j REDIRECT --to-port 3128
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.8:80  # Web服务
-A PREROUTING -i eth0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.8:3389  # 远程桌面控制
-A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 202.104.*.*
COMMIT

请问大虾们, 该如何解决???
谢谢!!
发表于 2007-1-23 12:43:38 | 显示全部楼层
Post by Eric_DZT
NAT中端口指向我Windows的服务器, 内网机子利用公网IP不能访问. 但外网可以访问进来.
我的NAT设置如下:

*nat
REROUTING ACCEPT [32358:4429150]
OSTROUTING ACCEPT [4057:589498]
:OUTPUT ACCEPT [4057:589498]
-A PREROUTING -i eth1 -p tcp -s 192.168.0.0/24 --dport 80 -j REDIRECT --to-port 3128
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.8:80  # Web服务
-A PREROUTING -i eth0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.8:3389  # 远程桌面控制
-A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 202.104.*.*
COMMIT

请问大虾们, 该如何解决???
谢谢!!

在后面增加四条,试试看,假定192.168.0.1为你的Linux机器的内网ip地址
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.8:80  # Web服务
-A PREROUTING -i eth1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.8:3389  # 远程桌面控制
-A POSTROUTING -o eth1 -p tcp -d 192.168.0.8 --dport 80 -j SNAT --to-source 192.168.0.1
-A POSTROUTING -o eth1 -p tcp -d 192.168.0.8 --dport 3389 -j SNAT --to-source 192.168.0.1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-23 19:51:05 | 显示全部楼层
drem3401

-A PREROUTING -i eth1 -p tcp -s 192.168.0.0/24 --dport 80 -j REDIRECT --to-port 3128
因为我做了透明代理, 所以你下面所加的都无效.
-A PREROUTING -i eth1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.8:3389
-A POSTROUTING -o eth1 -p tcp -d 192.168.0.8 --dport 3389 -j SNAT --to-source 192.168.0.1
内网所出的3389连接都会连接到192.168.0.8, 无论你输入什么IP(内网IP除外).

结果: 不可行!!
回复 支持 反对

使用道具 举报

发表于 2007-1-24 10:30:47 | 显示全部楼层
Post by Eric_DZT
drem3401

-A PREROUTING -i eth1 -p tcp -s 192.168.0.0/24 --dport 80 -j REDIRECT --to-port 3128
因为我做了透明代理, 所以你下面所加的都无效.
-A PREROUTING -i eth1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.8:3389
-A POSTROUTING -o eth1 -p tcp -d 192.168.0.8 --dport 3389 -j SNAT --to-source 192.168.0.1
内网所出的3389连接都会连接到192.168.0.8, 无论你输入什么IP(内网IP除外).

结果: 不可行!!

没有看到你做了透明代理,也不知道内网还要联别的3389端口(原来以为只有一个机器的3389端口),那再改一下试试(加一个目标地址为公网ip的限定)
-A PREROUTING -i eth1 -p tcp -s 192.168.0.0/24 -d ! 公网ip --dport 80 -j REDIRECT --to-port 3128 (改透明代理,让到外网的WEB请求重定向,除了到本机公网ip的WEB请求外)


-A PREROUTING -i eth1 -p tcp -m tcp -d 公网ip --dport 80 -j DNAT --to-destination 192.168.0.8:80 # Web服务(来自内网到本机公网ip的WEB请求重定向)
-A PREROUTING -i eth1 -p tcp -m tcp -d 公网ip --dport 3389 -j DNAT --to-destination 192.168.0.8:3389 # 远程桌面控制(来自内网到本机公网ip的3389请求重定向)
-A POSTROUTING -o eth1 -p tcp -d 192.168.0.8 --dport 80 -j SNAT --to-source 192.168.0.1
-A POSTROUTING -o eth1 -p tcp -d 192.168.0.8 --dport 3389 -j SNAT --to-source 192.168.0.1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-24 19:52:12 | 显示全部楼层
多谢 dream3401兄, 我的问题算是解决了!!
不知道是否有多余的语句? *nat中的语句如下:

-A PREROUTING -i eth1 -p tcp -m tcp -d 202.104.*.* --dport 80 -j DNAT --to-destination 192.168.0.8:80  
-A PREROUTING -i eth1 -p tcp -s 192.168.0.0/24 --dport 80 -j REDIRECT --to-port 3128  
-A PREROUTING -i eth1 -p tcp -m tcp -d 202.104.*.* --dport 3389 -j DNAT --to-destination 192.168.0.8:3389  
-A POSTROUTING -o eth1 -p tcp -d 192.168.0.8 --dport 80 -j SNAT --to-source 192.168.0.1
-A POSTROUTING -o eth1 -p tcp -d 192.168.0.8 --dport 3389 -j SNAT --to-source 192.168.0.1
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.8:80
-A PREROUTING -i eth0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.8:3389
-A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 202.104.*.*
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-24 19:57:40 | 显示全部楼层
dream3401兄, 你的回答中, POSTROUTING的两句具体怎么解释?! 请赐教!!

-A POSTROUTING -o eth1 -p tcp -d 192.168.0.8 --dport 80 -j SNAT --to-source 192.168.0.1
-A POSTROUTING -o eth1 -p tcp -d 192.168.0.8 --dport 3389 -j SNAT --to-source 192.168.0.1
回复 支持 反对

使用道具 举报

发表于 2007-1-24 21:24:53 | 显示全部楼层
Post by Eric_DZT
dream3401兄, 你的回答中, POSTROUTING的两句具体怎么解释?! 请赐教!!

-A POSTROUTING -o eth1 -p tcp -d 192.168.0.8 --dport 80 -j SNAT --to-source 192.168.0.1
-A POSTROUTING -o eth1 -p tcp -d 192.168.0.8 --dport 3389 -j SNAT --to-source 192.168.0.1

-A POSTROUTING -o eth1 -p tcp -d 192.168.0.8 --dport 80 -j SNAT --to-source 192.168.0.1
如果不加这一句,数据流是这样的:
数据包(内网ip:端口-->公网ip:80)经过前面的PREROUTING会变成数据包(内网ip端口-->192.168.0.8:80),经过路由数据包到达192.168.0.8,192.168.0.8收到WEB请求数据包,产生回复数据包(192.168.0.8:80-->内网ip:端口),这个回复数据包的目标地址由于是内网的ip,所以会直接到达内网机器,而不会走服务器(两个接口:192.168.0.1和公网ip);而由于内网的机器WEB请求数据包是与服务器(公网ip)建立tcp联结的,所以当收到来自192.168.0.8的回复数据包时会自动丢弃(不是我要的,干嘛给我?呵呵),从来TCP联结无法实现.
如果加了这一句,就会在数据包离开服务器时把源地址(内网的ip地址)变成服务器的ip地址(这里是192.168.0.1),这样192.168.0.8收到的WEB请求的数据包的源地址变成了服务器的ip地址,这样192.168.0.8的回复数据包会先回到服务器,然后经过NAT反过程,再路由到内网机器(这时回复数据包的源地址已经变成了服务器的公网ip),从而内网机器被欺骗(它一直以为是与服务器在建立WEB联结),这样完成TCP数据交换的过程.
希望我清楚的表达了我的想法,呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-25 15:38:48 | 显示全部楼层
dream3401兄,  
上面所做的规则可否去掉 -i ethX 这个参数呢?! 因为工作时间服务器在动作, 没有尝试, 有时间我都会试试, 是否可行.

-A PREROUTING -p tcp -d 202.104.*.*(公网IP) --dport 3389 -j DNAT --to-destination 192.168.0.8
回复 支持 反对

使用道具 举报

发表于 2007-1-25 16:03:28 | 显示全部楼层
Post by Eric_DZT
dream3401兄,  
上面所做的规则可否去掉 -i ethX 这个参数呢?! 因为工作时间服务器在动作, 没有尝试, 有时间我都会试试, 是否可行.

-A PREROUTING -p tcp -d 202.104.*.*(公网IP) --dport 3389 -j DNAT --to-destination 192.168.0.8

加-i ethX参数主要也是为了区别不同的数据包(来自内网和来自公网),从而产生不同的动作,如果不需要区别也可以不加(这要看你的数据包的具体走向).
-A PREROUTING -p tcp -d 202.104.*.*(公网IP) --dport 3389 -j DNAT --to-destination 192.168.0.8(比如这个不管数据包来自于公网还是内网,只要试图联接本机公网ip的3389端口都重定向到192.168.0.8)
对了,你可以写成一个脚本,这样服务器工作时间也可以修改脚本,然后运行脚本,不会影响服务器的运转
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-25 19:30:45 | 显示全部楼层
Post by dream3401
加-i ethX参数主要也是为了区别不同的数据包(来自内网和来自公网),从而产生不同的动作,如果不需要区别也可以不加(这要看你的数据包的具体走向).
-A PREROUTING -p tcp -d 202.104.*.*(公网IP) --dport 3389 -j DNAT --to-destination 192.168.0.8(比如这个不管数据包来自于公网还是内网,只要试图联接本机公网ip的3389端口都重定向到192.168.0.8)
对了,你可以写成一个脚本,这样服务器工作时间也可以修改脚本,然后运行脚本,不会影响服务器的运转

1)
我都觉得可以, 但刚才试过了, 不行! 80全指向我的192.168.0.8的WEB服务了, 3389也全指向了192.168.0.8上了.
-A PREROUTING -p tcp -d 202.104.*.*(公网IP) --dport 3389 -j DNAT --to-destination 192.168.0.8  
中的 -d 202.104.*.*(公网IP) 好像不起作用了, 输入的不是 202.104.*.*(公网IP) 也同样指向 192.168.0.8 .

算了, 还是要加回 -i ethX 的网卡识别.

2)
我是直接修改 /etc/sysconfig/iptables 脚本的啊...
运行脚本, 不影响服务器运转????  不解....
回复 支持 反对

使用道具 举报

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

本版积分规则

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