端口映射的困惑与经验,对新手有帮助,也请高手指点迷津
环境: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
以上结论,若存在错误,请高手指正 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、可以得到外网真实ipchain=srcnat src-address=192.168.0.0/24 action=masquerade
试试看用上面这两个,把原来的nat转换去掉,in-interface改成你外网网卡的名称。
[ 本帖最后由 木木 于 2007-12-12 08:33 编辑 ] 非常感谢!
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
有哪位成功设置过呢?麻烦把脚本发给我看看,多谢!~~~~ 上面的设置已经用在多台ros,因为是动态的adsl,所以选中的是网卡,第二个设置也使内网获取到了访问者的外网ip。
其实你控制内网是否可以访问外网不一定要用这个srcnat来控制,我就是同过防火墙来控制的,一样达到那样的效果。 用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 编辑 ] 是不是添加了策略? 新安装的系统,只设置了内网IP和外网IP,不做其他任何设置,然后就是运行这个脚本了
问了好多人,也发现很多人和我一样的问题不能解决 就没有高手知道是怎么回事吗,我也很想知道。我这里和你的一样,一样,比你的问题还多点呢,我都快头痛死了。真的不想用ROS了。。5555555555555 天降大任于斯人必先苦其心智劳其筋 :lol :lol 郁闷死了!
下了个最新的3.0rc13测试,并且官方原版的教程进行设置,只改了相应的IP,其他都没变,还是老样子,不行!
等会换一台机子做ROS看看 难到换机器做就能解决问题吗???? 我的网站看,就这样子,
http://218.28.144.108/cx/ip.asp
还有我的ROS问题还有很多,都没人能解释清. 最新试验进展:
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路由的情况,是感觉到这些组合似乎正好相反 正一步一步的走向胜利
当服务器是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 编辑 ] 折腾了几天,终于解决了
罪魁祸首是内网网关的设置,由于我的ROS是在学习阶段,内网正式使用的是另外一个网关,内网服务器回应的数据不能正确到达请求方
今天重新安装一台新机子放在测试网络中才发现这个问题,惨痛的代价啊
结论:
用ROS+内网服务器做端口映射的时候,内网服务器的网关必须是该网段ROS上的地址
页:
[1]
2