Ubuntu に AdGuard Homeを導入する
AdguardHomeを使えば、動画ばかり見て宿題をしないキッズたちをサクッとアクセス禁止にすることが出来るドエス機能が作れます。
ubuntu のインストール
ubuntuは stableを使ってサクッとインストール
sudo qemu-img create -f qcow2 /var/lib/libvirt/images/ubuntu-20.04.qcow2 10G virt-install \ --name adg-home \ --ram 30029 \ --disk path=/var/lib/libvirt/images/ubuntu-20.04.qcow2 \ --vcpus 4 \ --virt-type kvm \ --os-type linux \ --os-variant ubuntu20.04 \ --graphics none \ --location 'http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/' \ --extra-args "console=tty0 console=ttyS0,115200n8
ネットワーク設定をしておく
netplan でファイルを書いて、ネットワーク設定をしておく。
cat /etc/netplan/99-takuya.yaml ## 2022-02-16 takuya network: ethernets: enp1s0: dhcp4: false dhcp6: false addresses: - 192.168.100.2/24 gateway4: 192.168.100.1 match: macaddress: 52:54:00:22:xx:xx set-name: eth0 nameservers: addresses: - 192.168.100.1 link-local: [] version: 2
書いてて気づいたのだけれど、netplan は 00-xxx から 99-xxxまで順に読み込む。同じ設定は最後に読んだものが優先され、上書きされる。たとえば、つぎのように2つのファイルがあり、どちらもenp1s0
を設定しているので、99-takuya.yamlが有効になる. 古き佳き init.dみたいですね。
ls /etc/netplan/ 00-installer-config.yaml 99-takuya.yaml
netplanの設定について
v6は使わないのでオフ。 ここはsysctl でもいいんだけど、dhcp6とlink-local消しときゃ事実上動いてないに等しいのでそれで良しとする
dhcp6: false link-local: []
nameservers で内部のDNSを上位に指定する
nameservers: addresses: - 192.168.100.1
dnsサーバーはsnapcraft/apt のインストールで使います。adguard-homeをインストールしたあとは adguard-homeがDNSサーバーになるので、必要ない設定ですね。
っていうか、adguard-homeはsystemd-resolvedと競合するのであとで弄ります。
設定したらnetplan を適用
sudo netplan --debug generate sudo netplan --debug apply ip a ping one.one.one.one
adguard-homeをインストール
installerを使っても良かったんだけど、snapcraft でインストール。このためにUbuntuを選んだ。
sudo snap install adguard-home
瞬間で終わる。
起動を確認
snap で入れると systemctl のユニットが自動生成されてて嬉しい。
sudo systemctl status snap.adguard-home.adguard-home.service
簡単にでも出来るしね。
初期設定(インストール)画面に行く
snap installがおわるとAdguardの初期設定画面が起動しています。
open http://ubuntuのIP:3000/
日本語がある。
なんと、いまどきのオープン・ソースでは珍しい「日本語」がある。
設定画面2
systemd-resolved 退場させる。
画面2で、systemd-resolvedと競合すると言われるので、対応する。
sudo mkdir /etc/systemd/resolved.conf.d/ sudo vim /etc/systemd/resolved.conf.d/adguardhome.conf sudo mv /etc/resolv.conf /etc/resolv.conf.backup sudo systemctl reload-or-restart systemd-resolved
/etc/systemd/resolved.conf.d/adguardhome.conf
## /etc/systemd/resolved.conf.d/adguardhome.conf ## 2022-02-16 takuya for AdguardHome [Resolve] DNS=127.0.0.1 DNSStubListener=no
じつは、別にしなくても構わないけど。設定したほうが楽だと思う。
別の方法
この設定をしないときは、networkd/netplan に直接DNSサーバーのアドレスを書いて、sytemd-resolved がadguard を参照するようにする。
adguard home が起動したらそちらに聞きに行けばいいだけなので。公式サイトにある方法以外でも好きに設定が出来る。
別の方法 / netpaln
nameserver - 127.0.0.1
別の方法 /networkd
cat /etc/systemd/network/01-my.network [Match] Name=macvlan0 [Network] DHCP=no Address=192.168.1.2/24 Gateway=192.168.1.1 DNS=192.168.1.1 DNS=192.168.1.5 LinkLocalAddressing=no [Route] Destination=192.168.1.0/24 Metric=1
別の方法 systemd-networkd を捨てる。
rm /etc/resolve.conf echo 127.0.0.1 > /etc/resolve.conf
adguard設定2
resolvedの設定をしたら adguard home の設定画面に戻ってリロードして、画面2まで戻ってくる。ここでエラーが消えていれば 先程の設定はうまく言ってる
adguard設定3
ユーザ名とパスワードを決める。ここで設定したものは何れずっと使うのでちゃんとした名前にしておく rootとかadminにするとキッズに総当りをくらうのでちゃんと設定しておく。
adguard 初期設定4
ここでは、ルータの設定を変えてください。っていう話が出てくる。 あとでやる。設定を終えてひとまず、ログイン画面へ行きログインする。
ログインして 上流設定
上流のDNSサーバーは、adguardがクエリを投げる先である。 AdguardHomeは、自分自身ではroot.hintから名前解決してくれない。どうせならrootから名前解決してくれればいいのに。
上流を決めてあげる。困ったら初期設定のままにするか、ルータを指定しておけば良い。
ただし、通常ではルータのDNSサーバーはプロバイダである。
プロバイダのDNSはアレコレ法規制が進んでいて、フィルタリングされているので注意する。
私は、自分でunboundを立ち上げてadguardがunboundに聞きに行くようにする。
rDNSを設定する
ブートストラップを設定する
DoH/DoT問い合わせをAdguardが使うときに使う。
Doh に応答する
DoH/DoTに応答することが出来るようになる・・・。
DNS設定と証明書の設定がわかる人向けです。
ブロックリストを追加する
DNSブロックのドメイン名リストを取得する。この設定に配布されてる一覧ファイルのURLを指定する。
設定したらアップデートしておく。
ブロックしたいサービスを選ぶ
これが、Adguardの肝である。
キッズがyoutubeばかり見ているととき、サクッとDNSを止めることが出来る。そして指定のウェブサービスをアクセス不能にすることが出来る。
アダルトフィルタリングも適用する
こっちは、「一般設定」にあるので、場所が違う。ちょっと見失いがちなので注意する。
キャッシュ設定を変更する
DNS問い合わせ結果をキャッシュする時間を変更する
サービスをブロックしてもしばらくはキャッシュで応答するので。
キャッシュ時間を制御して抜けられないようにする。
adguardを回避してネットへ抜けられないように設定する。
chromeの設定や、iphoneの設定で、adguard以外のDNSサーバーを使われてしまうと、Adguardの名前解決をスルーして簡単に抜けられるので、Adguard以外を使えないように設定する
ルータの設定
ルーターの設定でAdguardを使うように設定する。
設定としてはルータの管理画面で、DHCPオプションを選び、DHCPが通知するDNSサーバーをAdguardに向けてやる。
そして、同時にファイアウォール設定で、Adguard以外のDNSサーバーを使わせないように設定する。
設定例/ openwrt の場合
これは、openwrtの設定例。DHCPサーバーの設定から、PCに通知するDNSサーバーをAdguardのIPアドレスに限定する。
具体的な設定方法
たとえば、ルーターのファイアウォール機能で、8.8.8.8への通信を止める。
たとえば、Adguardだけは8.8.8.8と通信できるようにして、その他は外部のポート53との通信を遮断する。
LinuxサーバやAdguardは自由にDNSを使えるようにして
それ以外は全部のDNS問い合わせを外部に流さない。
Adguardにしろ、DNSフィルタリングでは、この様なUDP53停止の通信設定が必要になる。 キッズフィルったリングが目的ならファイアウォール設定を簡単にするほうがいい。 そのため冒頭ではipv6を使わないように案内していた。
ブロック設定の確認
外部へのDNS問い合わせをブロックすると、スマホは注意を出してくれる。
Adguardはプライバシーフィルタリングが基本的な目的なので、注意は余計なお世話なのですが。注意が出れば、DNSの外部接続をブロックできたことがわかって便利です。
動作チェック
ルータの再起動をして、設定を反映させたら、PCのWifiをオンオフしDHCPからのDNSサーバを取得し直す。
dig t.co @adguardのipアドレス
いくつかWebブラウジングでネットワークを閲覧してログがたまることを確認する。
バックアップ
たとえば、Snapcraft (snap)でインストールした場合は、次のような箇所に、設定がある。
/var/snap/adguard-home/6156/AdGuardHome.yaml
docker 版やdeb版も同様に、/opt に AdGuardHome.yamlが存在する。
これをバックアップすれば、環境を移動するのは手軽になる。
まとめ
アプライアンスの高額な機器を買わなくても、x86マシンやraspi で実現できてしまうのです。
家庭内にRaspberry Pi Ubuntuがあれば、手軽にDNSフィルタリングを仕掛けることが出来る。ファミリーブロック系のサービスを申し込まなくても、ちょっとした知識があればだれでもブロックを利用できるようになる。
また、これは「セキュリティ」にも寄与する。フィッシング詐欺サイトなどをブロックすることで年寄りのセキュリティを高めることが出来る。
この様な強烈な機能が無料で使えてしまうのは便利なのだが、「大いなる力には、大いなる責任が伴う」ことを忘れてはいけない。
DNSフィルタリングは誰でも出来るゆえにカジュアルに使われすぎている感じがある。ちゃんと何を止めて何を許可するのか、意識しておいたほうがいい。
この様な機能があることを知らずに、プロバイダや政府に検閲を許している現状が恐ろしいし。
諸刃の刃
もし、このAdguardHomeをVPNやTLS/443 経由で家庭外から使えたらどうだろうか、AdguardHomeはDoH/DoTに対応しているのである。
DNSサーバのフィルタリングを掻い潜ってって自宅のAdguardHomeへ到達して、DNSフィルタリングすり抜けてしまうことにも使えるのだ。
インターネットには無数の可能性が広がっている。
名前解決だけは死守したい。
UnboundでDNSをルートからひくことが出来るとかなりの自由が手に入る。
unboundでフィルタリングも飽きて来たので、adguard-homeを家庭内に導入する。
unboundではワイルドカードなドメインブロックができないのと、世間に配布されてるホスト名リストがAdguard向けになってたりするので、Adguardのほうが柔軟に設定できるのでこっちも試してみようと入れてみることにした。
With great power comes great responsibility
大いなる力には大いなる責任が伴う。ということをくれぐれも忘れないように。
責任とは信用です。そしてDNSフィルタリングは「嘘を付く」責任です。
これはウソを付く機能です。なので一歩間違うと信用を喪失することになります。
2023-10-12
設定バックアップ(エキスポート)について言及