在 MikroTik router 上设置 DDNS 的两种方法
FastDDNS 为每个 hostname 提供两种现成的 RouterOS 设置。方法 1 是一行命令,粘贴到终端中:它会下载为您的 hostname 构建的脚本,然后为您创建一个 /system script 和一个 /system scheduler 条目。方法 2 是手动在 System > Scheduler 下输入相同的更新命令。两者都会每两分钟调用一次 FastDDNS 更新 URL。
除非有特别原因,否则使用方法 1。如果您更喜欢在终端之外使用 WinBox,或者 router 阻止下载,或希望调度器使用您自定义的名称,请使用方法 2。
| 方法 1 — 自动脚本 | 方法 2 — 手动调度器 | |
|---|---|---|
| 您的工作环境 | 终端(WinBox 或 SSH) | 在 WinBox / WebFig 中的 System > Scheduler |
| 您粘贴的内容 | 一行命令 | 三个字段加一个命令 |
| 它创建的调度器名称 | FastDDNS.net(固定) | 无论你输入什么——面板都会建议 fastddns |
| 更新间隔 | 120 秒 | 00:02:00 |
| 首次更新 | 安装后立即运行一次 | 时间限制 |
| 时间限制 | 下载链接在面板生成后 1 小时过期 | 无 |
在开始之前
有四件事,其中两件会决定远程访问是否能正常工作。
- 一个 FastDDNS hostname。 在 FastDDNS 免费创建一个,然后打开该主机名并滚动到 DDNS Configuration Parameters > MikroTik Routers。
- 通过 WinBox、WebFig 或 SSH 对 RouterOS 的管理员访问权限。
- WAN 接口上的真实公网 IP。 如果你的 ISP 将你置于运营商级 NAT 之后,DDNS 无法帮忙——hostname 会指向一个外部无法访问的地址。在你花时间配置 router 之前,先在FastDDNS移动应用中运行 CGNAT Checker,然后再在 router 上花时间。
- 为你想访问的任何服务设置端口转发。 DDNS 只会让 hostname 指向正确的地址。你仍然需要在 router 上设置相应的防火墙和 NAT 规则,之后可以用端口检查。
要查看 router 实际持有的地址,请列出这些地址,并查看接口为 WAN 链路的那一行——也就是承载默认路由的一行:
/ip address print
/ip route print where dst-address=0.0.0.0/0如果该 WAN 地址落在10.0.0.0/8、172.16.0.0/12、192.168.0.0/16或100.64.0.0/10,说明 router 没有公网 IP,上游有设备正在执行 NAT。100.64.0.0/10该范围尤其是为运营商级 NAT 保留的。
方法 1——一行自动安装脚本
步骤1——从主机名面板复制这行
打开你的主机名,滚动到页面底部的DDNS Configuration Parameters部分。每个受支持的设备系列都有一个面板;你要找的是 MikroTik Routers。

打开它,复制“方法1”下的文本框。这是一整行,末尾是属于你账户的 token:

