手邊有一個專案,需要把原本在 AWS Route 53 上的設定搬到 Google Cloud DNS 上。
原本以為只是單純的搬移,但中間碰了不少壁,所以寫起來記錄。
處理的域名馬賽克為 example.com
方便記錄。
首先是比對 AWS Route 53 上的設定,和現有的自架 DNS 設定值。
發現 AWS Route 53 上有不少過時的設定值,所以調整了一下,讓 AWS Route 53 的 A CNAME 都和自架 DNS 上的記錄相同。
接下來是把設定值匯入 Google Cloud DNS 上。
在 Google Cloud 開一個新的專用的 Cloud DNS 專案方便控管,並啟用該專案的 Cloud DNS API。
點「建立可用區」建立一個新的 zone ,要注意的是區域名稱只能是小寫,而且不能有空格。倒是可以有 -
(dash) 。DNS 名稱直接輸入要遷移的網域。
按下建立之後,就會自動產生它的 SOA 和 NS 。這兩組的值是 Google Cloud DNS 用的,所以要匯入現有的 BIND zone 檔案時,要記得清掉原本的 SOA 和 NS 設定。
此外還得把 BIND zone 檔案處理一下:tab 換成 space ,確認檔案是 UTF-8 格式存檔;檔名可以不用是 .zone 結尾,但在下指令的時候要指定它是 BIND zone 。
處理好了之後,在本機端把設定檔用 gcloud CLI 匯入:
gcloud dns record-sets import example.com.zone \
--zone="example-com" \
--zone-file-format \
--delete-all-existing \
--quiet
完成以後到 Google Cloud Console 檢查一下設定。原本處理好的 BIND zone 檔案上 git 備用。
當然這麼簡單就不用記下來了,後面才是撞牆的部份。
測試了一下設定有沒有生效:
# Cloudflare
dig @1.1.1.1 api.example.com
# Google Public DNS
dig @8.8.8.8 api.example.com
# Google Cloud DNS 給的 NS 設定
dig @ooo.ooo.mmm.ooo api.example.com
看起來沒什麼問題,等了一會兒以後用 whois 看看會發生什麼事。
果然就出事了。😅
研究了一下,除了原本的 AWS Route 53 設定外,前人還另外架了好幾台 DNS 伺服器。
同事提醒說還有防火牆要處理,於是 ssh 進去看了看防火牆。
照著前人留下的筆記看不出端倪,於是請了工作好朋友 ChatGPT 和 Gemini 來幫忙通靈 🤖⚡️
在防火牆某個設定裡找到內網還有兩台 DNS 伺服器,再 ssh 進去內網的伺服器。
找到設定檔,在 pass 給外網的 DNS 處理之前,先加上這段攔截掉:
forward-zone:
name: "example.com"
forward-addr: ooo.ooo.mmm.ooo # GCP Cloud DNS 第 1 台反查 IP
forward-addr: ooo.ooo.nnn.ooo # 第 2 台
forward-addr: ooo.ooo.ppp.ooo # 第 3 台
forward-addr: ooo.ooo.qqq.ooo # 第 4 台
都設定好了以後,研究了一下 DNSSEC 是什麼,然後把它在 Google Cloud DNS 上設定為開啟;點右上角的註冊商設定,把公開金鑰依照格式貼到網域供應商 Gandi 對應的格子裡,選擇對應的格式,接下來就是等生效。之後應該會在建立可用區時就順便開啟及處理它。