野声

Hey, 野声!

谁有天大力气可以拎着自己飞呀
twitter
github

MacOS 配置 DNS Over HTTPS

最近折騰了一下在 MacOS 本地搭建 DoH,把折騰過程記錄一下。

有不同的方案,比如說使用 smartdns 或者 dnscrypt-proxy + dnsmasq。

還寫了個 uTools 插件 來快速切換 DNS。

什麼是 DoH#

什麼是 DoH,可以看:https://zh.wikipedia.org/zh-cn/DNS_over_HTTPS

使用 smartdns-rs#

smartdns-rs 是一個用 Rust 編寫的跨平台本地 DNS 伺服器,獲取最快的網站 IP,獲得最佳上網體驗,支持 DoH,DoT。

開源在 GitHub: https://github.com/mokeyish/smartdns-rs

使用這個軟體可以非常方便的使用 DoH。

releases 頁面 下載你的系統的二進制檔案,解壓,然後執行:

# 安裝服務並啟動
sudo ./smartdns service install
sudo ./smartdns service start

# 關閉服務
# sudo ./smartdns service stop
# 卸載服務
# sudo ./smartdns service uninstall

此時軟體會把自己安裝到 /usr/local/bin/smartdns,以後你只需要執行 smartdns 就可以控制服務的行為了。

服務預設使用的配置文件是:/usr/local/etc/smartdns/smartdns.conf,具體各參數可以查看官方文檔:

直接在這個文件的底部加入如下配置即可:

# ... 默認配置

# server-tls dns.alidns.com
# server-https https://cloudflare-dns.com/dns-query
# server-https https://dns.alidns.com/dns-query
server-tls 8.8.8.8:853
server-https https://223.5.5.5/dns-query

smartdns 會默認監聽本機的 53 端口。

使用 dnsmasq & dnscrypt-proxy#

使用工具為 dnscrypt-proxy + dnsmasq。

dnscrypt-proxy 只負責幫我們發起 DoH 請求。

dnsmasq 是一個輕量級的域名解析伺服器,幫我們把 DNS 請求轉發到 dnscrypt-proxy,而把一些公司域內的域名轉發到路由器分發的上游 DNS。

安裝 dnsmasq、dnscrypt-proxy#

安裝很簡單,使用 brew:

brew install dnsmasq dnscrypt-proxy

安裝 locationchanger#

執行:

curl -L https://github.com/eprev/locationchanger/raw/master/locationchanger.sh | bash

然後將下面這段程式碼貼上到 location changer 腳本 /usr/local/bin/locationchanger 末尾:

DEFAULT_SCRIPT="$HOME/.locations/default"
if [ -f "$DEFAULT_SCRIPT" ]; then
    ts "Running default '$DEFAULT_SCRIPT'"
    "$DEFAULT_SCRIPT"
fi

這樣我們連接網路的時候就會執行這個腳本。

然後我們創建一個檔案 $HOME/.locations/default

mkdir -p $HOME/.locations && touch $HOME/.locations/default

內容如下:

#!/usr/bin/env bash

DNS=`ipconfig getpacket en0|grep domain_name_server|awk -F"[{,}]" '{print $2}'`
echo "$DNS"
echo "nameserver $DNS" > "$HOME/upstream.conf"

這個命令會把路由器下發的 DNS 寫入到 $HOME/upstream.conf 檔案中。

然後我們手動執行一遍 locationchanger,將這個檔案生成出來。

配置#

配置 dnsmasq#

看 brew 提示你的配置文件在哪裡,像我的 m1 的 brew 就提示配置文件在 /opt/homebrew/etc/dnsmasq.conf
然後修改這個配置文件的內容:

# 設置只解析域名
domain-needed
bogus-priv

# 我們剛剛生成的路由器分發的上游 DNS 地址
resolv-file=/Users/xxx/upstream.conf
# 下文配置的 dnscrypt-proxy 監聽地址
server=127.0.0.1#5553
# dnsmasq 的監聽地址
listen-address=127.0.0.1

# 打日誌出來,好排查問題
log-queries
log-facility=/var/log/dnsmasq.log

配置 dnscrypt-proxy#

M1 系統的配置文件地址在:/opt/homebrew/etc/dnscrypt-proxy.toml

這裡主要是我個人的配置,我只保留一個阿里云的 DoH,然後把 sources 下的所有內容都註釋掉,這樣啟動會快很多。

如果保留 sources 下的內容的話,每次啟動軟體都要去找一個最快的 DNS,要遍歷很久。

# 監聽地址
listen_addresses = ['127.0.0.1:5553']
# 打日誌出來,好排查問題
log_file = '/var/log/dnscrypt-proxy.log'

# 配置 alidns
[static]
  [static.'alidns-doh']
  stamp = 'sdns://AgAAAAAAAAAACTIyMy41LjUuNSCoF6cUD2dwqtorNi96I2e3nkHPSJH1ka3xbdOglmOVkQ5kbnMuYWxpZG5zLmNvbQovZG5zLXF1ZXJ5'

參考#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。