作者:Sophon

來自:洛穀日報

鏈接:DNS-over-HTTPS(DoH)簡析與配置 - 未歸之人 - 洛谷博客


本文同步發佈於 Heliumの博客,到我的博客閱讀體驗更佳QwQ

DNS是什麼

DNS(Domain Name System)是一項網路服務,用途是對全球各個網站的域名進行解析。如果聽不懂上面這句話也沒關係,接下來會講解。如果你是網路方面的大牛可以直接跳過或關閉此網頁。

簡明易懂的DNS

舉個例子,從前有個叫小明的人(目測此人已累死),開了一家商店。一開始顧客要去購物時,就直接去商店裡買。

但由於網路環境的複雜性,讓顧客直接記住地址是不太可能的。(你試試看?)於是就有人動了腦筋,推出了一樣類似DNS的服務:你只需要說出地點(小明雜貨店),服務商就會開車送你去目的地。

很多大公司實際上都推出了這份服務,例如阿里,百度,谷歌,Cloudflare等。

實際網路中的DNS,則是向伺服器詢問域名,而伺服器返回IP地址。

順便推薦幾個質量好的良心DNS如下:

Cloudflare DNS:

1.1.1.1, 1.0.0.1

Google Public DNS:

8.8.8.8, 8.8.4.4

OpenDNS

208.67.222.222, 208.67.220.220


DNS查詢

看到這裡你可能有疑惑了,難道每一臺DNS伺服器都儲存了很多IP地址和域名的對應嗎?不是。一這很浪費空間,二這樣很難更新。

以我的博客地址keepthethink.github.io為例,當你輸入地址後:

1.你的電腦首先會去詢問DNS伺服器;

