在 pfSense 上運行 FastDDNS 的兩種方法
您的主機名稱面板提供兩種設置。方法 2 將 FastDDNS 加入內建的 Services > Dynamic DNS 客戶端,作為 Custom 提供者——這是建議長期保留的方式,因為 pfSense 會將其儲存在設定中並備份。 方法 1 將單行腳本貼入 shell,安裝每兩分鐘執行一次的 cron 工作。它會立即生效,但 pfSense 不會管理這項工作。
以下編號依照您面板中的標籤,而非我們建議的順序。長期使用請設定方法 2;如果您想立即送出更新而不必逐一填寫表單,請使用方法 1。
| 方法 2 — 內建 DDNS 客戶端 | 方法 1 — crontab 腳本 | |
|---|---|---|
| 操作位置 | Web UI 中的 Services > Dynamic DNS | Diagnostics > Command Prompt,或 SSH |
| 儲存在 pfSense 設定中 | 是 | 否 — 請參閱下方的限制 |
| 設定還原或重新安裝後仍會保留 | 是 | 否 |
| 傳送更新的時機 | 受監控介面的位址變更時,以及每日重新檢查一次 | 每兩分鐘一次,無論如何 |
| 設定所需工作量 | 七個欄位,其中四個直接從面板複製 | 貼上一次即可 |
| 適用情境 | 永久設定 | 立即進行第一次更新,或快速測試 |
開始之前
有四件事,其中兩件會決定遠端存取是否能正常運作。
- 一個 FastDDNS hostname。 在 FastDDNS 上建立免費帳號,然後開啟它並捲動至 DDNS Configuration Parameters > Firewall pfSense。
- pfSense 網頁介面的管理員存取權,以及只有在計劃使用方法 1 時才需要的 shell 存取權。
- WAN 介面上的真實公開 IP。 如果你的 ISP 將你置於電信級 NAT(Carrier-Grade NAT)之後,DDNS 無法提供幫助——hostname 會指向 ISP 外部無法連線的位址。請在 pfSense 儀表板上查看 WAN 位址,或在 FastDDNS 手機應用中運行 CGNAT 檢查器。
- 要存取目標所需的防火牆和 NAT 規則。 DDNS 只會讓名稱持續指向正確的位址;如何連入仍由你負責。之後使用 端口檢查確認。
在 pfSense 儀表板上,如果 WAN 介面上的位址位於 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 或 100.64.0.0/10 範圍內,就表示上游正在執行 NAT。100.64.0.0/10 範圍是保留給電信級 NAT 的。
方法 2 — 將 FastDDNS 新增為自訂動態 DNS 用戶端
這是值得保留的設定。pfSense 會將其儲存在 config.xml中,因此還原設定時會一併恢復,重新安裝後也能保留。
步驟 1 — 從你的 hostname 面板複製更新 URL
打開你的主機名,滾動到 DDNS Configuration Parameters,然後展開 Firewall pfSense。兩種方法所需的一切資訊都在這個面板中:

複製 Method 2 下方的 更新 URL 框。它已經包含了你的主機名和憑證:
https://client.fastddns.net/?hostname=myhome.fastddns.net&user_name=YOUR-USERNAME&user_pass=YOUR-UPDATE-PASSWORD大寫的三個值代表帳戶中的私人資訊 — 面板會自動為你填入。
第 2 步 — 打開動態 DNS 客戶端
在 pfSense 網頁介面中,前往 Services > Dynamic DNS,然後點選 + 新增。
第 3 步 — 填寫各欄位
| 欄位 | 值 | 原因 |
|---|---|---|
| Service Type | Custom |
FastDDNS 不在內建提供者清單中,也不需要加入其中 |
| Interface to Monitor | WAN |
地址變更時應觸發更新的介面 |
| Hostname | 你的 FastDDNS hostname | 更新 URL 已經包含它,因此對 Custom 類型而言,這主要是你在清單中看到的標籤 |
| Update URL | 步驟 1 中的 URL | 完整貼上。沒有 %IP% 可供替換 — FastDDNS 會記錄請求來源的地址 |
| Force IPv4 DNS Resolution | 已勾選 | 僅透過 IPv4 解析更新主機,因此 FastDDNS 記錄的是你的 IPv4 WAN 地址,而不是 IPv6 地址 |
| Result Match | 留空 | pfSense 會將此值與完整回覆進行比較。FastDDNS 在變更後回覆 good,沒有變更時回覆 nochg,因此沒有單一固定字串能同時符合兩者——面板本身的說明也未設定此值 |
| Description | FastDDNS.net |
自由文字,供你自行參考 |

