跳至主要內容
CJCJ Kuo

全站文章搜尋

輸入關鍵字即刻在靜態索引中快速搜尋
↑↓ 導航 · Enter 選取前往獨立搜尋頁 →
Raspberry PI PPPoE 撥號完成後自動更新 Google 動態 DNS
資訊技術••約 2 分鐘•527 字

Raspberry PI PPPoE 撥號完成後自動更新 Google 動態 DNS

本文目錄共 5 節

網域在 Google domains 上購買有提供 DNS 代管服務,本網站的主機是使用樹梅派架設 LEMP,對外中華電信光纖上網只有一個固定IP,使用浮動IP來對外服務每72小時就會中斷一次。

要確保網站可以提供長期服務,當偵測到IP有所變化就會自動更新主機位置給 Google 的動態 DNS,讓全世界的人都可以正確地連入 Server 。

設定Google 動態 DNS

登入 Google Domains 管理介面 會看到以下畫面,選 DNS 頁籤進入設定畫面。

Google Domains 管理介面左側選單點選 DNS 頁籤

在右側設定框中會看到設定 綜合紀錄 將下拉式選單選到 動態DNS ,並在下拉選單右側填入網域名稱,完成後按下新增,示範內容是 test 請根據實際內容填寫。

Google Domains 綜合紀錄設定動態 DNS 與網域名稱畫面

下方會出現設定的動態DNS網域資料欄是空白 0.0.0.0 代表尚無設定資料,點擊紅框中的查看憑證。

Google Domains 動態 DNS 列表點選查看憑證選項

使用者名稱及密碼的內容會轉呈明碼,這兩個值用來變更網域的資料把值抄下。
此內容切記勿公開在網路上任何地方,一旦公開有心人是可以直接變更指向的站台造成訪問者的風險。

Google Domains 顯示動態 DNS 使用者名稱與密碼憑證畫面

將上方的三個取得的使用者名稱、密碼及網域填入下方腳本。

Shell 腳本

將腳本放入主機中修改檔案中的三個參數,username、API_key 和 domain,並更改腳本執行設定執行權限為 755。

#!/bin/bash
#Raspberry PI 開機後自動更新 Google Domains
# v1.0.0 BY CJK https://www.cjkuo.net/

#設定檔
username="填入使用者名稱"
API_key="填入密碼"
domain="填入網域"

#更新網域IP
set_pppoe(){
#比對目前記錄
pppoe_ip="$(ip address show ppp0 | grep inet |awk '{print $2}')"
dns_A_record=$(dig -t A +short "$domain")
if [ "$dns_A_record" != "$pppoe_ip" ]; then
    #不同需更新
    curl -X POST "https://$username:$API_key@domains.google.com/nic/update?hostname=$domain&myip=$pppoe_ip"
fi
}

while [ "$(ip addr show ppp0 2>&1 | grep -c inet)" = "0" ]
do
    # PPPoe 撥號尚未完成
    sleep 2
done
set_pppoe

執行腳本

手動執行腳本 IP 有變更會出現 Good ,沒有變更IP會回應 nochg。

XXX@XXX$ ./set_domains_test.sh 
good 36.XX.XX.146
XXX@XXX$ ./set_domains_test.sh 
nochg 36.XX.XX.146

更新完成後可以在Google 動態 DNS看到資料欄位出現主機 IP,DNS 紀錄會同步到全球。

Google Domains 動態 DNS 成功更新並顯示主機 IP 位址畫面

設定開機執行

需要更新紀錄時手動執行,也可以設定開機執行腳本會自動更新DNS紀錄。
設定開機執行腳本請參考文章”使用 Systemd 開機自動執行腳本,棄用 rc.local”

參考來源:

查看此系列所有文章 →
CJ Kuo (郭仕杰)

CJ Kuo (郭仕杰)

創辦人兼主筆

熱愛軟體架構、DevOps、系統調優與新技術探索的工程實踐者,也會寫寫投資和生活。

獨立技術專刊推播

訂閱技術電子報

有新文章發布時寄送到您的信箱,不發送垃圾信。