如何在 macOS 系统中配置 DNS over HTTPS

本指南将帮助您在 macOS 系统中设置和配置 DNS over HTTPS (DoH),提供从基础设置到高级配置的完整说明。

前置条件

  • macOS 10.15 (Catalina) 或更高版本
  • 管理员权限
  • 稳定的网络连接
  • 基本的命令行知识

系统级配置

步骤 1:使用系统偏好设置

  1. 点击 Apple 菜单
  2. 选择”系统设置”(或”系统偏好设置”)
  3. 点击”网络”
  4. 选择当前网络连接
  5. 点击”详细信息…”
  6. 选择”DNS”标签页

步骤 2:配置 DNS 服务器

  1. 点击”+“按钮添加 DNS 服务器
  2. 输入以下服务器地址:
    1.1.1.1
    1.0.0.1
    2606:4700:4700::1111
    2606:4700:4700::1001

步骤 3:使用终端配置

打开终端,运行以下命令:

# 查看当前 DNS 设置
scutil --dns

# 配置 DNS 服务器
networksetup -setdnsservers Wi-Fi 1.1.1.1 1.0.0.1

# 验证设置
networksetup -getdnsservers Wi-Fi

使用第三方客户端

DNSCrypt-Proxy

  1. 安装
# 使用 Homebrew 安装
brew install dnscrypt-proxy

# 或手动安装
curl -L https://github.com/DNSCrypt/dnscrypt-proxy/releases/latest/download/dnscrypt-proxy-macos-amd64.tar.gz | tar xz
  1. 配置

编辑 dnscrypt-proxy.toml 文件:

listen_addresses = ['127.0.0.1:53']
server_names = ['cloudflare', 'google']
doh_servers = true
require_dnssec = true
require_nolog = true
require_nofilter = true
force_tcp = false
timeout = 2500
keepalive = 30
  1. 启动服务
# 安装启动项
sudo brew services start dnscrypt-proxy

# 或手动启动
sudo dnscrypt-proxy -service install
sudo dnscrypt-proxy -service start

Encrypted DNS Profiles

  1. 创建配置文件

创建 .mobileconfig 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>PayloadContent</key>
    <array>
        <dict>
            <key>DNSSettings</key>
            <dict>
                <key>DNSProtocol</key>
                <string>HTTPS</string>
                <key>ServerURL</key>
                <string>https://cloudflare-dns.com/dns-query</string>
            </dict>
            <key>PayloadDescription</key>
            <string>配置 DNS over HTTPS</string>
            <key>PayloadDisplayName</key>
            <string>DNS 设置</string>
            <key>PayloadIdentifier</key>
            <string>com.example.dns</string>
            <key>PayloadType</key>
            <string>com.apple.dnsSettings.managed</string>
            <key>PayloadUUID</key>
            <string>A1B2C3D4-E5F6-G7H8-I9J0-K1L2M3N4O5P6</string>
            <key>PayloadVersion</key>
            <integer>1</integer>
        </dict>
    </array>
    <key>PayloadDescription</key>
    <string>DNS over HTTPS 配置</string>
    <key>PayloadDisplayName</key>
    <string>DoH 配置</string>
    <key>PayloadIdentifier</key>
    <string>com.example.doh</string>
    <key>PayloadRemovalDisallowed</key>
    <false/>
    <key>PayloadType</key>
    <string>Configuration</string>
    <key>PayloadUUID</key>
    <string>Q1R2S3T4-U5V6-W7X8-Y9Z0-A1B2C3D4E5F6</string>
    <key>PayloadVersion</key>
    <integer>1</integer>
</dict>
</plist>
  1. 安装配置文件
    • 双击配置文件
    • 按照系统提示安装
    • 在系统设置中确认

验证配置

方法 1:使用终端

# 测试 DNS 解析
dig example.com @127.0.0.1

# 检查 DNSSEC
dig example.com @127.0.0.1 +dnssec

# 验证 DoH 服务器
dig whoami.cloudflare CH TXT @127.0.0.1

方法 2:使用系统工具

  1. 打开”网络实用工具”
  2. 选择”查找”
  3. 输入域名进行测试
  4. 检查解析结果

方法 3:在线测试

  1. 访问 DNS 泄露测试网站
  2. 运行标准测试
  3. 验证 DNS 请求路由

故障排除

常见问题

  1. DNS 解析失败

    • 检查网络连接
    • 验证 DNS 设置
    • 重启网络服务
    • 清除 DNS 缓存
  2. 性能问题

    • 选择就近服务器
    • 优化缓存设置
    • 监控响应时间
    • 检查系统资源
  3. 配置文件问题

    • 验证文件格式
    • 检查权限设置
    • 重新安装配置
    • 更新系统版本

系统诊断

  1. 网络诊断
# 测试网络连接
ping 1.1.1.1

# 检查路由
traceroute 1.1.1.1

# 查看网络状态
networksetup -listallnetworkservices
  1. DNS 诊断
# 清除 DNS 缓存
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

# 查看 DNS 配置
scutil --dns

# 测试 DNS 解析
dig +trace example.com

最佳实践

  1. 提供商选择

    • 评估隐私政策
    • 检查服务可用性
    • 考虑地理位置
    • 测试连接速度
  2. 安全建议

    • 启用 DNSSEC
    • 使用可信提供商
    • 定期更新系统
    • 监控异常活动
  3. 性能优化

    • 配置本地缓存
    • 优化超时设置
    • 使用负载均衡
    • 监控系统资源

企业部署

MDM 配置

  1. 创建配置文件

    • 设置 DNS 参数
    • 配置安全选项
    • 定义部署范围
    • 准备签名证书
  2. 部署策略

    • 推送配置文件
    • 监控部署状态
    • 处理错误报告
    • 更新配置

自动化配置

  1. 使用脚本
#!/bin/bash
# 配置 DoH
configure_doh() {
    # 安装必要工具
    brew install dnscrypt-proxy

    # 备份配置
    cp /usr/local/etc/dnscrypt-proxy.toml /usr/local/etc/dnscrypt-proxy.toml.bak

    # 启动服务
    brew services start dnscrypt-proxy
}
  1. 使用配置管理工具
# Ansible 示例
- name: 配置 DNS over HTTPS
  hosts: macos_clients
  tasks:
    - name: 安装 dnscrypt-proxy
      homebrew:
        name: dnscrypt-proxy
        state: present

    - name: 配置 dnscrypt-proxy
      template:
        src: dnscrypt-proxy.toml.j2
        dest: /usr/local/etc/dnscrypt-proxy.toml

下一步

补充资源

注意事项

  1. 系统兼容性

    • 检查系统版本
    • 验证硬件要求
    • 测试软件兼容
    • 评估性能影响
  2. 网络影响

    • 监控网络延迟
    • 评估带宽使用
    • 考虑故障转移
    • 优化路由设置
  3. 安全考虑

    • 保护配置文件
    • 限制访问权限
    • 监控系统日志
    • 定期安全审计
  4. 维护建议

    • 定期更新软件
    • 备份配置文件
    • 监控系统状态
    • 制定应急预案