:do { /tool fetch check-certificate=no url="https://fastddns.net/zh-hans/member/download/YOUR-DOWNLOAD-TOKEN" dst-path=fastddns.txt; import fastddns.txt} on-error={ [:terminal style error]; :put "ERROR"; }从面板中复制真实的命令行,而不是重新输入这个——令牌用于识别你的主机名。
步骤 2 — 将其粘贴到终端
在 WinBox 中打开 New Terminal,或通过 SSH 连接,然后粘贴该行并按 Enter。 /tool fetch 会将个性化脚本下载到路由器的 Files 列表中,并命名为 fastddns.txt,然后 import 执行它。
关于 check-certificate=no:它会让 fetch 跳过 TLS 证书的信任链验证。RouterOS 对此设置的默认值已经是 no,面板上也明确写出了这一点,因此即使 router 的证书存储为空,或时钟尚未同步,下载仍然可以正常进行。如果你希望验证证书,请将其切换为 check-certificate=yes — 只有在 router 已导入 CA 存储且时钟正确时才会成功。请注意这个切换的适用范围:它只适用于这一次下载。router 随后安装的脚本在每次更新时都会自带自己的 check-certificate=no,方法 2 的命令也是如此。
步骤 3 — 脚本创建的内容
导入的文件并不是黑箱。它会打印你的 hostname、用户名和密钥,然后执行四件事:
- 删除任何现有的名为 FastDDNS.net 的脚本和调度程序,因此重新运行它不会留下重复项;
- 添加一个名为 FastDDNS.net 的 /system script,其中包含更新命令;
- 添加一个名为 FastDDNS.net 的 /system scheduler,包括
interval=120s和start-time=startup; - 会立即运行一次脚本,而不是等待首次计划运行。
安装完成后,终端中会显示:
ADD new Script: Complete.
ADD new Scheduler: Complete.
Complete add FastDDNS.把这三行按其实际含义理解:脚本和调度器现在都已存在。它们并不能证明 hostname 已更新——安装程序会打印 Complete add FastDDNS.。请通过下方的检查确认更新本身。
步骤 4 — 下载链接在一小时后过期
该行中的 token 是在面板页面渲染时生成的,3600 秒后便会失效。粘贴旧副本后,router 会打印 ERROR,因为服务器返回了 410 # Download token expired. 而不是脚本。解决方法很简单:重新加载 hostname 页面,然后再次复制该行。
下面的演示是较早录制的。面板后来已经重新设计,因此不会与上面的截图完全一致——步骤和命令本身没有变化。
方法 2 — 手动设置调度器
这与方法 1 的结果相同,但需要手动输入,且不会向 router 下载任何内容。
步骤 1 — 创建调度器条目
在 WinBox 中进入 System > Scheduler,然后添加新条目,填写面板在脚本旁边显示的三个值;每个值旁边都有复制按钮:

