それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Ubuntu に AdGuard Homeを導入してキッズへのフィルタリングを実現する。

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を止めることが出来る。そして指定のウェブサービスをアクセス不能にすることが出来る。

アダルトフィルタリングも適用する

こっちは、「一般設定」にあるので、場所が違う。ちょっと見失いがちなので注意する。

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をVPNTLS/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

設定バックアップ(エキスポート)について言及