做法:
1.首先虚拟成固定IP上网(不要问我怎么虚拟,你就直接用这个就OK了,反正我们就用一下),虚拟外网IP为58.58.58.58 那么,既然是固定IP了.当然用固定IP的方式来映射啦.你可以用生成器生成固定IP上网的脚本..或用下面的脚本(注意红色部分) /ip firewall nat add chain=dstnat dst-address=58.58.58.58 protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.0.254 to-ports=80 comment="80" 红色部分解释: dst-address=58.58.58.58 #这个你可以不用管他了..就用这个..反正没什么特别的意义! protocol=tcp #这个tcp为你映射端口所使用的协议..常见的有udp dst-port=80 #这里设置外网端口(外网端口可以设置和内网不一样) to-addresses=192.168.0.254 #这里设置你需要映射的内网IP地址 to-ports=80 #这里设置你内网服务器需要映射的端口 comment="80" #这里是一个关键,这里的80可以随便设置,但一定要和下面脚本中的comment一致.否则映射失败!建议使用外网端口! 添加成功后如下图:
2.添加刷新IP脚本(说白了把动态IP转成固定IP,这样大伙容易理解一点)
由于动态IP随时都可能改变,那么我们需要设置他运行的时间周期.这时我们需要用到ROS的计划任务功能(Scheduler)
接下来我们开始动手.打开winbox --- system --- Scheduler --- 点击"+"号
将下面的脚本放进"On Event"里面(如图)
关于ROS计划任务的详细使用请看此教程:http://bbs.szwblm.com/dispbbs.asp?boardid=20&Id=15140
脚本如下(注意红色部分):
:global newipaddress
:global lodipaddress
:set newipaddress [/ip address get [/ip address find dynamic=yes interface="pppoe-out1"] address]
:set newipaddress [:pick $newipaddress 0 ([:len $newipaddress] -3)]
:set lodipaddress [/ip firewall nat get [/ip firewall nat find comment="80"] dst-address]
:if ($newipaddress != $lodipaddress) do={/ip firewall nat set [/ip firewall nat find comment="80"] dst-address=$newipaddress}
红色部分解释:
interface="pppoe-out1" #这里设置你PPPOE拔号的名称,注意大小写
comment="80" #这里就是我们刚才说的关键了(上面蓝色部分).两处都一样.你上面设置什么.这里就一定要设置什么.否则此脚本失效!
好了..大功告成..下面有几个多个端口映射的例程..
事例一.
需要同时映射内网web服务器192.168.0.253的80端口及文件服务器192.168.0.252的3389端口.
第一次运行脚本如下:
/ip firewall nat add chain=dstnat dst-address=58.58.58.58 protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.0.253 to-ports=80 comment="80"
/ip firewall nat add chain=dstnat dst-address=58.58.58.58 protocol=tcp dst-port=3389 action=dst-nat to-addresses=192.168.0.252 to-ports=3389 comment="3389"
计划任务里添加的脚本如下
:global newipaddress
:global lodipaddress
:set newipaddress [/ip address get [/ip address find dynamic=yes interface="pppoe-out1"] address]
:set newipaddress [:pick $newipaddress 0 ([:len $newipaddress] -3)]
:set lodipaddress [/ip firewall nat get [/ip firewall nat find comment="80"] dst-address]
:if ($newipaddress != $lodipaddress) do={/ip firewall nat set [/ip firewall nat find comment="80"] dst-address=$newipaddress
/ip firewall nat set [/ip firewall nat find comment="3389"] dst-address=$newipaddress}
本文来源:天下网吧论坛收集 作者:佚名