| 字段 | 值 | 作用 |
|---|---|---|
| Name | fastddns |
名称可以任意填写;使用这个名称便于在列表中识别 |
| Start Time | startup |
将计划锚定到启动时间,而不是某个时钟时间——请参阅本表下方的注释 |
| Interval | 00:02:00 |
每两分钟重复一次 |
有一个值得了解的 RouterOS 细节: start-time=startup 的行为就像启动时间设为控制台启动后三秒,但 MikroTik 的文档说明,具有非零间隔的条目 不会在启动时运行。因此,首次执行会在启动后一个间隔时长运行,而不是在启动时运行。重启后,hostname 大约在两分钟后刷新,不会立即刷新。
步骤 2 — 将更新命令粘贴到事件触发中
复制 事件触发 框。格式为:
:do {/tool fetch check-certificate=no url="https://client.fastddns.net/?hostname=myhome.fastddns.net&user_name=YOUR-USERNAME&user_pass=YOUR-UPDATE-PASSWORD" dst-path=fastddns.ip; :local statusip [:pick [/file get fastddns.ip contents] 0 3]; if ($statusip = "noc" || $statusip = "goo") do={[/terminal style ambiguous];:put "Updated IP address";}; } on-error={[:terminal style error];:put "Can not connect to server FastDDNS.net.";:error "exit";};无需手动替换任何内容——面板已经填写了你的 hostname、用户名和更新密码。上面的三个占位符仅代表你账户中的私密值。
步骤 3 — 脚本如何知道更新成功
fetch 会将服务器的回复保存到 fastddns.ip,而 :pick … 0 3 会读取它的前三个字符。FastDDNS 使用标准 DynDNS 词汇,因此这三个字符足以区分不同结果:
| 回复 | 前三个字符 | 含义 |
|---|---|---|
good |
goo |
主机名已更新为新地址 |
nochg |
noc |
地址没有变化 — 无需执行任何操作 |
badauth |
bad |
用户名或更新密码错误 |
脚本只检查 goo 和 noc,遇到任一结果都会打印 Updated IP address。其他任何情况——包括 badauth——都会被静默忽略:fetch 已成功,因此 on-error 不会触发,也不会打印任何内容。没有输出不代表成功。 有疑问时,请阅读 fastddns.ip。该协议本身记录在 FastDDNS 客户端 API 页面 上有文档说明。
视频中的手动操作——再次说明,这是面板的较早录制,使用的是相同的四个值。
检查主机名是否真正更新
路由器上三次检查,路由器外一次。在路由器上:
/system scheduler print
/file print
:put [/file get fastddns.ip contents]调度器列表中有一列 run-count,每两分钟增加一次。这说明该条目正在触发——确实不告诉你更新成功,因为运行失败命令的调度程序仍然会计数。证明是文件:fastddns.ip必须存在,其内容必须以
good 或 nochg——服务器可能会附加它记录的地址。
在路由器外,从任意一台机器解析hostname,并将其与你当前的公网地址进行比较:
nslookup myhome.fastddns.net您的主机名面板还显示一个最后更新时间戳,该时间戳会在Not yet updated路由器首次报告时开始变化。FastDDNS 会在不到 60 秒内应用新地址,但您的本地 DNS 缓存可能会稍微保留旧地址更长时间。
MikroTik DDNS 故障排除
| 你看到的 | 为什么 | 做什么 |
|---|---|---|
ERROR 粘贴方法 1 的行后立即 |
下载token已过期,或路由器无法访问该网站 | 重新加载主机名页面,再次复制该行,并在一小时内粘贴 |
| Can not connect to server FastDDNS.net. | 路由器无法解析或访问更新 URL | 在更改任何内容之前进行诊断:使用 /ip dns print查看配置的解析器,然后使用 :put [:resolve client.fastddns.net]测试路由器自身的名称解析。只有在列表为空时才添加公共解析器——覆盖一个正常工作的内部解析器会破坏本地名称解析 |
fastddns.ip包含 badauth |
命令中的用户名或更新密码错误 | 再次从面板复制“事件时”框;如果你从其他提供商迁移,请参见 替换 No-IP 或 DynDNS 服务器地址 的指南 |
| DDNS 正常工作;进入你网络的路径不可用 | 添加 NAT 和防火墙规则,然后使用 | 添加 NAT 和防火墙规则,然后使用 端口检查 从外部测试端口 |
| 比较 | 与公共 IP 查询结果比较;如果不同,请向你的 ISP 申请一个公共 IP | 将 /ip address print 与公共 IP 查询结果比较;如果不同,请向你的 ISP 申请一个公共 IP |
| 一切正常工作,然后在几个月后停止 | 免费的主机名每年续期一次,临时主机名持续 30 天 | 从你的账户续期,或者升级到主机名不会过期的计划 |
请妥善保管你的更新脚本
这两种方法都会在路由器上以明文存储你的主机名、用户名和更新密码——在调度器的 On Event 字段中,或在 /system script 内。任何能够读取配置的人都可以读取这些值,因此应像对待密码文件一样对待完整的 RouterOS 导出。如果你已经把其中一个粘贴到论坛帖子或支持工单中,请更改账户中的更新密码并重新安装脚本。
下载的 fastddns.txt 仅在安装期间需要。之后可以从 Files 中删除它,而不会影响调度器。
常见问题
我是否需要为 DDNS 更新本身打开一个 port?
不。router 会向 FastDDNS 发起出站 HTTPS 连接,因此更新不需要入站规则。但你确实需要为希望通过 hostname 访问的服务设置 port forwarding,例如 RTSP 的 554 端口或摄像头的 web 端口。
MikroTik 多久发送一次更新,hostname 变化有多快?
调度器在两种方法下都每两分钟运行一次。当地址确实发生变化时,FastDDNS 会在 60 秒内应用新地址,因此 IP 变更后的最坏情况大约是等待调度器两分钟,再加上传播时间。
如果我的 ISP 使用 CGNAT,这个方法能行吗?
不行。处于 Carrier-Grade NAT 后的 router 没有自己的公共 IP,因此 hostname 没有可有效指向的地址,而且 ISP 会阻止入站连接。动态 DNS 解决的是地址变化问题,而不是地址缺失问题。请向你的 ISP 申请一个公共 IP,或者使用提供出站隧道的服务。
主机名会过期吗?
免费永久主机名每年从你的账户自动续费一次,临时主机名有效期为 30 天。付费计划中的主机名不会过期;详情请见 定价页面。
使用不同的 router?只要能够发出定时 HTTPS 请求,同样的更新 URL 都可以使用,包括 这里讲解的 DrayTek 设置。





