给iPhone添加配置文件强制使用加密DNS

2026-10-14 20:44≈ 212字≈ 1分钟

一、为什么要用加密DNS

传统 DNS 查询通常没有加密,运营商或网络中的其他环节可能通过 DNS 劫持、篡改解析结果,将用户引导至其他 IP 地址,甚至影响用户对目标网站的正常访问。

即使网站使用 HTTPS,DNS 查询仍可能暴露访问的域名,也可能在连接建立前遭到干预。更讽刺的是,HTTPS 证书体系本身也曾经出现过与中国相关机构有关的信任危机。2015 年,CNNIC (中国互联网络信息中心)未经授权签发了覆盖 Google 域名的证书,随后遭到主流浏览器取消信任,2016 年起,另一家中国证书机构WoSign 及其关联机构 StartCom 又因未经授权签发证书、证书签发日期回填等问题,被 Google Chrome 和 Mozilla Firefox 逐步取消信任。

我看他们现在的信用度,估计在大街上扫个充电宝都扫不出来了。所以,当我们面对 DNS 劫持、解析结果被篡改等风险时,使用 DoH 加密 DNS 是一种合理的防护措施。毕竟,不能因为某个东西声称自己值得信任,就放弃对技术风险的防范。

在家里就比较容易实现,无论是在路由器上还是Nas上都可以通过DNS服务器来做DoH轮询,比如把阿里云和Cloudflare的公共加密DNS做轮询,然后路由器DNS下发直接指向家里的DNS服务器就可以了。

但是手机上就比较麻烦,Wifi你当然可以指定DNS服务器,但是只能配置传统地址,比如阿里的223.5.5.5,可是加密地址https://dns.alidns.com/dns-query就没办法配置了。

还有就是iPhone到现在位置,窝蜂网络是没办法指定DNS的,可以通过代理APP去做DNS的复写,但是那种方式吧,感觉有些不优雅,而且也只能改变部分域名,还是希望能做到系统级别的DNS指定。

二、配置文件的作用

按照苹果官方支持的 DNS 配置机制,可以通过自己写一个配置文件来声明要求指定用哪一个DNS服务器。按照官方声明的格式写完之后,直接安装即可,不需要签名、也不需要越狱、更不需要打包,就很简单,只不过自己写的文件会有红字的风险提醒,这倒无所谓了。

在国内用就配置阿里的 DoH 服务地址,我懒得自己去查标准格式,直接扔给chatGPT让它帮我写的,主要就是把阿里的 DoH 服务地址https://dns.alidns.com/dns-query经过 Base64 编码写进去就好了,具体其实也不用看。如果想用可以直接用,如果担心的话就直接让大模型给你写一个可以改DNS的iOS配置文件,要求就是指定DoH服务地址,还有就是iOS27之后,旧版本的NetworkDNSSettings字段停用了,要用com.apple.configuration.network.dns-settings,跟大模型说清楚就好了。

下面是配置文件源代码,保存时使用 UTF-8 编码,并保持扩展名为 .mobileconfig。

需要注意的是,这里面AllowFailover: false,意思是如果阿里的DoH服务故障的话,可能DNS无法解析,导致看似断网,那么就需要删除配置文件,这个用户体验并不好。但是吧,首先阿里的DNS故障是小概率事件,而且这个是自己装的,删了也很简单,就这样吧。

只支持iOS27,旧版本用NetworkDNSSettings

 1<?xml version="1.0" encoding="UTF-8"?>
 2<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 3<plist version="1.0">
 4<dict>
 5    <key>PayloadContent</key>
 6    <array>
 7        <dict>
 8            <key>PayloadType</key>
 9            <string>com.apple.declarations</string>
10            <key>PayloadVersion</key>
11            <integer>1</integer>
12            <key>PayloadIdentifier</key>
13            <string>local.chatgpt.alidns.declarations</string>
14            <key>PayloadUUID</key>
15            <string>0FFA3358-E1D6-4F55-9946-42FC8DB1792D</string>
16            <key>PayloadDisplayName</key>
17            <string>AliDNS Declarative DNS</string>
18            <key>PayloadDescription</key>
19            <string>Locally installs an Apple declarative encrypted DNS settings declaration for AliDNS DoH.</string>
20            <key>Declarations</key>
21            <array>
22                <data>
23                eyJUeXBlIjoiY29tLmFwcGxlLmNvbmZpZ3VyYXRpb24u
24                bmV0d29yay5kbnMtc2V0dGluZ3MiLCJJZGVudGlmaWVy
25                IjoiMzQwN0E5RjQtOUIyNS00QkUwLUI4MTktODZDQUU4
26                NEJFN0I4IiwiU2VydmVyVG9rZW4iOiIzN0JCQ0IyQi1D
27                N0RCLTQ3OEEtQTg3RS03NDEwMUQwNDcwMkUiLCJQYXls
28                b2FkIjp7IlZpc2libGVOYW1lIjoiQWxpRE5TIEVuY3J5
29                cHRlZCBETlMiLCJETlNTZXR0aW5ncyI6eyJETlNQcm90
30                b2NvbCI6IkhUVFBTIiwiU2VydmVyVVJMIjoiaHR0cHM6
31                Ly9kbnMuYWxpZG5zLmNvbS9kbnMtcXVlcnkiLCJBbGxv
32                d0ZhaWxvdmVyIjpmYWxzZX19fQ==
33                </data>
34            </array>
35        </dict>
36    </array>
37    <key>PayloadDescription</key>
38    <string>Apple declarative DNS settings for AliDNS DoH. Applies to all networks; remove this profile to revert.</string>
39    <key>PayloadDisplayName</key>
40    <string>AliDNS Declarative DNS</string>
41    <key>PayloadIdentifier</key>
42    <string>local.chatgpt.alidns.declarative.profile</string>
43    <key>PayloadUUID</key>
44    <string>301BFAB9-5324-43AD-AF0B-46B6C8FA0FED</string>
45    <key>PayloadVersion</key>
46    <integer>1</integer>
47    <key>PayloadType</key>
48    <string>Configuration</string>
49    <key>PayloadRemovalDisallowed</key>
50    <false/>
51</dict>
52</plist>

三、还有需要声明的是

  • 它不是 VPN:它只配置加密 DNS,不会自动把所有网络流量转入隧道。

  • 它不是代理配置:它没有配置代理节点、路由规则或分流规则。

  • 它不是根证书:它没有安装自定义 CA 证书。

  • 它不是 MDM 设备管理注册:文件中没有要求把设备注册到组织的 MDM服务。

  • 它不能翻墙:DoH 只保护 DNS查询传输,不能保证目标网站可访问,也不能替代代理工具。

  • 它不保证去广告:去广告可能要配合ADGuard。

四、如何撤销

如果后续发现网络异常,或者想恢复原来的 DNS 行为,可以在 iPhone的设置中找到已安装的描述文件并移除。移除后,DNS行为会回到系统和当前网络、代理工具等配置共同决定的状态。