自架Pi-hole,AdGuard Home,這類透過domain name解析來擋廣告的服務時,最容易遇到Port 53被佔用的情況。
原因
出現這樣的問題應該是systemd-resolved這個service佔用了這個埠,systemd-resolved像是在你的主機上啟動了個DNS server服務
systemd-resolved處理主機發出的DNS query的動作如下:
- 應用程式會去讀取
/etc/resolv.conf,發現裡面寫著nameserver 127.0.0.53 - 應用程式把 DNS 請求發送給本地的
127.0.0.1:53(也就是systemd-resolved) - systemd-resolved 收到請求後,檢查自己有沒有快取
- 有快取:直接回
- 無快取:它會幫你把請求轉發給真正的外部 DNS 伺服器(例如路由器分配的 DNS、8.8.8.8 或 1.1.1.1),拿到答案後快取起來,再回傳給你的應用程式
如何釋放port 53被佔用
停用 systemd-resolved 服務
|
|
更換真實的 DNS 檔案
因為 systemd-resolved 停用了,原本指向 127.0.0.1:53 的軟連結 /etc/resolv.conf 會失效,必須手動建立一個真實的檔案並填入外部 DNS
- 刪除舊有軟連結
|
|
- 增加一個
/etc/resolv.conf
|
|
- 內容寫入要使用的DNS server
|
|
這樣Port 53就不會被佔用,domain name查詢的功能也不會因此失效