DNS over HTTPSを使ってpi-holeに接続する設定
出先で広告ブロック使いたくなったのでやってみる
こんな構成
apache -> doh-proxy -> pi-hole -> unbound
サーバーはこれ
https://github.com/DNSCrypt/doh-server
/etc/systemd/system/doh-proxy.service って名前で保存
[Unit]
Description=DoH Proxy
After=network.target
[Service]
ExecStart=/usr/local/bin/doh-proxy -u 127.0.0.1:53 -l 0.0.0.0:3000
User=root
Group=root
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
TLS部分はapacheがやる
こんな感じでproxy
<VirtualHost *:443>
ServerName dns.example.net
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://192.168.0.123:3000/ retry=2
ProxyPassReverse / http://192.168.0.123:3000/
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.net/privkey.pem
</VirtualHost>
テストはこんな感じ
curl --doh-url https://dns.example.net/dns-query https://example.jp
dnslookup コマンドでもOK
dnslookup example.jp https://dns.example.net/dns-query
chromebookの場合は"確認済みアクセスを有効にする"のチェックを外しておいた方が良い
このチェックの挙動がよく分からないけど、DoHサーバーの名前解決後のIPアドレスがLAN内のプライベートIPなら通るけど、グローバルIPだと通さないみたいな挙動になってた
あと設定直後はちゃんとHTTPのリクエストを発行するにもかかわらず1~2分後にエラーになるみたいな動きもする
まあ広告ブロックしたいだけなら
adguardのDoHサーバー使えば良い気がする