使用ddclient來自動更新DNS紀錄

在台灣的電信商環境,大部分給的都是浮動IP位置或是1個固定IP位置+7個浮動IP,雖然這也有好處,不過造成想在家架伺服器的人出現相當麻煩的問題,例如要固定時間手動更新DNS紀錄,才能讓網站跑起來,不過ddclient就能在這時候派上用場。

ddclient是一套DDNS套件,DDNS的全名就是Dynamic DNS,中文翻譯叫做動態DNS,他能幫助你在IP變更時自動更新DNS紀錄,不過這取決於你的域名註冊商或是DNS廠商是否支援。本篇使用Google Domain來講解,Google Domain是有支援DDNS的。

在Google Domain的綜合紀錄欄位底下,我們選擇 動態DNS ,並輸入你想要的子域名,在按下 新增 按鈕。

001.png

這時候下方就會出現了一筆紀錄,上面記載著使用者名稱、密碼及子域名名稱,不過這時候後面的IP為0.0.0.0,所以這時候就要進系統設定囉!

002.png

SSH後,先安裝libio-socket-ssl-perl套件以及ddclient

sudo apt-get install libio-socket-ssl-perl
sudo apt-get install ddclient

在安裝ddclient的同時,會開始出現設定畫面,第一個設定如果是使用Google Domain請選擇 other ,其他用戶請參照文件設定

003.png

接著輸入 domains.google.com,在按下enter

004.png

接著選擇dyndns2

005.png

接著就會要求你輸入Username,這時候將Google Domain給的使用者名稱帶進來

006.png

接著是Password,一樣把Google Domain的密碼帶進來

007.png

在輸入一次密碼

008.png

這時候要求你選擇介面卡,你可以透過 ifconfig 來查詢介面卡名稱,並選擇你想要的,而我這邊是用 pppoeconf 撥號的,預設是ppp0,但如果你不喜歡用這種方式的,你可以先隨便輸入例如:eth0,而後面會解說其他方式的作法

009.png

接著請輸入完整的網域名稱,例如 ddns.example.com

010.png

按下enter後,安裝程式就會跑完了,那這邊來講解詳細的設定
主要的設定檔案會存放於/etc/ddclient.conf,接著使用vim來編輯他

sudo vim /etc/ddclient.conf

你的畫面可能會長成以下的樣子,接著會用註解的方式說明

# Configuration file for ddclient generated by debconf
#
# /etc/ddclient.conf

protocol=dyndns2  //使用dyndns2的協議
use=if, if=ppp0  //使用ppp0這個介面卡上的IP位置
server=domains.google.com  //server是domains.google.com
login=***  //***是你的使用者名稱
password='******'  //******是你的密碼,記得要用 '' 包著
ddns.example.com  //這是你的網域名稱

以下是可選的指令,可以依照你的需求更改

daemon=1m  //每1分鐘檢查一次IP是否更改,你可以改成其他的
ssl=yes  //啟用SSL,有些域名註冊商會要求使用,例如:Google Domain
use=if , if=ppp0  //寫法1:使用ppp0這個介面卡上的IP位置
use=web , web=https://ipinfo.io/ip  //寫法2:使用IPinfo回傳的IP位置

接著存檔後就可以檢查看看是否有更新了,以下介紹幾條有用的指令

sudo systemctl start ddclient  //啟動ddclient
sudo systemctl enable ddclient  //開機時自動啟動ddclient
sudo systemctl restart ddclient  //重新啟動ddclient
sudo systemctl stop ddclient  //停止ddclient

如果你第一次設定,啟動後並沒有自動更新DNS紀錄的話,可以使用以下指令,這是Debug模式,可以檢視你設定的是否正確

sudo ddclient -daemon=0 -debug -verbose -noquiet

如果成功的話,最後一行可以看到類似以下的回應

SUCCESS:  updating ddns.example.com: good: IP address set to 1.2.3.4