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

RouterOS搭建私有DDNS服务

DNS实际就是将域名和IP地址绑定,DDNS就是动态DNS,需实时自动的更新域名和IP的绑定关系,通常动态获取IP的主机需要实时的向DDNS服务器上报自己的IP,如果IP变动,就更新该主机域名的IP地址。

按照这个思路,首先DDNS服务器,需要为绑定域名做A记录解析,RouterOS的DNS是支持的是static下配置A记录的,那我们要求节点的RouterOS上报自己的IP地址,如果变动就修改DNS下的A记录IP。下面是通过RouterOS完成一个私有域名的DDNS解析操作拓扑:

上面拓扑是节点RouterOS是动态公网IP,客户端RouterOS需要通隧道连接到节点,假设在没有其他DDNS服务器的情况下,建立私有的DDNS域名解析,私有域名为yus.ros,通过搭建一台RouterOS作为DDNS服务器。

在设计时,上报IP我最先想到的是通过fetch提交,因为ddns提交都用这个,但这个方式需要RouterOS打开FTP服务,并上传文本,感觉不安全,操作繁琐。要让DDNS知道节点RouterOS的IP地址,其实可以建立一个pptp、l2tp或者sstp隧道,在DDNS RouterOS上搭建隧道服务器,通过caller-id来判断节点RouterOS的IP是否变动,而且ppp profile有现成的登录脚本触发功能,caller-id变了就去改A记录,每个用户在ppp下创建一个账号,并给账号加上comment注释记录IP。

节点RouterOS和DDNS RouterOS之间沟通解决了,有人会说这个不是公共的DNS服务器,如何完成公网的域名解析,域名我采用的是私有域名,只能在这套RouterOS网络完成,客户端的RouterOS需要将私有域名转发到DDNS RouterOS上,仅仅需要通在IP DNS 下配置FWD转发就ok。

特别说明:

虽然有MikroTik官方的cloud功能,但有时候还是需要一套自己的解决方案,这套DDNS解析设计目的建立一个区域网络的私有服务上,仅仅是私有域名解析,非公共域名解析,请大家一定要明白是私有DDNS,例如一个企业多个异地办公之间的DDNS服务,建立一个内部私有域名解析,也就是建立一个内部的DDNS服务,当然也可以继续扩展就看各位如何发挥。

DDNS RouterOS配置

作为DDNS服务的RouterOS,首先需要一个固定的公网IP地址,建立隧道服务,这里我选择的是SSTP,这个实例中DDNS的IP假设是2.2.2.2,在实际应用中可以找一台VPS。

配置sstp服务器,用户客户端上报连接IP,先创建一个profile,local address随便写,remote-address也可以随便创建一个pool的地址池(/ip pool下创建),能不能上网不是重要,只要连通到RouterOS就行,上报下对端的IP。

限制账号仅能同时登录一次和带宽

在ppp secret创建账号a1,设置密码123,并添加一个comment注释预设值IP地址 9.9.9.9:

启用SSTP服务,当然可以选择其他隧道PPTP、L2TP等,根据自己网络环境配置

隧道服务搭建完成后,进入IP DNS配置DNS缓存和添加A记录

  • 开启allowed remote request
  • 进入static
  • 点加号添加一个记录
  • 设置yus.ros的A记录IP地址为9.9.9.9,TTL值我修改为1小时,进来缩短时间,但其实A记录作用不大

DNS配置完成后,就是编写脚本,在system script下,创建一个ddns脚本

脚本如下:

:local oldip [/ppp secret get [find name="$user"] comment]
:log info "oldip = $oldip"

:log info "current remote is $"remote-address""
:log info "current caller ip is $"caller-id""
:log info "current user is $user"

:if ($oldip != "$"caller-id"") do={
:log info "dns ip has changed!"
/ppp secret set [find name=$user] comment="$"caller-id""
:log info "file has changed!"

:foreach n in=[/ip dns static find name=($user . ".yus.ros")] do={
/ip dns static set $n address=$"caller-id"
log info "IP updated"
}
} else={ :log info "$user's ip is not change!"}

然后把这个脚本添加到ppp profile的ddns规则的on-up脚本下

DDNS的RouterOS配置完成。

节点RouterOS

节点RouterOS只需要配置连接到DDNS RouterOS的隧道客户端即可。如果你是多线出口的话,需要在ip route下配置静态路由,将2.2.2.2的DDNS服务器IP走指定出口访问,以便DDNS RouterOS记录到正确的出口IP。

连接DDNS服务器,并配置账号和密码分别是a1和123

节点RouterOS配置完成

客户端RouterOS

客户端RouterOS只需要将域名a1.yus.ros解析转发到2.2.2.2服务器,同样需要客户端RouterOS在ip dns下启用allowed-remote-request

由于节点RouterOS是动态IP,客户端需要连接节点RouterOS的隧道协议,就可以使用a1.yus.ros这个域名进行访问,

这个算不算建立了软件定义网络的概念,个人感觉也很模糊,但至少RouterOS提供的这些功能是可以组合在一起,达到我们想要的结果。

赞(0) 打赏
转载请注明出处:Ros资源网 » RouterOS搭建私有DDNS服务

评论 抢沙发

评论前必须登录!

 

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

支付宝扫一扫打赏

微信扫一扫打赏