如何在 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

  1. 安裝
# Debian/Ubuntu
sudo apt install dnscrypt-proxy

# Fedora
sudo dnf install dnscrypt-proxy

# Arch Linux
sudo pacman -S dnscrypt-proxy
  1. 配置

編輯 /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
  1. 啟動服務
sudo systemctl enable dnscrypt-proxy
sudo systemctl start dnscrypt-proxy
sudo systemctl status dnscrypt-proxy

Stubby

  1. 安裝
# Debian/Ubuntu
sudo apt install stubby

# Fedora
sudo dnf install stubby

# Arch Linux
sudo pacman -S stubby
  1. 配置

編輯 /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"
  1. 啟動服務
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:在線測試

  1. 訪問 DNS 洩漏測試網站
  2. 運行全面測試
  3. 驗證 DNS 請求路由

故障排除

常見問題

  1. 解析失敗

    • 檢查網絡連接
    • 驗證配置文件
    • 檢查服務狀態
    • 查看系統日誌
  2. 性能問題

    • 選擇最近的服務器
    • 優化緩存設置
    • 監控響應時間
    • 檢查系統資源
  3. 兼容性問題

    • 更新軟件包
    • 檢查依賴項
    • 驗證系統要求
    • 測試替代配置

日誌分析

  1. 系統日誌
# 查看 systemd-resolved 日誌
journalctl -u systemd-resolved

# 檢查 NetworkManager 日誌
journalctl -u NetworkManager

# 查看 dnscrypt-proxy 日誌
journalctl -u dnscrypt-proxy
  1. 網絡診斷
# 測試網絡連接
ping 1.1.1.1

# 檢查 DNS 解析
nslookup example.com

# 驗證 DNSSEC
dig example.com +dnssec

最佳實踐

  1. 提供商選擇

    • 評估隱私政策
    • 檢查服務可用性
    • 考慮地理位置
    • 測試連接速度
  2. 安全建議

    • 使用可信提供商
    • 啟用 DNSSEC
    • 定期系統更新
    • 監控網絡活動
  3. 性能優化

    • 選擇最近的服務器
    • 優化緩存設置
    • 監控性能指標
    • 定期維護

企業部署

系統範圍配置

  1. 創建配置文件

    • 設置 systemd-resolved
    • 配置 NetworkManager
    • 部署客戶端軟件
  2. 部署策略

    • 使用配置管理
    • 實施監控
    • 計劃維護窗口
  3. 維護管理

    • 定期更新
    • 性能監控
    • 問題追蹤
    • 備份程序

下一步