FortiGate DDNS with DynuDNS

倘若你的 Fortigate 仍有保固的話,可直接使用 Fortinet 內建的 DDNS 服務,要是已無保固的話,仍有 DDNS 的需求的話,可參考 Fortigate DDNS RFC2136 with Dynv6.com 的做法,只是最近不知為何我的 DDNS 更新都沒有正常運作;後續也在查找除了 Dynv6 之外,是否有其他接受 RFC2136 更新方式的 DDNS 服務。

但目前更換 FG60F 之後,仍然希望 DDNS 的方式可以運作,因此,想到了利用 Log 的方式, Fortigate 在 PPPoE 更新 IP 後都會有 event log 紀錄,當有這個 Log 出現後,直接用 Webhook + POST 的方式,來更新 DDNS 的紀錄!

好,看起來很美好,但還是先說一下缺點,目前想到的是以下兩個缺點:

缺點一:倘若你的 Fortigate 設備不只使用一個 PPPoE 介面,那這個方式,可能不適合你,因為我看到的 Log 只有紀錄更新後的 IP 位址,至於能不能再搭配其他的 Log,這部分目前我沒有研究,也沒有想法。

缺點二:因為是使用免費的服務,難保有服務不穩的問題,我也還在觀望此作法相關的穩定性;也是除了用 Fortigate DDNS RFC2136 with Dynv6.com 之外另外的作法。

若是可接受也了解這兩個缺點的狀況,那就開始吧,要是還沒有申請 Dynu 帳號,請自行前往 https://blog.jia543.com/2018/01/dynudns-ddns.html 去參考及申請註冊吧!登入 DynuDNS 後,點選右上角“齒輪”圖案,進入 Control Panel,這邊包含了所有 DynuDNS 的功能~
Dynu Control Panel

接下來我們需要先取得 API Key,因此點選 API Credentials
Dynu API Credentials

可以看到 中間有個 API Key,預設是遮碼顯示,點選後方的 View,即可完整的 API key,將此 API Key 複製出來,等等後續都會用到~
Dynu API-Key

API Key:3eg2Y45V554U2f66734646Xd4Ze44gV3

接著,我們要知道 API 要怎麼運作?語法要怎麼使用?因此點選右上方 Resource > API
Dynu API

點選中間的 Documentation,這邊不會要你查文件,而是會列出相關使用的語法,重點是可以直接測試!! Dynu API Document

既然是線上測試 API 語法,比較重要的是,要先授權一下,因此往下滑在 Implementation 欄位這,右邊有個 “Authorize” 的按鈕,目前鎖頭是開的,表示目前網頁沒有任何的授權(也表示查任何 API 相關的都不會有正常回應的!),點一下 “Authorize” 的按鈕
Dynu API Implementation

api Key 這的 Value 欄位,就將剛剛複製下來的 api-key 貼上,並按一下 “Authorize” 的按鈕,即可完成授權!放心~關掉或離開這個網頁後,就沒了…
Dynu API-Key Authroize

再往下滑一點,可看到 dns GET 的項目,展開這個 GET 項目,看到最右邊有 “Try it out” 按鈕,點一下這個 “Try it out” 按鈕,
Dynu API DNS GET

會出現 “Execute” 的按鈕,再點選 “Execute” 按鈕來執行此 GET API
Dynu API DNS GET Execute

接下來,最主要是取得 id,後續用 POST 更新 DDNS 的話,都會使用到 id,因此先記錄並複製下來,後續查詢可使用。
Dynu DDNS id

id:12013976

好的,知道 id 後,再往下滑,有個 POST,/dns/{id} 的語法,後方描述為 “Update an existing DNS service.”,這個就是更新 DDNS 記錄的主要語法,點選 “Try it out” 按鈕
Dynu DDNS POST

id 這的 Value 欄位:將剛剛上一步得到 id 貼上,
Request body 保持 application/json
Example Value 這邊依照範例上的來更改調整:
name:要使用此 API 更新的 DDNS 名稱
ipv4Address:1.2.3.4 //先測試 1.2.3.4 這個 IP 是否有更新至這個 DDNS 名稱
以下欄位可保留預設的即可。
底下是我的範例:

{
"name": "jiawan1.freeddns.org",
"ipv4Address": "1.2.3.4",
"ttl": 90,
"ipv4": true,
"ipv4WildcardAlias": true,
"allowZoneTransfer": false,
"dnssec": false
}
Dynu DDNS POST request body

