分類
macOS 分享交流 手把手教你科學上網 網絡

在 OS X 上 避免 DNS 洩露

最近牆越來越高了,隨著法西斯節和月餅的關係,不少梯子也被拆了。甚至幾個梯子開發者也被?,所以說,除了“如何科學上網”這個問題之外,“如何安全上網”這個問題也變得越來越不可讓人忽略。

不僅僅是為了你我都懂的用途,就是一般的使用電腦上網,我覺得這個問題也應當得到重視。你在網絡上面的一言一行都被你的服務商、ISP事無鉅細地記錄著……這原本是好的目的——一旦歹徒在通過網絡行凶,我們就能夠快速將其抓獲——不過,一旦這些信息落入了壞人之手,那將不堪設想。

一般我們會想,那些瀏覽記錄什麼的有什麼重要的呢?只要我的賬號密碼安全就好了啊!事實上,正是這些信息,給了黑客可乘之機。你的這些材料,都將成為社會工程學的攻擊素材。

那麼DNS洩露又是什麼呢?

使用瀏覽器上網,你輸入的域名就要依靠DNS來翻譯成IP地址——電腦可不懂什麼是域名。所以,也許你訪問的內容經過了https加密,但ISP一樣可以記錄你究竟訪問了那些網站!

就算你使用了VPN等代理來訪問網絡,你的DNS仍然有可能是本地解析的,這將導致你的隱匿行踪變得毫無意義! ——這就是個人隱私的頭號威脅:DNS洩露

目前來講,當你使用VPN的時候,DNS應該是遠程解析的,但有些提供商並不支持它;另外如果你使用襪子代理,那麼只有 5 才支持遠程DNS解析

另外

你如果使用了pac,那你需要一份按照域名來選擇代理的 pac 而不是IP。——因為它還是會先解析出IP再判斷是否需要代理。

否則,你就可能洩露了DNS:

什麼是DNS洩露
什麼是DNS洩露

DNS透明轉發

這時候就有人提出,如果使用VPN,為了避免DNS污染(其實也是洩露的一種),要使用第三方的公共DNS服務,比如穀歌的 8.8.8.8 ,但如果你的DNS洩露了,即使使用了公共DNS也無濟於事:

DNS透明轉發
DNS透明轉發

你以為你訪問到了第三方的公共DNS上,其實你還是訪問了ISP的DNS服務器上。

關於DNS洩露的更多內容訪問:https://dnsleaktest.com/what-is-a-dns-leak.html

要測試DNS洩露,訪問:https://dnsleaktest.com

使用 dnscrypt 和 dnsmasq

dnscrypt 是 Open DNS 的一個項目,它允許你加密地訪問DNS服務器,並解析域名。就好像使用https訪問網站一樣。而 的dnsmasq 則是一個輕量級的DNS服務器,我們本地架設它來緩存DNS解析回复,這樣就不用在同一時間裡重複解析同一域名多次了——畢竟加密DNS解析不比明文解析快的。

注意

其實大多數 Linux 系統當中 dnsmasq 都是默認自帶的——它並不臃腫,也不會耗費多少資源。

準備

為了安裝 dnscrypt 和 dnsmasq ,你需要安裝 Xcode ——我們需要用到Xcode 附帶的一些命令行工具。

在安裝了Xcode之後,使用命令來安裝Homebrew:

它是個類似 apt-get的 或者 百勝 的包管理器,安裝它之後,你或許需要如下設置:

brew update 慢 解決辦法 鏡像更新源

安裝 dnsmasq

使用 釀造 安裝 的dnsmasq 來安裝它。

我們編輯它的配置:

比如說如下配置:

再寫入一條額外的配置: 迴聲 "CONF-DIR =在/ usr / local / etc中/ dnsmasq.d" >> /USR/本地/等等/的dnsmasq.CONF 來讓配置目錄生效以放入更多規則:

對於國內比如淘寶京東這類網站,我想你不會去代理,那麼也就沒必要加密處理了,由於國內多用了cdn加速,我們有國外DNS解析的話會導致走到國外線路上,速度很慢。如果你需要加密,就跳過這一步即可?。

設置啟動:

