AdGuard Home: Web UI からクライアントのフィルタリングまで
- AdGuard Home が OpenWrt のポート
53を使い、Web UI は3000で動作します。 dnsmasqは5353に移り、引き続き DHCP を提供します。- DHCP クライアントは DNS として
192.168.2.1を受け取ります。 - カスタムフィルタールールでテスト用ドメインがブロックされ、通常の名前は引き続き解決できます。
- データディスク、AGH の設定、フィルターは再起動後も維持されます。
対象の環境とトポロジー
Section titled “対象の環境とトポロジー”- PVE 9.2.2 シングル NIC、OpenWrt 25.12.6 x86_64 VM 201 (RAM 1GB、データディスク 2GB)。
- WAN の
net0はvmbr0(DHCP)、LAN のnet1は分離されたvmbr2(192.168.2.0/24)。 - AGH 0.107.79 は OpenWrt の
apkフィードから取得。 - 2 台の OpenWrt VM が、どちらも DHCP を動かしたまま 1 つのブリッジを共有しないでください。この検証環境では VM 200 が
vmbr1(192.168.1.0/24) にあるため、VM 201 はvmbr2(192.168.2.0/24) を使う必要があります。そうしないと、クライアントが誤ったサブネットのリースを受け取ることがあります。
| 物理ポート | PVE ブリッジ | 仮想 NIC | OpenWrt インターフェース | 役割 |
|---|---|---|---|---|
| nic0 | vmbr0 | net0 | wan DHCP | upstream 192.168.50.1 |
| — | vmbr2 | net1 | lan 192.168.2.1 | AGH + DHCP clients |
ポートと役割
Section titled “ポートと役割”| ポート | コンポーネント | 役割 |
|---|---|---|
| 53 | AdGuard Home | クライアントの DNS、フィルタリング、上流への転送 |
| 3000 | AdGuard Home | Web UI |
| 5353 | dnsmasq | DHCP とローカル DNS。53 では待ち受けない |
AGH と dnsmasq を同時に 53 にバインドしないでください。DHCP のオプション 6 を、53 で待ち受けていないアドレスに向けないでください。
変更する前に
Section titled “変更する前に”cp /etc/config/dhcp /etc/config/dhcp.bak.$(date +%F)cp /etc/config/adguardhome /etc/config/adguardhome.bak.$(date +%F) 2>/dev/null || truecat /etc/config/dhcpOpenWrt へのコンソールまたは LAN からのアクセスを確保しておいてください。唯一の管理経路を、変更中の DNS に依存させないでください。
期待される結果dnsmasq/AGH の設定を復元できる。
最小限の手順
Section titled “最小限の手順”
apk updateapk add adguardhome block-mount e2fsprogse2fsprogs は mkfs.ext4 を、block-mount は fstab サービスを提供します。OpenWrt のローカルミラーを使っても構いませんが、パッケージは署名の検証を通る必要があります。
期待される結果adguardhome、block-mount、e2fsprogs がインストールされる。
空であることを確認した検証用のデータディスクでのみ実行してください。
mkfs.ext4 -F /dev/sdbmkdir -p /opt/aghmount /dev/sdb /opt/aghblock info /dev/sdbblock info が表示した UUID を使います。LuCI の Mount Points で、そのディスクのターゲットを /opt/agh に設定して有効にします。または CLI から、該当する @mount[n] を探します。
uci show fstab# find the @mount[n] whose uuid is <your-UUID>uci set fstab.@mount[n].target='/opt/agh'uci set fstab.@mount[n].enabled='1'uci commit fstab/etc/init.d/fstab enableblock mountmount | grep /opt/aghこの検証環境では、2GB のデータディスクに対して自動検出された fstab.@mount[2] を使い、ターゲットを /opt/agh に変更して有効にしたところ動作しました。[2] をそのままコピーせず、自分の UUID に対応するものを選んでください。
期待される結果/opt/agh が別のディスク上にあり、再起動後も維持される。
uci set dhcp.@dnsmasq[0].port='5353'uci commit dhcp/etc/init.d/dnsmasq restartnetstat -lnp | grep -E ':53|:5353'AGH が起動するまで、クライアントは 53 で名前解決できません。
期待される結果ポート 53 が空き、DHCP は引き続き動作する。
uci set adguardhome.config.work_dir='/opt/agh/work'uci commit adguardhomemkdir -p /opt/agh/workchown -R adguardhome:adguardhome /opt/agh /etc/adguardhome/etc/init.d/adguardhome enable/etc/init.d/adguardhome startsleep 3netstat -lnp | grep -E ':3000|:53'http://192.168.2.1:3000/ を開き、次を設定します。
- Web ポートは
3000 - DNS ポートは
53 - 管理者のユーザー名とパスワード
- この検証環境では、上流 DNS に
192.168.50.1 - 上流が DNSSEC を検証しない場合は、DNSSEC を無効にする
ブラウザーが使えない場合は AGH のセットアップ API を使えますが、管理者パスワードは絶対にコミットしないでください。
期待される結果Web UI に 3000 で接続できる。
uci add_list dhcp.lan.dhcp_option='6,192.168.2.1'uci commit dhcp/etc/init.d/dnsmasq restartuci show dhcp.lan | grep dhcp_optiondnsmasq のポートを変更しただけだと、一部のクライアントが DNS を受け取れなくなることがあります。オプション 6 を明示的に設定してください。
期待される結果クライアントが DNS として 192.168.2.1 を受け取る。
Filters → Custom filtering rules に次を追加します。
||blocked.example^これは予約済みのテスト用ドメインです。実際に使うときは、メンテナンスされているフィルターリストをあとから追加してください。確認には、「ページが壊れて見えるか」ではなく nslookup を使います。
期待される結果blocked.example が 0.0.0.0 を返し、通常の名前は引き続き解決できる。

