如何在 Linux 上配置 DNS over HTTPS
本指南將幫助您在 Linux 系統上設置和配置 DNS over HTTPS (DoH),涵蓋多種配置方法和最佳實踐。
前提條件
- Linux 操作系統
- 管理員(root)權限
- 基本的命令行知識
- 穩定的網絡連接
使用 systemd-resolved
步驟 1:檢查 systemd-resolved 版本
systemctl --version
systemd-resolve --version
確保版本為 247 或更高,因為這些版本支持 DoH。
步驟 2:配置 resolved.conf
編輯 /etc/systemd/resolved.conf
:
[Resolve]
DNS=1.1.1.1 1.0.0.1
DNSOverTLS=yes
DNSSEC=yes
Cache=yes
DNSStubListener=yes
對於 DoH,添加以下配置:
[Resolve]
DNS=https://cloudflare-dns.com/dns-query
https://dns.google/dns-query
DNSOverTLS=no
DNSSEC=yes
Cache=yes
DNSStubListener=yes
步驟 3:重啟服務
sudo systemctl restart systemd-resolved
sudo systemctl status systemd-resolved
使用 NetworkManager
步驟 1:檢查 NetworkManager 版本
nmcli --version
確保版本支持 DoH 功能。
步驟 2:配置連接
使用 nmcli 配置 DoH:
# 列出當前連接
nmcli connection show
# 修改指定連接
sudo nmcli connection modify "連接名稱" ipv4.dns "1.1.1.1,1.0.0.1" ipv4.dns-over-tls yes
sudo nmcli connection modify "連接名稱" ipv6.dns "2606:4700:4700::1111,2606:4700:4700::1001" ipv6.dns-over-tls yes
步驟 3:應用更改
sudo nmcli connection up "連接名稱"
使用獨立客戶端
dnscrypt-proxy
- 安裝
# Debian/Ubuntu
sudo apt install dnscrypt-proxy
# Fedora
sudo dnf install dnscrypt-proxy
# Arch Linux
sudo pacman -S dnscrypt-proxy
- 配置
編輯 /etc/dnscrypt-proxy/dnscrypt-proxy.toml
:
server_names = ['cloudflare', 'google']
listen_addresses = ['127.0.0.1:53']
max_clients = 250
ipv4_servers = true
ipv6_servers = true
dnscrypt_servers = true
doh_servers = true
require_dnssec = true
require_nolog = true
require_nofilter = true
force_tcp = false
timeout = 2500
keepalive = 30
- 啟動服務
sudo systemctl enable dnscrypt-proxy
sudo systemctl start dnscrypt-proxy
sudo systemctl status dnscrypt-proxy
Stubby
- 安裝
# Debian/Ubuntu
sudo apt install stubby
# Fedora
sudo dnf install stubby
# Arch Linux
sudo pacman -S stubby
- 配置
編輯 /etc/stubby/stubby.yml
:
resolution_type: GETDNS_RESOLUTION_STUB
dns_transport_list:
- GETDNS_TRANSPORT_TLS
tls_authentication: GETDNS_AUTHENTICATION_REQUIRED
tls_query_padding_blocksize: 128
edns_client_subnet_private: 1
round_robin_upstreams: 1
idle_timeout: 10000
listen_addresses:
- 127.0.0.1@53
- 0::1@53
upstream_recursive_servers:
- address_data: 1.1.1.1
tls_auth_name: "cloudflare-dns.com"
- address_data: 1.0.0.1
tls_auth_name: "cloudflare-dns.com"
- 啟動服務
sudo systemctl enable stubby
sudo systemctl start stubby
sudo systemctl status stubby
驗證配置
方法 1:使用 dig
# 測試 DNS 解析
dig @127.0.0.1 example.com
# 檢查 DNSSEC
dig @127.0.0.1 example.com +dnssec
# 驗證 DoH 服務器
dig @127.0.0.1 whoami.cloudflare CH TXT
方法 2:使用 resolvectl
# 查看當前 DNS 設置
resolvectl status
# 測試 DNS 解析
resolvectl query example.com
# 檢查 DNSSEC
resolvectl query --dnssec example.com
方法 3:在線測試
- 訪問 DNS 洩漏測試網站
- 運行全面測試
- 驗證 DNS 請求路由
故障排除
常見問題
-
解析失敗
- 檢查網絡連接
- 驗證配置文件
- 檢查服務狀態
- 查看系統日誌
-
性能問題
- 選擇最近的服務器
- 優化緩存設置
- 監控響應時間
- 檢查系統資源
-
兼容性問題
- 更新軟件包
- 檢查依賴項
- 驗證系統要求
- 測試替代配置
日誌分析
- 系統日誌
# 查看 systemd-resolved 日誌
journalctl -u systemd-resolved
# 檢查 NetworkManager 日誌
journalctl -u NetworkManager
# 查看 dnscrypt-proxy 日誌
journalctl -u dnscrypt-proxy
- 網絡診斷
# 測試網絡連接
ping 1.1.1.1
# 檢查 DNS 解析
nslookup example.com
# 驗證 DNSSEC
dig example.com +dnssec
最佳實踐
-
提供商選擇
- 評估隱私政策
- 檢查服務可用性
- 考慮地理位置
- 測試連接速度
-
安全建議
- 使用可信提供商
- 啟用 DNSSEC
- 定期系統更新
- 監控網絡活動
-
性能優化
- 選擇最近的服務器
- 優化緩存設置
- 監控性能指標
- 定期維護
企業部署
系統範圍配置
-
創建配置文件
- 設置 systemd-resolved
- 配置 NetworkManager
- 部署客戶端軟件
-
部署策略
- 使用配置管理
- 實施監控
- 計劃維護窗口
-
維護管理
- 定期更新
- 性能監控
- 問題追蹤
- 備份程序