在 MikroTik router 上設定 DDNS 的兩種方法
FastDDNS 為每個 hostname 提供兩種現成的 RouterOS 設定。方法 1 是一行指令,你將它貼到終端機中:它會下載專為你的 hostname 建立的腳本,然後為你建立一個 /system script腳本/system scheduler 和一個 方法 2 是在 System > Scheduler排程器項目。兩者每兩分鐘呼叫一次 FastDDNS 更新 URL。
除非有特殊原因,否則使用方法 1。如果你偏好 WinBox 而不是終端機,或者你的路由器阻止下載,或是你想使用自選名稱的排程器,則使用方法 2。
| 方法 1 — 自動腳本 | 方法 2 — 手動排程器 | |
|---|---|---|
| 操作位置 | 終端機 (WinBox 或 SSH) | System > Scheduler 位於 WinBox / WebFig |
| 要貼上的內容 | 一行指令 | 三個欄位加上一個指令 |
| 建立的排程器名稱 | FastDDNS.net (固定) | 你輸入的任何內容 — 面板會建議 fastddns |
| 更新間隔 | 120 秒 | 00:02:00 |
| 第一次更新 | 安裝後立即執行一次 | 第一次間隔後執行 |
| 時間限制 | 下載連結在面板生成後 1 小時內過期 | 無 |
開始之前
四件事情,其中兩件決定遠端存取是否能正常運作。
- 一個 FastDDNS 主機名稱。 在 FastDDNS 免費建立一個,然後打開該主機名稱並捲動到 DDNS Configuration Parameters > MikroTik Routers。
- 透過 WinBox、WebFig 或 SSH 取得 RouterOS 的管理員存取權限。
- WAN 介面上的真實公開 IP。 如果你的 ISP 將你置於 Carrier-Grade NAT 背後,動態 DNS 無法提供協助 — hostname 將指向外部無法連線的位址。在你花時間設定 router 之前,請先在 FastDDNS 手機應用程式中執行 CGNAT 檢查器。
- 為你想要訪問的任何服務設置端口轉發。 DDNS 只會讓名稱指向正確的位址。你仍然需要在 router 上設定相應的防火牆和 NAT 規則,之後可以使用 Port Check進行確認。
若要查看 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-hant/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 — 將更新命令貼到 On Event
複製 On Event 框。格式如下:
: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 會讀取前 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,並將其與你目前的公共 IP 位址比較:
nslookup myhome.fastddns.net你的主機名面板也會顯示 最後更新 時間戳記,會在路由器第一次回報後開始變化。Not yet updatedFastDDNS 會在 60 秒內套用新地址,但你本機的 DNS 快取可能會稍微久一點才更新。
MikroTik DDNS 故障排除
| 你看到的情況 | 原因 | 處理方式 |
|---|---|---|
在貼上方法 1 的指令列後立即出現ERROR |
下載 token 已過期,或路由器無法連線到網站 | 重新載入 hostname 頁面,再次複製該行,並在一小時內貼上 |
| Can not connect to server FastDDNS.net. | 路由器無法解析或連線到更新 URL | 在變更任何設定前先進行診斷:/ip dns print 檢查已設定的解析器,然後:put [:resolve client.fastddns.net] 測試路由器本身的名稱解析。只有在清單為空時才加入公共解析器——覆寫正常運作的內部解析器會破壞本機名稱解析 |
fastddns.ip 包含 badauth |
指令中的使用者名稱或更新密碼錯誤 | 再次從面板複製 On Event 欄位;如果你是從其他供應商遷移過來的,請參閱關於 更換 No-IP 或 DynDNS 伺服器地址 |
| 主機名稱可解析,但你的埠沒有任何回應 | DDNS 正常運作;問題出在通往你網路的路徑 | 新增 NAT 和防火牆規則,然後從外部使用 埠檢查 從外部測試該埠 |
| 主機名稱解析到的地址不是您的公共 IP | 比較 | 將 /ip address print與公共 IP 查詢結果比較;如果不同,請向您的 ISP 申請公共 IP |
| 一切運作正常,但幾個月後停止 | 免費的主機名稱每年更新一次,臨時主機名稱持續 30 天 | 從您的帳戶續期,或改用主機名稱不會過期的方案 |
保持您的更新腳本私密
這兩種方法都會將你的主機名稱、使用者名稱和更新密碼以純文字儲存在路由器上——在排程器的 On Event 欄位,或位於 /system script 內。任何可以讀取設定檔的人都能看到這些數值,所以請將完整的 RouterOS 匯出檔視同密碼檔處理。如果你已經將它貼到論壇貼文或支援票中,請更改帳號的更新密碼並重新安裝腳本。
下載的 fastddns.txt 只在安裝期間需要。之後可以從 Files 刪除,而不會影響排程器。
常見問題
我需要為 DDNS 更新開啟 port 嗎?
不行。路由器會開啟一個向 FastDDNS 的出站 HTTPS 連線,因此更新不需要入站規則。不過,對於您希望通過主機名訪問的服務,仍然需要進行端口轉發,例如 RTSP 的 554 端口或攝影機的網頁端口。
MikroTik 多久會發送一次更新,hostname 變化有多快?
排程器在兩種方法下都每兩分鐘執行一次。當 IP 確實變更時,FastDDNS 會在 60 秒內套用新 IP,因此 IP 變更後最壞情況大約是等待排程器兩分鐘,再加上傳播時間。
如果我的 ISP 使用 CGNAT,這會有效嗎?
不行。使用電信級 NAT 時,你的 router 沒有自己的公共 IP,因此 hostname 沒有可有效指向的地址,而且 ISP 會封鎖入站連線。DDNS 解決的是地址變更問題,不是沒有地址的問題。請向你的 ISP 申請公共 IP,或使用能建立出站隧道的服務。
主機名會過期嗎?
免費的永久主機名每年從你的帳戶更新一次,臨時主機名持續 30 天。付費方案的主機名不會過期;詳情請參閱 價格頁面。
使用不同的 router 嗎?只要能發送排程的 HTTPS 請求,同樣的更新 URL 都適用,包括這裡介紹的 DrayTek 設定。

![封面插圖:一個 pfSense 防火牆,標題為[pfSense 的動態 DNS]](/blog-img/w600/eccf38ccffb1de2ead2e0f7490f6b1fd.webp)



