如何在iOS或macOS上加密你的DNS(配置DoH或DoT)
什么是DNS
DNS(Domain Name System)是網(wǎng)絡(luò)的電話簿,完成從字母域名轉(zhuǎn)變成IP地址的工作。比如將baidu.com轉(zhuǎn)換為220.181.38.148。
為什么需要加密DNS
因?yàn)闅v史原因,DNS系統(tǒng)在設(shè)計(jì)之初完全沒有考慮加密,所以你任何在瀏覽器內(nèi)鍵入的地址,都會(huì)被你的運(yùn)營(yíng)商或者公司,或者某些有惡意趣味的人輕易的通過抓包工具獲取到。雖然在現(xiàn)實(shí)的網(wǎng)絡(luò)中,旁觀者攻擊并不是一件非常容易的事情,因?yàn)楝F(xiàn)代交換機(jī)并不會(huì)把你的數(shù)據(jù)包轉(zhuǎn)發(fā)到設(shè)備上連接的所有的其他網(wǎng)口,但是這些對(duì)于別有用心的人來說,都不是一件難事,有很多其他的技術(shù)可以繞過這些限制。
此外,防范你的公司網(wǎng)絡(luò),網(wǎng)絡(luò)運(yùn)營(yíng)商,甚至某些公共Wi-Fi提供者跟蹤你的隱私,也是一件十分必要的事。
簡(jiǎn)單的例子
以下是一個(gè)簡(jiǎn)單的例子,假設(shè)你連上了某個(gè)咖啡店的免費(fèi)Wi-Fi(這里我使用Windows虛擬機(jī)當(dāng)作你的電腦),如果這個(gè)咖啡店的店主想獲取你正在訪問的域名,他只需要通過抓包軟件,就可以輕易獲取未加密的DNS原文內(nèi)容。
比如你現(xiàn)在正在訪問bilibili

通過抓包軟件可以輕易的看到你正在嘗試訪問bilibili

而如果我將瀏覽器設(shè)置為使用加密DNS后,再次訪問bilibili只能抓到加密后的包


