/home/tnishinaga/TechMEMO

日々行ったこと、面白かったことを書き留めます。

VyOS 1.4にAdGuardHomeを入れる

セキュリティ強化とトラッキング対策を目的としてVyOSにAdGuardHomeを入れてみたので、備忘録を残しておきます。

環境

  • マシン
    • Shuttle DS68U
      • CPU: Intel(R) Celeron(R) CPU 3855U @ 1.60GHz
      • Memory: 8GB
      • Storage: 120GB
  • VyOS
    • 1.4-rolling-202212310809

やること

VyOS 1.4からはcontainer機能が追加されています。 これを用いるとVyOSの環境を汚さずにVyOSの機能追加ができます。

docs.vyos.io

本記事の前提として、vyosのインストール及びルーターとして機能するまでの初期設定は済んでいるものとします。

1. コンテナの追加

adguardhomeのコンテナをVyOSに追加します。

add container image adguard/adguardhome

2. 設定ファイル用ディレクトリの作成

adguardの設定ファイルを入れるためのディレクトリを作ります。

vyosにはos imageのupdateで消えるところと消えないところがあるので、updateしても消えない /config に保存するようにしています。

sudo mkdir -p /config/opt/adguard/{conf,work}

3. adguard用設定の追加

以下のコマンドを実行してcontainerの設定を追加します。 172.20 の部分はLANのNWとかぶらないように適宜変更してください。

set container name adguard image 'adguard/adguardhome'
set container name adguard network adguard-net address '172.20.0.10'
set container name adguard volume adguard_conf destination '/opt/adguardhome/conf'
set container name adguard volume adguard_conf source '/config/opt/adguard/conf'
set container name adguard volume adguard_work destination '/opt/adguardhome/work'
set container name adguard volume adguard_work source '/config/opt/adguard/work'
set container network adguard-net prefix '172.20.0.0/24'

このコマンド実行後に commit して、adguardhomeを起動してください。

4. adguardhomeの初期設定をする

adguardhomeはvyosの内部NW(172.20.0.10)に建っているので、通常vyosの外からアクセスできません。 そのため、ssh port forward機能を使ってアクセス経路を作り、初期セットアップを行います。

vyosにSSHログインできる端末から以下を実行してください。

 ssh vyos@VYOSのIPアドレス -L 13000:172.20.0.10:3000

ターミナルで接続を維持したまま、ブラウザで http://localhost:13000 を開くとadguardhomeの初回セットアップが開始されます。 セットアップ方法は以下を参考にして行ってください。

github.com

セットアップ後、以下のコマンドを実行してdnsが引けるか確認してください。

vyos@vyos:~$ dig @172.20.0.10 google.co.jp

; <<>> DiG 9.16.33-Debian <<>> @172.20.0.10 google.co.jp
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38651
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.co.jp.          IN  A

;; ANSWER SECTION:
google.co.jp.       300 IN  A   172.217.161.35

;; Query time: 159 msec
;; SERVER: 172.20.0.10#53(172.20.0.10)
;; WHEN: Thu Jan 05 09:03:12 UTC 2023
;; MSG SIZE  rcvd: 57

ipv6のNWも組んでいる人はAAAAレコードも引けるか確認するのがおすすめです。

vyos@vyos:~$ dig @172.20.0.10 google.co.jp aaaa

; <<>> DiG 9.16.33-Debian <<>> @172.20.0.10 google.co.jp aaaa
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62224
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.co.jp.          IN  AAAA

;; ANSWER SECTION:
google.co.jp.       109 IN  AAAA    2404:6800:4004:80a::2003

;; Query time: 9 msec
;; SERVER: 172.20.0.10#53(172.20.0.10)
;; WHEN: Thu Jan 05 09:04:05 UTC 2023
;; MSG SIZE  rcvd: 69

5. vyosのdns forwardで使うDNS serverにadguardhomeを指定する

以下のコマンドを実行して、forwardするDNSサーバーをadguardhomeのものに変更します。

set service dns forwarding name-server '172.20.0.10'

commit 後、LAN側でdigを実行するなどしてdnsが引けるのを確認してください。

(おまけ) 6. adguardhomeの管理画面を開く

初回セットアップ後、port 80番にアクセスするとadguardhomeの管理画面に接続できます。 この際、初回セットアップ時と同様にport forwardが必要です。

 ssh vyos@VYOSのIPアドレス -L 18080:172.20.0.10:80

コマンド実行後 http://localhost:18080 にアクセスすると管理画面が開けます。

(おまけ) 7. マルウェアブロックできる上流DNSサーバーに変更する

上流DNSサーバーを変更することで悪性ドメインへのアクセスを防ごうと思います。 マルウェア対策が行われている公開dnsサーバーはいくつかありますが、以下の理由でcloudflareのDNSサーバーを利用することにしました。

  • AAAAレコードが引ける
  • DNS over HTTPS(DoH)が使える

developers.cloudflare.com

adguardhomeの管理画面に入り、上流DNSサーバーを https://security.cloudflare-dns.com/dns-query に設定してください。

設定を保存して反映し、LAN側のマシンでdig等を使いAレコードとAAAAレコードが引けるのを確認して、問題なければ変更完了です。

adguardhome導入その後

ここまでセットアップしてしばらく使用してみたところ、主にスマフォアプリがNWエラーで使えなくなる問題が多発したので、結局アドブロックとトラッキングブロック機能をOFFにすることにしました。

今はDoHをDNSに変換したり、接続先を可視化するレイヤーとしてadguardhomeを利用しています。

参考サイト