確認資訊都無誤後,點選 “Execute”按鈕來執行~
執行後,可看到 code 200 會顯示執行狀況,因此,200 這個欄位是顯示 Success,這樣這個 POST 的行為是成功的,語法也都可被接受!
Dynu API request status

既然成功!就回到 Control Panel 確認 DDNS 資料是否已被更新?!
點選右上角“齒輪”圖案,進入 Control Panel ,再點選 “DDNS Services”
Dynu DDNS Services

可看到目標 DDNS 的 IPv4 位址為剛剛 API 測試所填寫的 1.2.3.4!
Dynu DDNS IP

好的,接下來就得回到 Fortigate 上了!回到一開始說的,當 PPPoE 重新撥號後,會產生 EventLog,有這個 EventLog 後會呼叫 webhook,而這個 webhook 的內容即是 DynuDNS 的 API 內容!換成 Fortigate 上的說法就是 Automation 自動化設定中,一個 Stitch 流程在收到 event 的 Trigger 觸發條件後,Action 發送通知。
這邊從後面設定回來,Automation > Action > Create New 新增一個 Action 動作
Fortigate Automation Action

底下找到 Webhook,點選 Webhook
Fortigate create webhook

Name:自己看得懂的名稱,如:Dynu
Protocol:選 HTTPS
URL:填入 dynu 的 API 網址,

api.dynu.com/v2/dns/{上面得到的id}

Method:剛剛在 Dynu API 測試的語法,其中 ipv4Address 要換成 %%log.assigned%%,這個 log 的內容,可自行前往 Fortinet文件 查看

{
  "name": "你自己的DDynu DDNS 名稱",
  "ipv4Address": "%%log.assigned%%",
  "ttl": 90,
  "ipv4": true,
  "ipv4WildcardAlias": true,
  "allowZoneTransfer": false,
  "dnssec": false
}

HTTP header 這邊要填入兩個數據:

accept: application/jason
API-Key: 你的Dynu DDNS API-Key

確認以上訊息都無誤後,點選 “OK” 完成
Fortigate create Action webhook

接著,來建立 Trigger,點選 Create New 新增一個 Trigger
Fortigate create Trigger

找到 FortiOS Event Log,點選 “FortiOS Event Log”
Fortigate Trigger FortiOS Event Log

Name:自己看得懂的名稱,如:PPPoE-Event
Event:利用搜尋 “ppp” 的方式,找到 PPPoE status report,將 PPPoE status report 選入至 Event 欄位中,這個 status report 內容,想知道更多內容請參考 Fortinet文件 上的說明。
確認以上設定正確後,點選 “OK” 新增
Fortigate Trigger FortiOS Event Log PPPoE status report

Trigger 跟 Action 都完成了,接著來新增一個 Stitch 吧
Name:自己看得懂的名稱,如:Wan1-PPPoE_to_Dynu
Trigger:選擇剛剛新增的 PPPoE-Event
Action:選擇剛剛新增的 Dynu
Delay:如果沒特別設定表示有 eventlog 後,馬上執行 action,我會給予系統 5 秒的延遲時間
確認以上設定正確後,點選 “OK” 完成 Stitch 的新增
Fortigate create Stitch

接下來驗證一下整個過程及設定是否如我們所想像的?
可直接從 Fortigate 上將 wan1 Disable 後再 Enable (此舉會關閉 wan1 的對外連線,請確認此動作不會造成其他的影響!!),wan1 會重新 PPPoE 並取得新的 IP,如畫面中 wan1 取得 114.46.160.118
Fortigate wan1 IP

再回到 Security Fabric > Automation > Stitch,找到剛剛建立的 Wan1-PPPoE_to_Dynu,後方的 Trigger Count 為觸發的次數,目前是 1,表示剛剛的 wan1 重新 enable 後,Trigger: PPPoE-Enent > Action: Dynu
Fortigate stitch status

前往 Dynu 上查看此筆 DDNS 紀錄,沒錯~不是 1.2.3.4 了,而是剛剛 wan1 的 114.46.160.118 了!
Dynu DDNS status

PPPoE 的 Wan1 IP 若有變動的話,Foritgate Stitch 會呼叫 Action 來自動這個 DDNS,一樣不用再特別去記憶 wan1 的 IP 是什麼了!!😁😁😁

這個網誌中的熱門文章

谷村新司-風姿花傳 羅馬拼音歌詞

Fortigate 管理者&VPN 登入啟用 雙因素(二階段)認證