adguard home の証明書をAPI経由で書き換えたい。
adguard home のAPIを cURL で叩いたら、更新ができる。
cURL で adguard-home のOpenAPIを叩く
Basic認証で、通せばいいので、そんなに難しくなく、簡単にAPIを叩くことができる。
adg_pass=___password___ adg_user=__user__ curl -s -X GET -u $adg_user:$adg_pass http://192.168.1.1/control/status
証明書を更新する。
adguard home に certbot の設定をすべて書くと、HTTPの80番や、DNSチャレンジのDNSサーバーのパスワードをAdguardに渡さなくちゃいけなくて管理が煩雑になる。
certbot で letsencrypt 証明書を更新するためだけのLXCのコンテナを用意しているので、そこでまとめて更新して、証明書だけを同期するようにしたい。 SSHでもって行ってもいいのだけれど、せっかくなのでAPIをたたいて更新することにする。
#!/usr/bin/env bash adg_pass=xxx_password_xxx adg_user=admin adg_domain=adg-home.example.com adg_local_ip=192.168.1.2 function adg_api(){ path=$1 data=$2 if [[ ! -z $data ]] ; then curl -s -X POST -u $adg_user:$adg_pass http://$adg_local_ip/control$path -d "$data" else curl -s -X GET -u $adg_user:$adg_pass http://$adg_local_ip/control$path fi } function update_cert_and_key(){ key=$(base64 -w0 /etc/letsencrypt/live/$adg_domain/privkey.pem ) cert=$(base64 -w0 /etc/letsencrypt/live/$adg_domain/fullchain.pem ) data=$(printf '{ "port_https": 443, "port_dns_over_tls": 853, "port_dns_over_quic": 784, "enabled": true, "key_type": "RSA", "private_key": "%s", "certificate_chain": "%s" }' "$key" "$cert") adg_api '/tls/configure' "$data" > /dev/null } adg_api '/status' | jq .version update_cert_and_key adg_api '/tls/status' | jq .valid_key
証明書が有効になった。
証明書を入れるとDoH/DoTができて嬉しい。
curl -v --doh-url https://adg.example.com/dns-query t.co
DoHサーバーの出来上がりである。DoHサーバーを入手を目的にAdguard Home をインストールするのもアリだと思うんだよなぁ。
DoT / DoH ができるよにしておくと、Chromeで使える
chrome で DoH 設定例
DoHをChromeに設定してしまえば、DNSサーバーが虚偽応答をするネットワーク内部にいてもHTTPSなので、暗号化通信を邪魔されることなくDNSの名前解決が可能になる。
HTTPSのルート証明書を端末インストールして内容チェックまでする人は少ないと思うので。自由なインターネットが確保できます。