最近、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 を非常に簡単に使用できます。
リリースページからシステムのバイナリファイルをダウンロードし、展開して次のコマンドを実行します:
# サービスのインストールと起動
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
ここでは、私の個人的な設定を保持しています。私はただ 1 つの阿里云の 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'