找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5088|回复: 15

[其它] 端口映射的困惑与经验,对新手有帮助,也请高手指点迷津

[复制链接]
发表于 2007-12-11 16:02:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
环境:
  ros 2.9.27
  eth1:接外网固定IP:58.252.30.136/29
  eth2:接内网,IP为:192.168.0.7/24 内网中另有一WEB服务器:192.168.0.2/24
目的:
  希望重外网能够访问到该WEB服务器
测试:
  查看了网上的很多资料,大多数的都是ROS2.9.6或更早的版本,ROS2.9.27中找不到这些资料所描述的内容,看了不少的视频教程,以及用脚本生成器生成的脚本,其方法基本上都是一样的,就是在nat里面加一条dstnat规则,如用脚本生成器V1.4得到如下:
/ ip firewall nat add chain=dstnat dst-address=(58.252.30.136) protocol=tcp dst-port=80 to-addresses=(192.168.0.2) to-ports=80 action=dst-nat comment="WEB SERVER"
把脚本导入ROS后测试 http://58.252.30.136
发现打不开网页,把系统做到最简化排出其他干扰,反复多次都是如此

意外的是,我在内网192.168.0.10上测试http:58.252.30.136时确实正常的,按照网上的资料,几乎都是说要做回流才可以在内网中使用的,测试结果看来,根本不用做回流,dstnat本身已经做好回流了

经过两天的反复实验(本人理论水平太差,只要用笨办法一一试验了),发现加一条srcnat规则就可以了,代码为:
/ ip firewall nat add chain=srcnat protocol=tcp dst-address=192.168.0.2 dst-port=80 action=masquerade comment="WEB-MAIL SERVER"

然后从外网测试 http://58.252.30.136 正常,终于是搞定了!!

再看WEB服务器上的日志,发现的记录是内网网关192.168.0.7的访问记录,而不是外网的IP地址,弄了好久还解决不了,郁闷

结论:
  1,网上搜索到的资料,对于ROS2.9.27来说,大多是不正确的
  2,除了做dstnat以外,还要做srcnat才能正确映射
  3,不需要做回流
  4,留下难题等高人指点,如何让内网服务器看到的是真实的访问者的IP,而不是内网的网关IP


以上结论,若存在错误,请高手指正
routeros
发表于 2007-12-12 08:23:22 | 显示全部楼层
1、端口映射 chain=dstnat in-interface=2_ADSL protocol=tcp dst-port=80 action=dst-nat   to-addresses=192.168.0.2 to-ports=80

2、可以得到外网真实ip  chain=srcnat src-address=192.168.0.0/24 action=masquerade

试试看用上面这两个,把原来的nat转换去掉,in-interface改成你外网网卡的名称。

[ 本帖最后由 木木 于 2007-12-12 08:33 编辑 ]
routeros
回复

使用道具 举报

 楼主| 发表于 2007-12-12 09:03:38 | 显示全部楼层
非常感谢!

chain=dstnat in-interface=2_ADSL protocol=tcp dst-port=80 action=dst-nat   to-addresses=192.168.0.2 to-ports=80
改成这句以后,测试没有什么变化,我理解为用网卡设备代替IP地址,也就是不管该网卡上的IP是多少,都做映射,如果我的网卡上有4个IP,也都全部映射到内网这个IP,也就没有办法把不同的IP转向到不同的服务器了,有点浪费IP地址资源。
但是应该是很适合于动态IP的ADSL的

chain=srcnat src-address=192.168.0.0/24 action=masquerade
使用这句以后,测试,外网就不能访问内网了,看来在我这里是不正确的
这句我的理解是把所有内网的IP都伪装成外网的IP,这样的话,我整个内网就可以访问互连网了,与我的控制要求不符,对内网的IP,要单独控制他是否可以访问互连网
改成chain=srcnat dst-address=192.168.0.0/24 action=masquerade 后,和我原来的设置差不多,外网能访问内网,但内网显示的来访者全部是网关的IP

有哪位成功设置过呢?麻烦把脚本发给我看看,多谢!~~~~
routeros
回复

使用道具 举报

发表于 2007-12-12 13:04:28 | 显示全部楼层
上面的设置已经用在多台ros,因为是动态的adsl,所以选中的是网卡,第二个设置也使内网获取到了访问者的外网ip。

其实你控制内网是否可以访问外网不一定要用这个srcnat来控制,我就是同过防火墙来控制的,一样达到那样的效果。
routeros
回复

使用道具 举报

 楼主| 发表于 2007-12-12 14:13:36 | 显示全部楼层
用Linux做路由和ROS路由 做了测试有几个结果:
环境:
路由上的外网IP:58.252.30.136
路由上的内网IP:192.168.0.7
内网中的服务器:192.168.0.2

测试:
A、Linux路由+Windows服务器
  端口映射规则:iptables -t nat -A PREROUTING  -d 58.252.30.136 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.2:80
  结果完全正确,可以访问,并得到访问者的真实IP

B、Linux路由+Linux服务器
  端口映射规则:iptables -t nat -A PREROUTING  -d 58.252.30.136 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.2:80
  结果:不能访问
  增加一条SNAT规则:iptables -t nat -A POSTROUTING -d 192.168.0.10 -p tcp --dport 80 -j SNAT --to 192.168.0.7
  结果:可以访问,得到的访问者IP是内网网关IP:192.168.0.7

C、ROS路由+Windows服务器
  端口映射规则:/ip firewall nat add chain=dstnat dst-address=58.252.30.136 protocol=tcp dst-port=80 to-addresses=192.168.0.2 to-ports=80 action=dst-nat
  结果:不能访问
  增加一条srcnat规则::/ip firewall nat add chain=srcnat dst-address=192.168.0.2 action=masquerade
  结果:可以访问,得到的访问者IP是内网网关IP:192.168.0.7