如何防止
針對(duì)DNS未加密導(dǎo)致的隱私問題,互聯(lián)網(wǎng)工程任務(wù)組(IETF)在2016年和2018年提出了兩種可行的方案,DNS over TLS (rfc7858) 和DNS over HTTPS (rfc8484)。兩者的區(qū)別主要是DNS over TLS (DoT)使用TLS技術(shù)加密DNS報(bào)文,而DNS over HTTPS (DoH)使用HTTPS技術(shù)加密報(bào)文,對(duì)于普通用戶來說,兩者都能達(dá)到保護(hù)隱私的效果。唯一的區(qū)別在于,DoT使用853端口,而DoH使用443端口。DoH能夠很好的將DNS請(qǐng)求隱藏在眾多的HTTPS數(shù)據(jù)包中,能夠一定程度上防止別人檢測(cè)到你在使用DoH技術(shù)。
如何在iOS和macOS上使用DoH或者DoT技術(shù)
雖然iOS或macOS上的一些第三方瀏覽器提供了DNS加密選項(xiàng),但選項(xiàng)僅僅會(huì)在使用該第三方瀏覽器時(shí)才會(huì)生效。macOS Big Sur和iOS 14雖然支持系統(tǒng)全局的DoH或DoT功能,卻不能通過設(shè)置或者系統(tǒng)偏好設(shè)置進(jìn)行配置。要強(qiáng)制開啟系統(tǒng)級(jí)別的DoH和DoT,目前只能使用描述文件。(需要macOS系統(tǒng)至少為Big Sur,需要iOS系統(tǒng)至少為iOS 14)
<?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>Name</key>
? ? ? ? ? ? <string>Cloudflare DNS over TLS</string>
? ? ? ? ? ? <key>PayloadDescription</key>
? ? ? ? ? ? <string>Configures device to use Cloudflare Encrypted DNS over TLS</string>
? ? ? ? ? ? <key>PayloadDisplayName</key>
? ? ? ? ? ? <string>Cloudflare DNS</string>
? ? ? ? ? ? <key>PayloadIdentifier</key>
? ? ? ? ? ? <string>com.apple.dnsSettings.managed.AFCA1444-5AEB-44CD-B23D-5D1B3ADCD1EE</string>
? ? ? ? ? ? <key>PayloadType</key>
? ? ? ? ? ? <string>com.apple.dnsSettings.managed</string>
? ? ? ? ? ? <key>PayloadUUID</key>
? ? ? ? ? ? <string>A6F9CB2D-F00E-4C3A-90EB-E19E5B872C4F</string>
? ? ? ? ? ? <key>PayloadVersion</key>
? ? ? ? ? ? <integer>1</integer>
? ? ? ? ? ? <key>DNSSettings</key>
? ? ? ? ? ? <dict>
? ? ? ? ? ? ? ? <key>DNSProtocol</key>
? ? ? ? ? ? ? ? <string>TLS</string>
? ? ? ? ? ? ? ? <key>ServerAddresses</key>
? ? ? ? ? ? ? ? <array>
? ? ? ? ? ? ? ? ? ? <string>2606:4700:4700::1111</string>
? ? ? ? ? ? ? ? ? ? <string>2606:4700:4700::1001</string>
? ? ? ? ? ? ? ? ? ? <string>1.1.1.1</string>
? ? ? ? ? ? ? ? ? ? <string>1.0.0.1</string>
? ? ? ? ? ? ? ? </array>
? ? ? ? ? ? ? ? <key>ServerName</key>
? ? ? ? ? ? ? ? <string>cloudflare-dns.com</string>
? ? ? ? ? ? </dict>
? ? ? ? </dict>
? ? </array>
<key>PayloadDescription</key>
<string>Adds the Cloudflare DNS to Big Sur and iOS 14 based systems</string>
<key>PayloadDisplayName</key>
<string>Cloudflare DNS over TLS</string>
<key>PayloadIdentifier</key>
? ? <string>r.macOSBeta.0BD60CF6-64B5-4D16-BEA4-7294E93BDD4C</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>01DA864C-C3AF-4039-A8D0-A00D982B1569</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>
將以上文本文件保存到以.mobileconfig結(jié)尾的文本文件中,在macOS或者iOS上打開后安裝,即可強(qiáng)制啟用DoT,使用cloudflare(1.1.1.1)提供的加密DNS服務(wù)
以下是DoH的配置版本,使用1.1.1.1提供加密DNS服務(wù)
<?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>ServerAddresses</key>
<array>
<string>2606:4700:4700::1111</string>
<string>2606:4700:4700::1001</string>
<string>1.1.1.1</string>
<string>1.0.0.1</string>
</array>
<key>ServerURL</key>
<string>https://cloudflare-dns.com/dns-query</string>
</dict>
<key>PayloadDescription</key>
<string>Configures device to use Cloudflare Encrypted DNS over HTTPS</string>
<key>PayloadDisplayName</key>
<string>Cloudflare DNS over HTTPS</string>
<key>PayloadIdentifier</key>
<string>com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4</string>
<key>PayloadType</key>
<string>com.apple.dnsSettings.managed</string>
<key>PayloadUUID</key>
<string>35d5c8a0-afa6-4b36-a9fe-099a997b44ad</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>ProhibitDisablement</key>
<false/>
</dict>
</array>
<key>PayloadDescription</key>
<string>Adds the Cloudflare DNS to Big Sur and iOS 14 based systems</string>
<key>PayloadDisplayName</key>
<string>Cloudflare DNS over HTTPS</string>
<key>PayloadIdentifier</key>
<string>com.paulmillr.apple-dns</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>A4475135-633A-4F15-A79B-BE15093DC97A</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>
如何驗(yàn)證自己已經(jīng)開啟DoH或者DoT
訪問?https://1.1.1.1/help 如果Using DNS over HTTPS (DoH)或者Using DNS over TLS (DoT)項(xiàng)為yes,即可確認(rèn)你已經(jīng)成功開啟