虽然RouterOS 加入了cloud功能,但最近在配置RB2011的时候发现不好使,更新域名后无法正确解析到我的IP地址,虽然在cloud的public address中显示了正确的公网ip地址,但解析分配的域名时老是错误,在官网论坛也有人反映这个问题,但没有结果所以放弃了cloud。
RouterOS早期的DDNS推荐是changeip是国外网站,使用上有些不方便,所以最近找了下国内的DDNS站点pubyun.com的ddns域名更新,此类更新有所不同,使用的是http协议进行更新,所以需要使用fetch功能更新,首先申请了一个DDNS域名,当然申请的是免费域名,根据网站提供的更新说明做了一个DDNS动态更新的脚本,大致配置如下。
在pubyun.com站点选择DDNS二级域名是f3322.org,申请完成后,需要设置更新密码,这个很关键。
如更新密码为:0123456789
如果是windows电脑可以下载客户端更新软件,同时pubyun.com站点在客户端下载页面提供了linux更新方法,使用lynx通过通过http 方式更新,如下:
lynx -mime_header -auth=用户名:密码 "http://members.3322.net/dyndns/update?system=dyndns&hostname=域名"
RouterOS没有提供lynx,但提供了fetch功能,假设我的域名是"xxxx.f332.org",用户名root,密码0123456789,使用fetch更新脚本如下:
/tool fetch url="http://members.3322.net/dyndns/update?system=dyndns&hostname=xxxx.f3322.org" mode=http user=root password=0123456789
在script先新建脚本内容如下:
:global ddnsnic "pppoe-out1"
:global ddnslastip
:global ddnsip [ /ip address get [/ip address find dynamic=yes interface=$ddnsnic ] 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 " . $ddnsnic . ", please check.")
} else={
:if ($ddnsip != $ddnslastip) do={
:log info "DDNS: Sending UPDATE!"
:log info [ /tool fetch url="http://members.3322.org/dyndns/update?system=dyndns&hostname=xxxx.f3322.org" mode=http user=root password=0123456789
:global ddnslastip $ddnsip
} else={
:log info "DDNS: No change"
}
}
剩下的操作就是放到计划任务中周期执行
上面的方法老是测试不通过,经过龚总的指点,更正如下:
测试了下ROS输出的path=log.txt 老不是当前的IP返回。不晓得为啥。不过看LOG是正确的。大家注意下。