第 4 步 — 儲存,然後查看狀態欄
點選 儲存並強制更新。回到 Services > Dynamic DNS 清單,Cached IP欄位應該會填入你目前的 WAN 位址。空白項目,或強制更新後仍顯示過時的位址,都表示更新未成功——下面的故障排除表格會說明原因。
關於這個方法,有一點需要了解:它是由事件驅動,而不是每兩分鐘傳送一次心跳。Netgate 記錄了這項服務會在 介面位址變更時
pfSense 也會提供一個預設的 cron 條目,每天 01:01 執行一次 /etc/rc.dyndns.update,作為安全網。所以失敗的更新確實會被重試——只是不會在幾分鐘內。當你需要立即更新時,使用儲存並強制更新。
如果你希望從自己的腳本驅動相同的端點,參數已在 FastDDNS 客戶端 API 頁面 上有文件說明。
下面的操作示範錄影較舊,因此面板看起來與這裡的截圖不同。欄位和步驟順序都相同。
方法 1 — 單行 crontab 腳本
步驟 1 — 從你的主機名面板複製腳本
在相同的 Firewall pfSense 面板中,複製 Method 1 下方的方框內容。它是一行以相同更新 URL 為核心的指令:
((crontab -l >/dev/null && crontab -l | grep -i "client.fastddns.net") || ((crontab -l; echo '*/2 * * * * fetch "URL" -o /dev/null || curl -s "URL"') | crontab -; fetch "URL" -o /dev/null || curl -s "URL"; printf "\n\nAdded Dynamic DNS Script to crontab successfully\n\n"; exit 1;)) && printf "\n\nFastDDNS is available \n\n";在實際的那一行中,上述每個 URL 都是方法 2 第 1 步中的完整更新 URL。請從面板複製,不要手動組合。

