今回はLinuxサーバにAdGuard HomeでLAN内DNSをたてる手順のメモ。ついでにTailscaleを使っている場合はもう一手間かかるのでそれも書く。
環境
- Linux Mint Xfce 22.3
- ThinkPad L390
- AdGuardHome
- ついでにTailscale
Tailscaleを利用している場合は設定がちょっと増えるのでおまけ。
AdGuardHome
53番問題がややこしいのでLinuxでやるのが望ましいのかなと思った。ネットワークを直接使うようなものなので、Dockerよりネイティブでやるほうがいいかなとも思う。
ポート53を開ける
まずLinux Mint Xfceというか、Ubuntu系列だと、53番はすでに使われているかと思う。以下のsystemd-resolveはUbuntuの機能であるらしい。
$ sudo lsof -i :53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd-r 589 systemd-resolve 14u IPv4 8130 0t0 UDP _localdnsstub:domain
systemd-r 589 systemd-resolve 15u IPv4 8131 0t0 TCP _localdnsstub:domain (LISTEN)
systemd-r 589 systemd-resolve 16u IPv4 8132 0t0 UDP _localdnsproxy:domain
systemd-r 589 systemd-resolve 17u IPv4 8133 0t0 TCP _localdnsproxy:domain (LISTEN)
FAQ(よくあるご質問) | AdGuard DNS Knowledge Base
こいつを殺す必要がある。殺す手順はドキュメントのとおりなのだが
sudo mkdir -p /etc/systemd/resolved.conf.dそんで/etc/systemd/resolved.conf.d/adguardhome.confを作成する。で、作成したファイルに以下を記述する。
[Resolve]
DNS=127.0.0.1
DNSStubListener=no以下を実行。
sudo mv /etc/resolv.conf /etc/resolv.conf.backup
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl reload-or-restart systemd-resolvedこれでもう一度53番を見たら何もないはず。
インストール
Getting started | AdGuard DNS Knowledge Baseに従う。
ポート53を開けていれば、問題なく進むはず。
ルータの設定だけ、DNSサーバをLinuxマシンのIPにする。ここで、ルータ側でMACアドレスでIPアドレス決め打ちの設定をするとよい。このへんの設定はルータによるので割愛。
ファイアウォール
他PCからアクセスするのにポートを開ける。
# DNS問い合わせを受け付けるために必須(UDP/TCP両方)
sudo ufw allow 53
# Web管理画面にアクセスするために必要
sudo ufw allow 80/tcp
# 設定変更を反映
sudo ufw reload80はAdGuardのダッシュボード。
確認
LAN内のPCから以下を実行して結果を見る。
nslookup doubleclick.net サーバのIPアドレスこれは広告配信ドメインなので、これが無効化されるはず。以下のような結果になる。
Server: サーバのIP
Address: サーバのIP#53
Non-authoritative answer:
Name: doubleclick.net
Address: 0.0.0.0(optional) ダッシュボードのポートを変更する
ダッシュボードがポート80という特等席を使ってしまっている。多分他にもっと大事なのに譲ったほうが良い。僕の場合はCaddy使うので変更が必要。
/opt/AdGuardHome/AdGuardHome.yamlを編集する。
http:
address: 0.0.0.0:80 # ここを 適当なポート に変更再起動する。
sudo systemctl restart AdGuardHomeufwも設定。
sudo ufw allow ポート番号他端末からブラウザで http://IPアドレス:ポート番号でダッシュボードを開けたらOK。
ああ…次はTailscaleだ…
Tailscale
Tailscaleを使っている場合、Tailscale側でもDNSの設定をする必要がある。そのままだとnslookupの実行結果は以下のようになるはずだ。
> nslookup doubleclick.net
Server: 100.100.100.100
Address: 100.100.100.100#53
Non-authoritative answer:
Name: doubleclick.net
Address: 142.251.23.100
Name: doubleclick.net
Address: 142.251.23.102
Name: doubleclick.net
Address: 142.251.23.138
Name: doubleclick.net
Address: 142.251.23.139
Name: doubleclick.net
Address: 142.251.23.113
Name: doubleclick.net
Address: 142.251.23.101
TailscaleのDNSが使われてしまう。なので、LocalにたてたAdGuard Homeに向ける設定が必要。
TailscaleのWebコンソールにログインして、AdGuardHomeをインストールしたLinux PCのTailscaleのPrivate IPを調べる。
で、それをTailscaleのDNS設定より、メモしたIPアドレスをnameserverとして利用するように設定する。

Add nameserverの「Custom...」よりIPアドレスを入れて、Override DNS serversをONにする。
これで、以下のようになるはずだ。
> nslookup doubleclick.net
Server: 100.100.100.100
Address: 100.100.100.100#53
Non-authoritative answer:
Name: doubleclick.net
Address: 0.0.0.0AdGuard Home側の設定
外からつなげる場合、AGHのDNS書き換えを192.168.x.xではなく、TailscaleのIPアドレスにしないといけない。
Androidの場合の設定
Androidの場合、Tailscaleアプリを入れてもConnectedでDNSに到達しないと怒られたりする。以下より、プライベートDNSをOFFにする。
Android: 設定 > ネットワークとインターネット > プライベートDNS
所感
なんだかんだで手こずった。
ちなみに僕はこの後Caddyを入れて、同一ドメインでLAN内と外からで同じアプリにログインできるようにする予定。
<関連記事>


コメント