在 DSM 中自動更新 CloudFlare 的 DNS 記錄

如果你的網路提供商沒有為你提供固定 IP,你的 IP 有可能在幾天內就會變化一次

例如永遠擋在你前面的中華電信,如果你申請她的光纖網路,而且上傳帶寬剛好在 100M 包含或者以上

那麼他是沒有辦法提供你固定 IP 的,這是因為商業考量,如果有這麼大頻寬又有固定 IP

就可以拿來架站了,沒人會去申請他們價格比家用貴一倍以上的企業寬頻了。。。

如果你是中華電信網路,上傳沒達到 100M,那你可以直接到[官方網頁][1]申請固定 IP,並關掉此網頁

現在市面上普遍免費提供的 DDNS 域名都不怎麼好記,而且沒有自己的特色

像是如果你剛好手上有個 peter.com 或者 abc.com  ,這種有自己名字又好記的域名

那你可以弄個 nas.peter.com 或者 nas.abc.com ,是不是非常好記呢?

[Synology DSM][2] 裡面預設已經有提供不少 DDNS 服務商,但是缺少 CloudFlare

/media/2017/10/snipaste_20171009_130258.png

CloudFlare 是一個提供加速以及安全的服務商,如果你有網站或者伺服器,趕快去 Google 一下

CloudFlare 官方提供的 API 裡面有 DNS 相關功能,於是就有人寫一個 [script][3] 可以直接在DSM控制面板中直接調用

每隔一段時間或者每次 DSM 一發現外部IP有變化,他就會自動去更新一下,真是非常方便!

PS:Docker 用戶可以去參考另外一篇,比較容易的版本

使用SSH服務登入DSM

先登入你的DSM網頁管理頁面

  1. 打開控制台

  2. 找到「終端機 & SNMP」頁面

  3. 勾選啟動 SSH 功能

  4. 然後點一下套用

/media/2017/10/snipaste_20171009_165702.png
  1. 打開你的 Terminal App(macOS 可以用 Spotlight 搜「Terminal」然後打開,Windows 用戶可以下載 [MobaXterm][4])

輸入以下指令:(DSM IP 請換成你自己的)

接著系統會讓你輸入 admin 密碼

輸入完以後再執行下面指令:(切換成 root 身份)

1
$ sudo -i

再輸入一次 admin 的密碼

在 Terminal 中執行幾條指令

  1. 下載 cloudflareddns.sh 檔案到 DSM 的 /sbin/ 文件夾中,拷貝粘貼以下指令:
1
$ wget https://raw.githubusercontent.com/joshuaavalon/SynologyCloudflareDDNS/master/cloudflareddns.sh -O /sbin/cloudflaredns.sh
  1. 賦予剛剛下載的檔案可以被執行的權限
1
$ chmod +x /sbin/cloudflaredns.sh
  1. 把 cloudflaredns.sh 加入 DSM 控制台中的 DDNS 選項中

使用「vi 編輯器」打開 DSM 控制台的服務供應商清單

1
$ vi /etc.defaults/ddns_provider.conf
/media/2017/10/snipaste_20171010_095615.png

打開後用鍵盤的方向鍵往下移動,移動到隨意兩個服務中間,按下鍵盤「a」進入編輯模式

然後拷貝以下內容:

1
2
3
[Cloudflare]
modulepath=/sbin/cloudflaredns.sh
queryurl=https://www.cloudflare.com/

在隨意兩個服務中間,按幾個 Enter 換行貼上,完成後應該會跟下圖一樣

/media/2017/10/snipaste_20171010_095832.png

貼上後,按下鍵盤「ESC」,退出編輯模式,然後輸入「:wq」跟按下「Enter」,就能保存檔案並退出 vi 編輯器

PS:如果不小心編輯失敗搞砸了,可以輸入「:q!」跟按下「Enter」,就可以不保存檔案退出編輯,重新再來一次

從CloudFlare獲取必須的資料

  1. 打開你想要更新的 [CloudFlare Overview][5] 頁面,如下圖可以看到你的 Zone ID
/media/2017/10/snipaste_20171010_103851.png
  1. 再到 [CloudFlare Profile][6] 頁面,在API欄位找到「Global API Key」,點一下右邊的「View API Key」藍色按鈕,就能看見
/media/2017/10/snipaste_20171010_105111.png
  1. 回到Terminal的視窗,我們要利用以上兩個資料,來獲取最後一個

根據自己的帳號,替換以下指令中的資料:(包含[ ],一起換成自己的)

1
2
3
4
$ curl -X GET "https://api.cloudflare.com/client/v4/zones/[Zone ID]/dns_records" \
-H "X-Auth-Email: [Email]" \
-H "X-Auth-Key: [API Key]" \
-H "Content-Type: application/json"

在返回的資料中有一個「id」,這串東西就是你的 Record ID

/media/2017/10/snipaste_20171010_111212.png

以上所有資料請妥善保存,這個就像是你的 CloudFlare 密碼一樣,不要隨意洩露

  1. 接下來根據上面步驟獲得的各種資料 ID,我們要編輯修改剛剛放到 DSM 中的cloudflareddns.sh

同樣在 Terminal 中,確定是在 DSM 裡面,輸入以下指令:

1
$ vi /sbin/cloudflaredns.sh

跟剛剛一樣,打開後按下鍵盤的「a」進入編輯模式

/media/2017/10/snipaste_20171010_113203.png

RECTYPE 是 DNS 的種類,可以用的選項有:A, AAAA, CNAME, TXT, SRV, LOC, MX, NS, SPF

RECID 是 Record ID,剛剛在步驟 3 獲取到的,直接拷貝粘貼上去

ZONE_ID 是剛剛在步驟 1 獲取到的 Zone ID,也是直接拷貝粘貼即可

TTL 是 DNS 更新時間,預設是 1,也就是 CloudFlare 的「Automatic」

PROXY 是這個域名有沒有透過 CloudFlare 轉發,有的話「true」,若無改成「false」

以上修改完畢後,同樣按下鍵盤「ESC」按鈕退出編輯模式,然後輸入「:wq」按下「Enter」,保存並退出

在 DSM 控制台 DDNS 新增 CloudFlare 服務

  1. 打開 DSM 的控制台

  2. 到「外部存取」

  3. 「DDNS」頁面,點選「新增」

/media/2017/10/snipaste_20171010_115506.png

設定頁面這邊只剩下三個資料要填:

/media/2017/10/snipaste_20171009_1330353.png

主機名稱:這邊填寫你在 CloudFlare 的域名

使用者名稱/電子郵件:填寫你在 CloudFlare 註冊的 email

密碼/金鑰:這邊填寫剛剛上面從 CloudFlare 獲取到的 Global API Key

以上就完成全部設定囉!其實應該去建議 Synology 直接內建,這樣我們就不用這樣搞來搞去了啊~