
広告は全部消えない。でもDNSで余計な通信は減らせる|LN6001-JPのAdblock入門【OpenWrt集中連載008】
スマートフォン、PC、テレビ、IoT機器の広告通信を、ルーター側のDNSでまとめて減らす。Adblockは、そのための機能です。
ただし、広告が全部消えるわけではありません。YouTubeやSNSの広告、アプリと同じドメインから配信される広告、DNS over HTTPS(DoH)でルーターを迂回する通信は残ることがあります。
この記事では、Linksys Velop WRT Pro 7(LN6001-JP)のメーカー提供のOpenWrtベースのOSへAdblockを導入し、LuCIで設定・確認・復旧する流れを紹介します。OpenWrtの広告ブロックをこの製品で試すための手順です。対象は従来の1.2.0.15環境で、OpenWrt本流向けのAdblock最新版をそのまま入れる案内ではありません。標準ファームウェアと本流への移行作業は分けて読んでください。
DNS広告ブロックは、通信先の名前で止める
端末がWebサイトやアプリを開く時は、まず example.com のような名前をIPアドレスへ変換します。この名前解決を担うのがDNSです。
Adblockは、問い合わせたドメインがブロックリストに載っていれば正常な名前解決を返さず、その通信先へ接続させません。通常の通信先は、そのまま名前解決します。Webページの内容を見て広告かどうかを判断する仕組みではありません。

ルーターでまとめて処理するため、スマートフォンだけでなく、テレビ、ゲーム機、IoT機器にも同じ方針を適用しやすくなります。
できることと、できないことを先に分ける
DNS広告ブロックの満足度は、期待値の置き方でかなり変わります。

特にYouTubeのように、見たい動画と広告が同じ配信基盤を使うサービスは、DNSだけで広告部分をきれいに分けられません。マルウェア対策やペアレンタルコントロールの代わりにもなりません。
一方、広告配信・解析・トラッキング専用のドメインには効果を期待できます。「すべて消す」より「家中の余計な問い合わせを減らす」と考えると、用途がはっきりします。
導入はバックアップから始める
Adblockを入れる前に、LuCIの System → Backup / Flash Firmware から設定バックアップを保存します。DNSはネットワーク全体の土台です。設定を誤ると、Wi-FiにはつながるのにWebサイトを開けない状態になります。
バックアップにはSSID、パスワード、内部IPアドレスなどが含まれる場合があります。SNSや公開リポジトリへ置かないでください。
SSHを使える場合は、空き容量とメモリも確認しておきます。
以降のCLI例は、LN6001-JPのOpenWrtベースのファームウェア(ver. 1.2.0.15)を前提にしています。ファームウェアやAdblockの世代によって、項目名やファイル名が変わる場合があります。
df -h
free
ブロックリストを増やすほど、処理時のメモリ使用量も増えます。最初は少数のリストから始めるのが安全です。
LuCIなら五つの工程で始められる
Linksys公式手順では、ブラウザで開く管理画面(LuCI)から luci-app-adblock を追加し、再起動後にAdblockを設定します。

1. luci-app-adblock をインストールする
LuCIの System → Software を開き、Update lists を押します。検索欄へ luci-app-adblock と入力し、パッケージをインストールしてください。通常は依存関係としてAdblock本体も入ります。
日本語パッケージが提供されている場合は、luci-i18n-adblock-ja も追加できます。
SSHから行う場合は次の通りです。
opkg update
opkg install luci-app-adblock
opkg list-installed | grep -E 'adblock|luci-app-adblock'
パッケージ一覧の更新に失敗する場合は、Adblockより先にWAN接続、DNS、ルーターの時刻を確認します。
2. ルーターを再起動する
LuCIの System → Reboot から再起動します。再ログイン後、Services → Adblock が表示されることを確認してください。
3. 初期設定は四項目に絞る
最初に触る項目は、次の四つで十分です。

最初に試す設定例です。Force Local DNSとDNS Reportは、用途に合わせて選びます。
Enabled:有効にしてサービスを動かす
DNS backend:通常のdnsmasq構成では dnsmasq。別のDNS構成を導入済みなら先に現在値を確認する
Force Local DNS:通常DNSをルーターへ集約したい場合に有効にする。子ども用Family DNSなどの別方針と競合しないか確認する
DNS Report:動作確認・調査中だけ有効にし、確認後は必要がなければ無効へ戻す
Force Local DNS は、端末が外部DNSへ直接送ろうとする通常のDNS通信を、ルーター側へ寄せる設定です。DNS Report は、どのドメインへ問い合わせがあり、何がブロックされたかを追う時に使います。
設定後は Save & Apply を押し、Adblockを再読み込み(Reload)します。
DNS Reportには、端末が問い合わせたドメインなどの利用履歴が記録されます。調査中だけ有効にし、管理画面やレポートを第三者へ見せないでください。
4. ブロックリストは初期値から試す
Blocklist Sourcesを開くと、多くの候補が並びます。全部にチェックを入れたくなりますが、最初は初期選択のまま、または少数の定番リストで始めてください。
リストを増やすほど、誤ブロックとメモリ負荷が増えます。普段使うサービスが動くことを確認してから、一つずつ追加します。
5. 「減った」と「壊れていない」を両方確認する
LuCIの稼働状況(Runtime)で、Adblockが有効か、ブロック対象ドメイン数が0ではないかを見ます。SSHでは次のコマンドで状態を確認できます。
/etc/init.d/adblock status
logread | grep -Ei 'adblock|dnsmasq' | tail -n 80
その後、普段使うWebサイトやアプリを実際の端末で試します。確認メモには本体ファームウェア版、導入したAdblockの版、使ったリスト、端末のDNS設定を残します。ブロック対象ドメイン数はリストの規模で、実際に止めた通信件数ではありません。DNS Reportで対象端末の問い合わせと結果を見てから、効果を判断します。