D、ROS路由+Linux服务器端口映射规则:/ip firewall nat add chain=dstnat dst-address=58.252.30.136 protocol=tcp dst-port=80 to-addresses=192.168.0.2 to-ports=80 action=dst-nat
  结果:不能访问
  增加一条srcnat规则::/ip firewall nat add chain=srcnat dst-address=192.168.0.2 action=masquerade
  结果:不能访问

ip firewall nat add chain=dstnat dst-address=58.252.30.136 protocol=tcp dst-port=80 to-addresses=192.168.0.2 to-ports=80 action=dst-nat

:/ip firewall nat add chain=dstnat dst-address=58.252.30.136 protocol=tcp dst-port=80 to-addresses=192.168.0.2 to-ports=80 action=dst-nat
实际上是一个意思,就是得不到相同的结果

上面的结果看起来 测试B 和 测试C 条件不同却有着同样的结果

非常的郁闷,能不能远程登陆我的桌面帮我解决呢?

[ 本帖最后由 hcb 于 2007-12-12 16:31 编辑 ]
routeros
回复

使用道具 举报

发表于 2007-12-12 16:27:28 | 显示全部楼层
是不是添加了策略?
routeros
回复

使用道具 举报

 楼主| 发表于 2007-12-12 16:35:22 | 显示全部楼层
新安装的系统,只设置了内网IP和外网IP,不做其他任何设置,然后就是运行这个脚本了

问了好多人,也发现很多人和我一样的问题不能解决
routeros
回复

使用道具 举报

发表于 2007-12-13 09:17:59 | 显示全部楼层
就没有高手知道是怎么回事吗,我也很想知道。我这里和你的一样,一样,比你的问题还多点呢,我都快头痛死了。真的不想用ROS了。。5555555555555
routeros
回复

使用道具 举报

发表于 2007-12-13 09:53:36 | 显示全部楼层
天降大任于斯人必先苦其心智劳其筋
routeros
回复

使用道具 举报

 楼主| 发表于 2007-12-13 10:14:26 | 显示全部楼层
郁闷死了!
下了个最新的3.0rc13测试,并且官方原版的教程进行设置,只改了相应的IP,其他都没变,还是老样子,不行!

等会换一台机子做ROS看看
routeros
回复

使用道具 举报

发表于 2007-12-13 10:22:22 | 显示全部楼层
难到换机器做就能解决问题吗????
routeros
回复

使用道具 举报

发表于 2007-12-13 10:25:05 | 显示全部楼层
我的网站看,就这样子,
http://218.28.144.108/cx/ip.asp
还有我的ROS问题还有很多,都没人能解释清.
routeros
回复

使用道具 举报

 楼主| 发表于 2007-12-13 11:35:02 | 显示全部楼层
最新试验进展:

C、ROS路由+Windows服务器
  端口映射规则:/ip firewall nat add chain=dstnat dst-address=58.252.30.136 protocol=tcp dst-port=80 to-addresses=192.168.0.2 to-ports=80 action=dst-nat
  结果:不能访问
  增加一条srcnat规则::/ip firewall nat add chain=srcnat dst-address=192.168.0.2 action=masquerade
  结果:可以访问,得到的访问者IP是内网网关IP:192.168.0.7

D、ROS路由+Linux服务器端口映射规则:/ip firewall nat add chain=dstnat dst-address=58.252.30.136 protocol=tcp dst-port=80 to-addresses=192.168.0.2 to-ports=80 action=dst-nat
  结果:不能访问

去掉Web服务器上的防火墙
  结果:可以访问,可以得到访问者的真实IP


还差服务器为Windows系统的情况无法解决,Windows上本身也没有启用防火墙

现在我这里的情况是:
1,ROS路由+LINUX做的服务器: 已经解决,方法是关闭服务器防火墙
2,Linux路由+Windows服务器: 正常,没遇到过麻烦
3,ROS路由+Windows服务器:   可以访问,但得不到真实的来访IP, 等待解决
4,Linux路由+LINUX做的服务器:可以访问,但得不到真实的来访IP, 不在这里讨论

列出Linux路由的情况,是感觉到这些组合似乎正好相反
routeros
回复

使用道具 举报

 楼主| 发表于 2007-12-13 14:38:48 | 显示全部楼层
正一步一步的走向胜利
当服务器是WinXP,WEB用IIS做的时候,测试成功
:set port "80"
:set w-ip 58.252.57.221
:set n-ip 192.168.0.9
:set comm "测试"
/ip firewall nat
  add chain=dstnat dst-address=$w-ip protocol=tcp dst-port=$port to-addresses=$n-ip to-ports=$port action=dst-nat comment=$comm
  add chain=srcnat protocol=tcp src-address=$n-ip dst-port=$port action=masquerade comment=$comm
可以得到访问者真实的IP

服务器是Win2003,或者XP+Apache的时候,还没成功

[ 本帖最后由 hcb 于 2007-12-13 14:53 编辑 ]
routeros
回复

使用道具 举报

 楼主| 发表于 2007-12-14 11:58:18 | 显示全部楼层
折腾了几天,终于解决了

罪魁祸首是内网网关的设置,由于我的ROS是在学习阶段,内网正式使用的是另外一个网关,内网服务器回应的数据不能正确到达请求方

今天重新安装一台新机子放在测试网络中才发现这个问题,惨痛的代价啊

结论:
用ROS+内网服务器做端口映射的时候,内网服务器的网关必须是该网段ROS上的地址
routeros
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-9-28 07:25 , Processed in 0.242163 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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