创新|开发|定制
专注于软路由|网络技术领域

ROS做端口映射DDNS的多个方法

方法1(IP方法)

/ip firewall nat
 add chain=dstnat dst-address!=内网网关 protocol=tcp dst-port=要开放的外网端口
 action=dst-nat to-addresses=要映射的内网IP地址 to-ports=要映射的内网端口 comment=””
 disabled=no

列如:映射80端口到192.168.200的80端口

/ ip firewall nat
 add chain=dstnat dst-address!=192.168.1.1 protocol=tcp dst-port=80
 action=dst-nat to-addresses=192.168.200 to-ports=80 comment=”mapping
 disabled=no

方法2(接口方法)

/ip firewall nat
 add chain=dstnat in-interface=adsl接口名 protocol=tcp dst-port=要开放的外网端口
 action=dst-nat to-addresses=要映射的内网IP地址 to-ports=要映射的内网端口 comment=””
 disabled=no

列如:映射80端口到192.168.200的80端口

/ip firewall nat
 add chain=dstnat in-interface=pppoe-out1 protocol=tcp dst-port=80
 action=dst-nat to-addresses=192.168.1.200 to-ports=80 comment=”mapping
 disabled=no

方法3(固定IP+脚本更新IP方法,通过注释判断comment=”mapping”)

/ip firewall nat
 add chain=dstnat dst-address=10.10.10.10 protocol=tcp dst-port=80
 action=dst-nat to-addresses=192.168.200 to-ports=80 comment=”mapping
 disabled=no

#刷新脚本(此脚本放到调度程序里面定时运行来更新ADSL的IP到映射的IP)
#调度程序位置在 system – scheduler

 :local oldip
 :local newip
 :set newip [/ip address get [/ip address find dynamic=yes interface=pppoe-out1 ] address ]
 :put $newip
 :set oldip [/ip firewall nat get [find comment=mapping] dst-address ]
 :if ($newip != $oldip) do={
 /ip firewall nat set [find comment=mapping] dst-address=$newip
 }

或在终端运行以下代码

system  scheduler
 add name=”schedule111
 on-event=”#刷新脚本(此脚本放到调度程序里面定时运行来更新ADSL的IP到映射的IP)"
 :local oldip
 :local newip
 :set newip [/ip address get [/ip address find dynamic=yes interface=pppoe-out1 ] address ]
 :put $newip
 :set oldip [/ip firewall nat get [find comment=mapping] dst-address ]
 :if ($newip != $oldip) do={
/ip firewall nat set [find comment=mapping] dst-address=$newip}”
 start-date=jan/01/1970 start-time=00:00:00 interval=30s comment=””
 disabled=no

运行后会自动在调度程序里添加上面那个脚本(默认30秒运行一次)
在调度程序system – scheduler可以看到该脚本

#IP伪装
 / ip firewall nat add chain=srcnat action=masquerade comment=”” disabled=no

#IP回流
 add chain=srcnat src-address=内网IP段/24 protocol=tcp action=masquerade
 comment=”” disabled=no

方法4(简单直接)

/ ip firewall nat
 add chain=dstnat src-address!=内网IP段 dst-address!=内网网关 protocol=tcp dst-port=要开放的外网端口
 action=dst-nat to-addresses=要映射的内网IP地址 to-ports=要映射的内网端口 comment=””
 disabled=no

列如:映射80端口到192.168.200的80端口
 / ip firewall nat
 add chain=dstnat src-address!=192.168.1.0/24 dst-address!=192.168.1.1 protocol=tcp dst-port=80
 action=dst-nat to-addresses=192.168.200 to-ports=80 comment=”mapping
 disabled=no

动态域名3322解析脚本:

:local ednsuser user
 :local ednspass password
 :local ednshost user.3322.org
 :local ednsinterface pppoe-out1
 :local members http://members.3322.org/dyndns/update?system=dyndns”
 #:local members “http://members.dyndns.org/nic/update?”
 :local status
 :local status [/interface get [/interface find name=$ednsinterface] running]
 :if ($status!=false) do={
 :local ednslastip [:resolve $ednshost]
 :if ([ :typeof $ednslastip ] = nil ) do={ :local ednslastip “0″ }
 :local ednsiph [ /ip address get [/ip address find interface=$ednsinterface ] address ]
 :local ednsip [:pick $ednsiph 0 [:find $ednsiph “/”]]
 :local ednsstr “&hostname=$ednshost&myip=$ednsip”
 :if ($ednslastip != $ednsip) do={/tool fetch url=($members . $ednsstr) mode=http user=$ednsuser password=$ednspass dst-path=$ednshost
 :delay 2
 :local result [/file get $ednshost contents]
 :log info ($ednshost . ” ” .$result)
 /file remove $ednshost ;
 }
 }

changeip.net 脚本

:global ddnsuser user
:global ddnspass pass
:global ddnshost user.changeip.net
:global ddnsinterface pppoe-out1
:global ddnslastip
:global ddnsip [ /ip address get [/ip address find dynamic=yes interface=$ddnsinterface ] address ]
 :if ( [:typeof $ddnslastip]=”nothing” ) do={ :global ddnslastip 0.0.0.0/0 }
 :if ( [:typeof $ddnsip]=”nothing ) do={
 :log info (“DDNS: No ip address present on  . $ddnsinterface . “, please check.”)
 } else={
 :if ($ddnsip != $ddnslastip) do={
 :log info DDNS: Sending Update!”
 :log info [ /tool dns-update name=$ddnshost address=[:pick $ddnsip 0 [:find $ddnsip “/”] ] key-name=$ddnsuser key=$ddnspass ]
 :global ddnslastip $ddnsip
 } else={
 :log info DDNS: No change
 }
 }
 :log info DDNS: End
赞(1) 打赏
转载请注明出处:Ros资源网 » ROS做端口映射DDNS的多个方法

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