使用 須藤 lsof的 -UDP:53 或者 PS -如果 | grep的 “[ð]nsmasq“ 來驗證dnsmasq已經啟動。

dnsmasq 雖然被用作了DNS緩存,它一般也會用在微型服務器上比如OpenWRT上作為DHCP服務器。事實上它在這方面用的更多。不過不用擔心,我們安裝的dnsmasq默認不開啟DHCP功能。

安裝 dnscrypt

使用 釀造 安裝 dnscrypt-代理 來安裝dnscrypt。

設置啟動:

編輯配置文件,把本地監聽地址改為 127.0.0.1:5355來配合dnsmasq:

<>/USR/本地/選擇/dnscrypt-代理/sbin目錄/dnscrypt-代理</> 這行下面插入: <>--本地-地址=127.0.0.1:5355</> ,好避免和dnsmasq衝突並只允許dnsmasq訪問到它:

最後,使用 須藤 launchctl 加載 /圖書館/LaunchDaemons/自製.mxcl.dnscrypt-代理.plist中 啟動服務。

使用 須藤 lsof的 -UDP:5355 或者 PS -如果 | grep的 “[ð]nscrypt“ 來驗證服務已經生效。

dnscrypt 還有個對應的 dnscrypt-包裝,它兼容dnscrypt-proxy的加密——也就是說你可以用它來搭建自己的dnscrypt服務器而不必使用公用dnscrypt服務器。——這用來抵禦DNS污染~你可以參考頁尾“延伸閱讀”裡的鏈接來了解更多。

配置網絡

打開 偏好設置→網絡→高級→DNS選項卡 ,只填入 127.0.0.1 並保存即可。

設置DNS
設置DNS

驗證

使用dig來分別驗證二者是否正常工作:

 

來自丹麥的dnscrypt服務器
來自丹麥的dnscrypt服務器

延伸閱讀

編譯安裝 dnscrypt-wrapper 搭建防污染 DNS 服務器

的dnsmasq (簡體中文)

OS X 上的隱私安全指南

本文由 落格博客 原創撰寫:落格博客 » 在 OS X 上 避免 DNS 洩露

轉載請保留出處和原文鏈接:https://www.logcg.com/archives/1311.html

通過 落格博客

如非聲明,本人所著文章均為原創手打,轉載請註明本頁面鏈接和我的名字。

9 在回答“在 OS X 上 避免 DNS 洩露”

[…] 三年前,我寫了一篇文章《在 OS X 上 避免 DNS 洩露》來談如何保護你的隱私,並避免 DNS 洩露,那時候主要用的技術是 dnscrypt——實際上後來我就放棄了這個方案,原因是公共服務器受干擾嚴重,配置複雜延遲高。現在三年過去了,我們來看看最新的 DoT 和 DoH,實際上就是 DNS over TLS 和 DNS over HTTPS […]

launchctl load 是否可以再開啟另外一個 dnscrypt 實例呢?
例如我想用兩個端口對應兩條線路
127.0.0.1:5301 — 思科
127.0.0.2:5302 — FVZ-REC-HK-ZTW-01

理論上可以,你需要再拷貝一份plist,然後把端口改掉,這樣應該能啟動兩個實例,我沒有試過,如果這樣不行,那應該就不行了,你自己試試看。
另外一種方法是用docker起服務,這樣的話起幾個都ok了。
或者用傳統linux方式寫腳本 :)

macOS最新系統中執行sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnscrypt-proxy.plist啟動不生效,但是我可以通過shadowsocksx訪問google、Facebook的,這是什麼情況呢?執行dig http://www.google.com @ 127.0.0.1 -p 5355也是連接超時; 沒有服務器可以達成,但是可以訪問

[…] 當然了, COW 也是有缺點的,第一它對於陌生網站會直接連接至少一次,這會造成DNS洩露,關於這個我之前專門寫了一篇文章講過,這裡不再贅述;第二用久了不知道是我的使用習慣問題還是演算法問題,經常還是會遇到能直連的走代理,要代理的走直連;第三這個的規則都給我寫在了網路設定裡邊的忽略代理的框框裡,我去,雖然無所謂但看起來好變態! […]

發表評論

您的電子郵件地址不會被公開. 必填字段標 *