netstat -lnp | grep -E ':53|:3000|:5353'nslookup blocked.example 192.168.2.1nslookup openwrt.org 192.168.2.1期待される結果: blocked.example は 0.0.0.0 を返します (IPv6 では :: も表示される場合があります)。openwrt.org は実際のアドレスを返します。
期待される結果AGH が 53/3000、dnsmasq が 5353 で待ち受けている。
ip addr showip routecat /etc/resolv.confnslookup blocked.examplenslookup openwrt.orgクライアントの DNS が 192.168.2.1 でない場合は、DHCP のオプション 6 と dnsmasq のポートに戻って確認してください。
期待される結果クライアントが 192.168.2.x のアドレスと、DNS 192.168.2.1 を取得している。
reboot再起動後:
mount | grep /opt/aghnetstat -lnp | grep -E ':53|:3000'nslookup blocked.example 192.168.2.1nslookup openwrt.org 192.168.2.1期待される結果データディスクがマウントされ、AGH が起動し、ルールが維持されている。
失敗した場合の分岐と復旧
Section titled “失敗した場合の分岐と復旧”AGH が起動しない / ポート 53 が使用中
Section titled “AGH が起動しない / ポート 53 が使用中”logread | grep -i adguard | tail -50netstat -lnp | grep ':53'/usr/bin/AdGuardHome --check-config -c /etc/adguardhome/adguardhome.yamldnsmasq がまだ 53 を使っている場合は、dhcp.@dnsmasq[0].port='5353' になっているか確認します。設定が壊れている場合は、バックアップを復元します。
cp /etc/adguardhome/adguardhome.bak.YYYY-MM-DD /etc/adguardhome/adguardhome.yaml/etc/init.d/adguardhome restartクライアントがまったく名前解決できない
Section titled “クライアントがまったく名前解決できない”DNS を一時的に dnsmasq に戻します。
uci set dhcp.@dnsmasq[0].port='53'uci -q delete dhcp.lan.dhcp_optionuci commit dhcp/etc/init.d/dnsmasq restart/etc/init.d/adguardhome stopまず基本的な名前解決を復旧させ、そのあとで AGH を 1 層ずつ調べます。
データディスクがマウントされていない
Section titled “データディスクがマウントされていない”mount | grep /opt/aghblock info /dev/sdblogread | grep -i fstabfstab の UUID、ターゲット、有効フラグを確認します。手動でマウントしてから AGH を再起動してください。
フィルタリングが効かない
Section titled “フィルタリングが効かない”
- クライアントが実際に AGH を DNS として使っていることを確認します。
- ルールが購読ではなく Custom filtering rules にあることを確認します。
- AGH に直接問い合わせます:
nslookup blocked.example 192.168.2.1。 - ブラウザーや OS の DoH は AGH を迂回することがあります。
E2 の検証記録 (2026-10-20)
Section titled “E2 の検証記録 (2026-10-20)”- 環境: PVE 9.2.2 シングル NIC、OpenWrt 25.12.6 VM 201 (1GB/データディスク 2GB)、AGH 0.107.79。
- ポート: AGH は
53+ Web3000、dnsmasq は5353、DHCP のオプション 6 は192.168.2.1。 - クライアント: DHCP で
192.168.2.166/24、DNS は192.168.2.1。blocked.example→0.0.0.0、openwrt.org→64.226.122.113。 - 再起動:
/opt/aghが fstab でマウントされ、AGH、dnsmasq、フィルタールールが復旧。Web は 302 を返しました。 - 未検証: ブラウザーの UI の実操作、外部の購読リスト、物理 LAN のクライアント、IPv6、長期の安定性。
情報源とレビュー
Section titled “情報源とレビュー”- これは E2 の検証記録です。独立したレビューや、物理 LAN でのテストは行っていません。
- レシピ:
tests/recipes/agh-25.12-vm201.md、環境メモ:docs/agh-e2-run.md。 - パッケージやバージョンが変わったら
testedVersionsを更新してください。init スクリプトをファームウェアのバージョン間でコピーしないでください。
出典
独立した OpenWrt の実践ノートです。各ページにファームウェア、デバイス、パッケージマネージャー、元に戻す手順を明記しています。
アイコン:Solar by 480 Design, CC BY 4.0