基于 Surge 的 DNS 优化指南

September 27, 2023

要获得良好的网络冲浪体验,DNS 设置是至关重要的。本文主要介绍如何使用 Surge 来提高 DNS 隐私和安全性,特别是在复杂的网络环境下,并分享一些经验,其中的原理也可以应用到诸如 Clash、Shadowrocket、Quantumult X 之类的软件。

Host 配置

Host 配置决定了你访问一个域名时 surge 如何解析这个域名的 DNS 记录,想获得高效安全的 DNS 解析体验,首先需要先根据你所处的网络环境配置合适的 Host 规则,先看一个配置示例:

[Host]
local.example.net = 127.0.0.1
local.xxx.net = 1.1.1.1

*xxxx-inc.com = server:system
*example*.com = server:system

*.* = server:https://223.6.6.6/dns-query

各种规则可以总结归类为三个梯队,优先级从上到下:

  1. 本地开发测试域名:直接将域名绑定到指定 IP
  2. 企业内部域名:用系统 DNS 解析(server:system),以保障可用性
  3. 公网域名:排除上述两种之后,剩下的就是一些公网域名了,可以考虑用 DNS Over HTTPS 或脚本自定义解析

需要注意的是,只有 server:system 才会遵守本地 /etc/hosts 文件里的映射,以后如果遇到配置了 /etc/hosts 不生效,可以检查对应域名是否在 surge 里指定了其他服务器解析。

减少本地 DNS 解析

对于希望走代理的请求,应该尽量避免它们在本地触发 DNS 解析,最好将你常用的需要代理的网站加到 surge 的规则列表中,例如:

[Rule]
DOMAIN-SUFFIX,baidu.com,📡 Proxy
DOMAIN-SUFFIX,qq.com,📡 Proxy

如果你有大量域名需要代理,可以使用 Surge 提供的 rule-set 或者 domain-set 将这些规则和域名维护到单独的文件中,通过 URL 来引用和自动更新,例如:

# 自定义代理域名
RULE-SET,https://ruleset.example.com/proxy.txt,📡 Proxy

# GitHub 项目维护的代理域名
DOMAIN-SET,https://cdn.jsdelivr.net/gh/Loyalsoldier/surge-rules@release/proxy.txt,📡 Proxy

按照上述设置后,访问这些域名将不会在本地触发 DNS 解析,请求会直接发送到代理服务器,由它负责 DNS 解析,这样既可以提升隐私也可以获得更好的 DNS 解析结果。

好的 surge 配置应该尽量避免在前面的规则触发 DNS 解析,将需要触发 DNS 的规则尽量放置的末尾,下面是一个示例:

DOMAIN-SUFFIX,github.com,📡 Proxy
PROCESS-NAME,go-ipfs*,📡 Proxy
USER-AGENT,Figma,📡 Proxy

IP-CIDR,66.197.128.0/17,📡 Proxy,no-resolve

IP-CIDR,23.246.0.0/12,DIRECT
RULE-SET,LAN,DIRECT
GEOIP,CN,DIRECT
  1. 域名、UA、ProcessName 等不需要触发 DNS 解析的规则放第一梯队
  2. 包含 no-resolve 参数的规则不会触发 DNS 解析,可以放第二梯队,
  3. 最后是 IP-CIDR、LAN、GEOIP 这些必须触发 DNS 解析的规则

更多参考

如果你喜欢我的内容,请考虑请我喝杯咖啡☕吧,非常感谢🥰 。

If you like my contents, please support me via BuyMeCoffee, Thanks a lot.