步驟 2 — 執行它
將該行貼到 Diagnostics > Command Prompt 的 執行 Shell 指令 方框中,然後按 執行。使用 SSH 工作階段或主控台的選項 8 也同樣可以。
Netgate 自己的警告適用於此頁面:它會以完整權限執行你貼上的任何內容,而錯誤的命令可能導致防火牆無法使用。請只貼上面板中的那一行,不要貼其他內容。命令也必須執行完畢並返回——這一行可以做到,因此可在此安全執行。
步驟 3 — 這兩條訊息的含義
在輸出結尾尋找以下兩行之一。它們代表不同的情況:
| 訊息 | 發生了什麼事 |
|---|---|
| Added Dynamic DNS Script to crontab successfully | crontab 中沒有 FastDDNS 條目,因此新增了一條,並立即發送更新 |
| FastDDNS is available | 已經有一條目,因此未做任何變更 |
檢查只是單純的 client.fastddns.net 的簡單 grep。這可防止你安裝同一個工作兩次——但這也意味著如果你在同一防火牆上新增第二個 主機名。這可避免你重複安裝同一個工作,但也表示如果你在同一個防火牆上新增第二個
這也是為什麼第二次運行會打印超過一行的原因:會打印出一個匹配項,而匹配的那一行就是 cron 條目,其中完整包含了你的更新 URL — 包括用戶名和密碼。如果你是在別人面前運行這個命令或者將輸出貼到工單中,那就是需要刪掉的那一行。
排定的那一行本身會運行 fetch排定的那一行本身會執行 curl。
步驟 4 — 在依賴它之前值得知道的限制
pfSense 將自己的排程任務保存在 config.xml,並從那裡重建系統 crontab。使用 crontab - 新增的工作則位於 root 使用者的 crontab 中;pfSense 不會管理它,也不會將它包含在設定備份中。這會帶來兩個後果:
- 還原設定或重新安裝防火牆後,這項工作就不會存在;方法 2 的 Dynamic DNS client 則會保留。
- 如果 System > Advanced > Miscellaneous 為
/tmp,而/var,root crontab 就會位於 RAM 中。Netgate 的文件指出,從這些 RAM 磁碟重新啟動後,只會保留 RRD 資料、DHCP 租約、日誌和 Captive Portal 資料;crontab 不在其中。
這些都不表示方法 1 有問題。它適合讓更新在 現在 立即執行,但不適合放著長期使用。如果你想讓 pfSense 真正保留 cron 工作,請安裝 Cron 套件,並透過它新增同一行。
另一段較舊的錄影,展示先前面板設計中的腳本方式。
檢查主機名是否真的在更新
無論你使用哪種方法,都應從三個角度加以確認。
在 pfSense 中,Services > Dynamic DNS 會顯示每個條目的 快取的 IP——它應該與您的 WAN 位址相符。如果您改用方法 1,請確認該工作存在,並從 shell 手動執行一次:
crontab -l
fetch -o - "PASTE-YOUR-UPDATE-URL-HERE"第二個命令會列印伺服器的回覆。如果位址剛剛變更,回覆應該以 good 開頭;如果位址已經正確,則以 nochg 開頭——FastDDNS 可能會附加它記錄的位址。 badauth 是唯一能直接確定問題的回覆:使用者名稱或更新密碼錯誤。任何其他回覆,或完全沒有回覆,都無法自行說明問題——請閱讀實際收到的內容,然後檢查系統日誌。
從外部解析主機名,並將其與您的公共位址比較:
nslookup myhome.fastddns.net最後,您的主機名稱面板會顯示一個 最後更新 時間戳記,從防火牆首次回報時的 Not yet updated 開始變更。FastDDNS 會在 60 秒內套用新位址,但本機 DNS 快取可能會稍微保留舊位址。
排解 pfSense DDNS 問題
| 您看到的情況 | 原因 | 應該怎麼做 |
|---|---|---|
回覆是 badauth |
URL 中的使用者名稱或更新密碼錯誤 | 再次從面板複製 Update URL;如果您原本使用其他提供者,請參閱替換 No-IP 或 DynDNS 伺服器地址 的指南 |
| 保存後 Cached IP使用 | 客戶端無法連線到更新主機,或 URL 在貼上時被截斷 | 使用 保存並強制更新,然後讀取 Status > System Logs > System > General;在條目中啟用 Verbose Logging 可顯示完整的交換內容 |
| 主機名稱解析到 IPv6 位址 | 更新主機是透過 IPv6 連線,因此記錄的是該位址 | 勾選 Force IPv4 DNS Resolution 並強制更新 |
| 每次更新都被記錄為失敗,即使主機名稱是正確的 | Result Match 設定為固定字串,回覆在 good 和 nochg清除 |
清除 Result Match 欄位以關閉結果檢查 |
| 方法 1 可行,但在重新啟動或還原設定後停止運作 | ,而且可以放在 RAM 磁碟上config.xml 之外,並可以放在 RAM 磁碟上 |
改用方法 2,或透過 Cron 套件新增該行 |
| DDNS 正常運作;網路路徑則未通 | 新增 NAT 和防火牆規則,然後從外部使用 | 新增 NAT 和防火牆規則,然後使用 Port Check 從外部測試 |
| 主機名稱解析的位址不是你的公共 IP | 一切本來運作正常,但幾個月後停止了 | 將儀表板上的 WAN 位址與公共 IP 查詢結果比較;如果不同,向你的 ISP 要求一個公共 IP |
| 從你的帳戶續期,或升級到 | 免費主機名稱每年續期一次,臨時名稱則有效 30 天 | 從你的帳戶續期,或升級到 主機名稱不會到期的方案 |
請將更新 URL 保密
更新 URL 會以明文查詢參數的形式包含你的 hostname、使用者名稱和更新密碼。這些資訊會以這種形式儲存在 pfSense 設定中;使用方法 1 時,也會儲存在 crontab 中。任何能讀取設定備份的人都能看到這些憑證。請將 pfSense 設定匯出檔視同密碼檔案保管,切勿將未遮蔽的更新 URL 貼到論壇文章或支援工單中。如果你已經這麼做,請在帳戶中變更更新密碼,並重新設定該項目。
常見問題
我應該使用動態 DNS 客戶端還是 cron 腳本?
對於任何打算長期保留的設定,請使用 Services > Dynamic DNS 下的 Dynamic DNS client。pfSense 會將其儲存在設定中,因此它會包含在備份內,重新安裝後也會恢復。cron script 是快速完成第一次更新的方法,但 pfSense 不會管理這項工作,重新啟動或還原設定後可能會遺失。
我需要為 DDNS 更新本身開啟 port 嗎?
不需要。pfSense 會與 FastDDNS 建立出站 HTTPS 連線,因此更新不需要入站規則。不過,對於你想透過 hostname 存取的服務,仍需要設定 port forwarding 和防火牆規則,例如 RTSP 的 554 port 或攝影機的 Web port。
為什麼面板要求我強制使用 IPv4 解析?
因為 FastDDNS 會記錄你的請求抵達時所使用的 IP。如果 pfSense 將更新主機解析為 IPv6 地址並透過 IPv6 連線,FastDDNS 記錄的就是該地址,導致你的 A record 最終錯誤或為空。強制使用 IPv4 解析,可讓更新使用與你要發布的地址相同的通訊協定。
如果我的 ISP 使用 CGNAT,這會有效嗎?
不會。使用電信級 NAT 時,你的防火牆沒有自己的公開 IP,因此 hostname 沒有可用來指向的地址,而且 ISP 會封鎖傳入連線。DDNS 解決的是地址會變動的問題,不是沒有地址的問題。請向 ISP 申請公開 IP,或使用能建立出站隧道的服務。
在網路邊緣執行其他設備?相同的更新 URL 可用於任何能定期發出 HTTPS 請求的設備,包括 MikroTik RouterOS 設置。





