DoHを使う

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分後にエラーになるみたいな動きもする

chromebook-doh

まあ広告ブロックしたいだけなら
adguardのDoHサーバー使えば良い気がする

https://dns.adguard-dns.com/dns-query