這個「DNS伺服器」可能在任何地方,可能就在你家的路由器上,也有可能在萬裏之遙的燈塔國QwQ(如果你是非酋

當然,一般來講你的路由器上不會真的有一個DNS服務端,如果你在本地登錄912.168.0.1或192.168.1.1,你就會看到在「DNS」設置那一欄會有你的ISP的DNS地址(當然,如果你想把它換成公共DNS也可以,但要為你自己的網速負責。)

2.DNS伺服器詢問所謂「根伺服器」;

根伺服器詢問.io域名的權威伺服器;

.io域名的權威伺服器詢問.github.io域名的權威伺服器;

.github.io域名的權威伺服器將IP告知你的電腦;

OK

(這套措施實在是找不到合適的比喻,看不懂就跳過吧。)

注意事項

如果你訪問的是一些比較國際化的網站,而且還使用了國外的DNS伺服器,有可能會會給你分配個國外的IP地址。

舉個最基礎的例子:Hexo博客在註冊網址時,進行的國內外分流。這是不排除某些睿智國外DNS不管三七二十一給你個國外地址的情形。

DNS緩存

這麼幹,空間的確節省了很多,但效率顯然就更慢了。所以,DNS伺服器中一般有個「緩存」,當你重複詢問同一個網址時,直接找出緩存記錄並答覆。當然,每個一定的時間會更新緩存。

既然這套措施已經很完美了,那DoH是幹嘛的?別急,馬上就講。

DNS劫持與HTTP劫持

DNS劫持:當DNS不那麼老實

打個比方:

從前有個叫小剛的,他也開了家雜貨店;

小剛發現小明的雜貨店有很多客戶,分外眼紅,便拿錢賄賂了DNS服務商,於是,當顧客要求DNS服務商將其帶到「小明雜貨店」是,DNS會不管三七二十一將其帶到「小剛雜貨店」。在網路中,則是DNS伺服器故意給出錯誤的IP地址。

這顯然是無計可施的,一般來說,遇到這種人品爛的掉渣的服務商,最好的辦法就是換一家,好在這年頭網路條件不錯,大多數DNS都不搞這種事。

但是,對於DNS劫持,剛才講的一種情況並非最常見的,最常見的事下面這種:

假設只有服務商A收了賄賂,而服務商B沒有。當你向DNS服務商B打電話時,你的電話服務商將其轉接到服務商A,那你就前功盡棄了。唯一的方法是使用DNS-over-HTTPS,後面會講解。

HTTP劫持:當ISP不那麼老實

假設你向DNS伺服器打了個電話,「我要去小明雜貨店。」結果你的電話服務商竊聽了這句話,得知了你的行程;甚至將其修改為「我要去小剛雜貨店。」,然後你就不明不白的被帶到了另一個地方。

在這種情況下,你的DNS服務商是老實可靠的,但你的ISP(網路服務提供商)則不那麼可靠。當然,一般的ISP並沒有那麼猖狂,他們最多不過是往你身上塞幾張奇♂怪♂的廣♂告♂(想必大家都有這樣的經歷。)你有時候會不會發現你看到的廣告就是最近曾經關注過的事物?

你也許會說,可以修改DNS來解決這個問題,但如果你的ISP讓 Google Public DNS 跳轉到 ... 之類與其同流合污的DNS地址怎沒辦?圖樣圖森破。

注意

有哪些進行HTTP劫持的ISP?基本上都有:移動,聯通,電信,天下烏鴉一般黑,呵呵。 一個極其明顯的例子如下:

這種劫持的關鍵在於,DNS伺服器與你之間的鏈接為「明文傳輸」,而非「加密傳輸」。這就導致每一個環節上的人都能隨意修改你的鏈接。幸運的是,在生產力高度發達的9102年,加密技術早已像爛柿子一樣成熟了,如HTTPS。

DoH的具體原理

DoH的具體原理其實就是在DNS外面套一層HTTPS。(而且更慢了)即流程變成了

你的電腦 -> DoH伺服器 -> DNS伺服器 -> DoH伺服器 -> 你的電腦

以上流程中的一個箭頭代表一個HTTPS加密鏈接,使得該過程中的所有流量皆受到強加密,這樣一來,除非拖出量子計算機或智子,否則絕無可能被破解。

(當然,如果HTTPS本身出現漏洞,流量自然就會被破解。但這樣一來所有與網路有關的事務都會徹底崩潰,不多你一個。)

提示

  1. 本人電腦為macOS + Firefox,親測有效。
  2. 新疆OIer會因為某些原因而無法使用DoH。

在Firefox瀏覽器中體驗DoH

首先,把你的Firefox Quantum更新到最新版。(廢話)

點擊右側的「菜單」,就是那個三條橫線的圖標;

在菜單裏點擊「首選項」;

進入「常規」選項;

滾動頁面到最下方,選擇「網路設置」;

在彈出窗口的最下方選擇「啟用基於HTTPS的DNS」,點擊「使用默認值」即可。

在Google Chrome中體驗DoH

遺憾的是,直到這篇科普寫完時,Chrome仍然不支持直接配置DoH。如果你希望使用Chrome,請參見下面的教程。

在Windows上使用DoH

想再Windows上使用DoH?直接安裝Firefox不就好了?

當然,如果你是一名狂信徒,非要使用其他瀏覽器,我這裡倒是有個思路:

  1. 買一臺伺服器,系統是Linux。
  2. 在伺服器上重複「在Linux中體驗DoH」中的方案
  3. 把你的DNS伺服器地址設為你的伺服器的公網IP地址

當然,可能你自己得花點錢。

在macOS中體驗DoH

首先,為了安裝必要的組件,我們首先要安裝Homebrew軟體包管理器。在終端中輸入:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安裝完成後,輸入以下命令安裝cloudflared:

brew install cloudflare/cloudflare/cloudflared

等待安裝,這段時間內你可以去換(chuan)件(shang)衣(nv)服(zhuang)。

然後,我們要修改一下配置文件,新建一個文件/usr/local/etc/cloudflared/config.yaml,輸入如下內容:

proxy-dns: true
proxy-dns-upstream:
- https://1.1.1.1/dns-query
- https://1.0.0.1/dns-query

(順便提一下,如果1.1.1.1和1.0.0.1兩個都連不上,可以把網址刪除換成https://dns.google.com/experimental試試,

好了不要吵了我知道這是天方夜譚)

配置結束,啟動服務:

sudo cloudflared service install

QED!現在你的電腦已經成了一臺DoH伺服器,高興的話你也可以把它當作DNS伺服器來用。打開 系統首選項 -> 網路 -> 高級 -> DNS,在列表的最頂端添加 127.0.0.1 即可。

在Linux中體驗DoH

同macOS,但安裝時一定要記得加PPA源~

DoH的使用測試

用dig命令測試一下,發現DOH的使用體驗還是相當不錯的。對域名google.com的查詢結果如下:

$ dig @127.0.0.1 www.google.com

; <<>> DiG 9.10.6 <<>> @127.0.0.1 www.google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48175
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1452
; PAD: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (".................................................................")
;; QUESTION SECTION:
;www.google.com. IN A

;; ANSWER SECTION:
www.google.com. 66 IN A 216.58.194.196

;; Query time: 165 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Apr 16 16:33:38 CST 2019
;; MSG SIZE rcvd: 142

注意最下方几行:165毫秒的查詢時間不可謂不快。

總結

事實上,如果你飽受各種小廣告彈窗之苦,DoH是個不錯的應對措施;

如果你的運營商直接進行DNS劫持,建議投訴或訴諸法律;

如果你的運營商進行HTTP劫持,推薦DoH。

點個贊再走吧(???? ???)


搬運者: 知乎@方舟 Minecraft玩家|「醉後不知天在水,滿船清夢壓星河。」

本文一切權利歸原作者所有,已獲得轉載許可/按原作者要求註明轉載鏈接。

如果你覺得我的文章可能幫助到了你,那麼請點贊支持一下,讓更多的人看的它;如有不足之處,歡迎給?我的Telegram發消息來指正!?我的網易雲音樂

「知乎搬運申明」

?「微信支付?」二維碼

?「PayPal??」支付鏈接

推薦閱讀:

相關文章