広告が残っていても、それだけで失敗とは限りません。必要なサイト、ログイン、決済、動画、ゲーム、スマート家電が正常に動き、対象にできる広告やトラッキングが減っていれば成功です。
Force Local DNSでもDoHは別経路になる
Force Local DNSが主に扱うのは、ポート53を使う通常のDNSです。ブラウザやアプリがHTTPSの中へDNS問い合わせを入れるDoHは、同じ仕組みでは止められません。

まず、家庭内でAdblockの対象にしたい端末のセキュアDNS設定を確認します。ChromeやEdgeでは「セキュアDNS」、Firefoxでは「DNS over HTTPS」という名前です。
DoHの迂回まで抑えたい場合、Linksys公式サポートでは luci-app-banip を追加し、banIPのDoHリストをIPv4とIPv6で有効にする方法も案内しています。ただし、ブロック範囲が広がるぶん誤判定も増えます。端末側の設定確認、少数端末での検証、banIPの順に進めるほうが原因を追いやすくなります。
誤ブロックは「止める、探す、許可する」で戻す
ログイン画面が開かない、決済で止まる、アプリの画像だけ出ない。このような症状が出たら、まずAdblockを止めます。

SSHでは次のコマンドで一時停止できます。
/etc/init.d/adblock stop
止めた状態で問題が解消すれば、Adblockが原因の可能性が高くなります。DNS Reportとログを見て、必要なドメインだけをAllowlistへ追加します。
LuCIの Services → Adblock → Allowlist(許可リスト)を使うのが確実です。CLIで直接編集する場合は、Adblockの世代によってファイル名が異なる点に注意してください。
ls -1 /etc/adblock/adblock.*list
LN6001-JPのファームウェアに搭載されているAdblockの世代では adblock.whitelist / adblock.blacklist、新しいAdblockでは adblock.allowlist / adblock.blocklist が使われる場合があります。実際に存在するファイルを確認してから編集します。
原因となったドメインが api.example.com なら、いきなり example.com 全体を許可せず、必要な範囲だけを追加してください。追加後は、Adblockの状態に応じて操作を分けます。
停止中なら起動します。
/etc/init.d/adblock start
すでに稼働中なら再読み込みします。
/etc/init.d/adblock reload
小さなオフィスでは、先に除外対象を決める
家庭内のスマートフォンで一部の画像が表示されない場合と、店舗の決済端末が止まる場合では、影響がまったく違います。

POS、決済、予約、会計、勤怠などの端末は、最初から強いブロックを当てないほうが安全です。検証用端末で試し、必要な通信先を把握してから適用範囲を広げます。
ゲストWi-Fi、子ども用SSID、IoT用ネットワークを分けている場合は、SSID、DHCP、DNS、通信ルールを分ける単位(firewall zone)をまとめて設計してください。Adblockだけで全端末を同じ方針にそろえる必要はありません。
運用は「少なく始め、問題が出たら戻す」

リストやサービス側のドメインは変わります。昨日まで動いたサイトが止まった場合も、上の一時停止・調査・許可の順で確認し、変更内容を残してください。
補足:上級者向けの導入スクリプト
ikm-san/velop では、LN6001-JP向けの adb_setup.sh が公開されています。Adblockの導入に加え、日本向けのブロックリスト、LANのDNS配布、Force Local DNS、許可・拒否リスト、毎日3:50のReloadまでまとめて設定するスクリプトです。
スクリプト集: ikm-san/velop
このスクリプトは任意です。既存の dhcp.lan.dhcp_option と dhcp.lan.dns を整理して設定し直すため、独自DNS、VPN、子ども用DNSなどを使っている環境では、そのまま実行しないでください。
まずダウンロードして内容を読みます。
curl -sS -o /tmp/adb_setup.sh https://raw.githubusercontent.com/ikm-san/velop/main/adb_setup.sh
sed -n '1,220p' /tmp/adb_setup.sh
変更内容を理解でき、バックアップも取れている場合だけ実行します。
sh /tmp/adb_setup.sh -v
ダウンロード先の main は更新されるため、この節の説明と取得したファイルが一致するか確認してください。上の表示コマンドは最初の220行だけを示します。それより後に処理がある場合は、ファイル全体を確認してから判断します。DNS設定を独自に変更している場合は、LuCIから必要な項目だけ設定するほうが安全です。