根據網路環境自動變更 DNS 設定的 DNS On Demand

上一篇介紹使用 mobileconfig 在 iOS 14 和 mscOS 11.0 Big Sur 來達到自定義的 DoT / DoH 服務

但是這個一改就是全域的,不管你在家中、辦公室或者是在咖啡廳使用的 WiFi 甚至是使用行動網路

都會使用你預先設定的 DNS Server 來解析

然而事實上可能不符合進階一點的需求,例如:

  • 在家中或者辦公室有搭自己的 AdGuard Home or Pi-hole,此時連到這些地方的 WiFi 當然使用區網的 DNS Server 來解析,有本地快取以外區網連線速度快延遲又低

  • 出門使用行動網路或者連上其他不認識的 WiFi 就使用 NextDNS 的 DoH 服務

有上述跟我一樣需求的人,蘋果也有提供一個新的 DNS On Demand(DNS 按需連線)的功能

這功能一樣需要 iOS / iPadOS 14+ 以及 Big Sur 以上才有辦法使用

下面就說說這個特殊的 mobileconfig 描述檔怎麼寫

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?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://dns.nextdns.io/xxxxx</string>
			</dict>
			<key>OnDemandRules</key>
			<array>
			<dict>
				<key>Action</key>
				<string>Disconnect</string>
				<key>SSIDMatch</key>
          		<array>
					<string>MySSID1</string>
					<string>MySSID2</string>
					<string>MySSID3</string>
				</array>
			</dict>
			<dict>
				<key>Action</key>
				<string>Connect</string>
			</dict>
			</array>
			<key>Name</key>
			<string>DoH OnDemand</string>
			<key>PayloadDescription</key>
			<string>Configures device to use DoH OnDemand.</string>
			<key>PayloadDisplayName</key>
			<string>DoH OnDemand</string>
			<key>PayloadIdentifier</key>
			<string>com.apple.dnsSettings.managed.8F2760B2-23C1-4735-B5BE-D64A0ADBEC09</string>
			<key>PayloadType</key>
			<string>com.apple.dnsSettings.managed</string>
			<key>PayloadUUID</key>
			<string>8F2760B2-23C1-4735-B5BE-D64A0ADBEC09</string>
			<key>PayloadVersion</key>
			<integer>1</integer>
		</dict>
	</array>
	<key>PayloadDescription</key>
	<string>Adds DoH OnDemand to Big Sur and iOS 14 or newer systems</string>
	<key>PayloadDisplayName</key>
	<string>DoH OnDemand</string>
	<key>PayloadIdentifier</key>
	<string>14737786-645C-42BF-9B13-6B339B2D81C1</string>
	<key>PayloadRemovalDisallowed</key>
	<false/>
	<key>PayloadType</key>
	<string>Configuration</string>
	<key>PayloadUUID</key>
	<string>51851357-7736-4A33-90E6-45FB8C3BEC59</string>
	<key>PayloadVersion</key>
	<integer>1</integer>
</dict>
</plist>

上述內容,有幾行需要自行修改後才能使用

第 13 行:請修改為自己出門在外要使用的加密 DoH,如果是 NextDNS 的話,請上他們官網後台

👆 如上圖的「DNS-over-HTTPS」數值拷貝起來填進去

第 22~24 行:這裡請修改為你不想要使用 NextDNS 的 WiFi SSID,也就是只要系統連上這些 SSID,就會使用區網 DHCP Server 推送的 DNS 設定

以上兩個資料修改完畢後就可以保存、AirDrop or eMail 到 iPhone / iPad 上面安裝了~

最後蘋果除了 SSID 判斷以外,還有提供 Domain、DNS Server 甚至是 Interface Type 多種判斷來達到更進階需求

有興趣可以到下面蘋果官方說明書了解更多 🖖

https://developer.apple.com/documentation/devicemanagement/dnssettings/ondemandruleselement

2020/09/28 update

有人問到怎麼都在講 DoH,沒有 DoT 呢?

其實要改 DoT 很簡單,上面描述檔的第 11 行把「HTTPS」改為「TLS」

第 12 行的「ServerURL」改成「ServerName」即可

另外別忘記第 13 行也要換上 DoT 的網址 😘