子供が遊んでいるFireタブレットを見たら、ゲームアプリの広告が次から次へと出てきて、まともに遊べない状態になっていました。家の中だけでなく、外出先で遊ばせるときも同じです。

広告を閉じるたびに「押しちゃった」って半泣きになるのよね。ゲームで遊びたいだけなのに。

エンジニアとして仕組みから考えて、アプリを1個も入れずに端末ごと広告を止める方法を実機2台で試してみました。
- 何が壊れうるか:設定するホスト名を打ち間違えるなどすると、Fireタブレットがインターネットにつながらなくなることがあります。端末内のデータが消えるような操作ではありません。
- 元に戻す方法:後述の「元に戻したいとき」に載せている1行のコマンドで、いつでも設定を無効化できます(Fire OS 8ではあわせてWi-FiのOFF/ONも行ってください)。
- 自信がない場合:パソコン操作に慣れた家族・知人に手伝ってもらう方法があります。YouTubeやPrime Videoの広告を消すことが目的なら、この記事の方法では原理的に消せないため(後述)、それぞれの公式の有料プランを検討したほうが早く確実です。
| 言葉 | ひとことで言うと |
|---|---|
| DNS | インターネットの「住所録」。名前(ドメイン)から番地(IPアドレス)を調べる係 |
| 広告ブロックDNS | 広告の住所だけ「載っていません」と答える住所録 |
| Private DNS (DoT) | 鍵付きの専用回線で、決まった住所録にだけ問い合わせる設定 |
| フォールバック | 指定した住所録が遅いと、端末が勝手に別の住所録に聞きに行ってしまうこと |
| adb | パソコンから端末に命令を送る、Google公式の連絡線 |
| ホスト名 | ここでは「どの住所録を使うか」を指定する文字列 |
| ブロックリスト | どの広告の住所を止めるかをまとめたルール集 |
| 開発者オプション | ふだんは隠れている、端末の詳細設定メニュー |
結論から言うと、Fireタブレットの広告対策で一番効くのは、adb(Android Debug Bridge)というコマンドツールを使って、Private DNS(DNS over TLS)をOS側に直接書き込む方法です。アプリのインストールもroot化も不要で、Wi-Fiでも外出先のモバイル回線でも効きます。ただし「何でも消せる魔法」ではないので、先に結論を表にまとめておきます。
| 論点 | 結論 | 根拠 |
|---|---|---|
| どうやって止めるか | adbでPrivate DNS (DoT) を直接設定する | 我が家の実測 |
| アプリ・root化は必要? | どちらも不要 | まっさらな端末2台で成功 |
| ゲームアプリの広告 | ブロックできる | doubleclick.net等がブロック応答 |
| YouTube / Prime Videoの広告 | 原理的にブロックできない | 本編と同一ドメイン・サーバー側挿入 |
| Fire OS 8の注意点 | 設定直後は一時的に通信不能になる | Fire HD 8で再現 |
| ブロックリストの本数 | 3本まで | 増やすほど誤爆リスクが線形に増える |
なぜルーターやWi-Fi設定でDNSを変えても広告が消えないのか

住所録っていうけど、それって家のWi-Fiルーターの設定とは違うものなの?

別物です。ルーターの設定はあくまで「お願い」で、端末自身が「この住所録、返事が遅いから自分で探そう」と決めてしまえるのがフォールバックなんです。
広告ブロック用のDNSサーバーを使う、という発想自体は珍しくありません。ところがFireタブレットの場合、ルーターでDNSを配っても、Wi-Fi設定の詳細オプションで静的DNSを手動指定しても、広告が消えないケースに何度も遭遇しました。理由を調べてみると、Android本来の仕様にたどり着きました。
Androidには、指定されたDNSサーバーが応答しない・遅いと端末が判断した場合に、端末が独自の判断で外部DNS(8.8.8.8などのGoogle Public DNS)へ自動的に切り替えるフォールバック機能が組み込まれています。これはFire OSの不具合ではなく、Androidのネットワークスタックが持つ正規の挙動です。結果として、ルーター側でどれだけ丁寧にDNSを設定しても、端末側が勝手に別のDNSへ逃げてしまい、ブロックが素通りします。

じゃあDNSを設定すること自体、意味がないの?

「普通の」DNS指定は無意味に近いです。でも、フォールバックできない形でDNSを固定する仕組みがAndroidにはもう一つ用意されています。それがPrivate DNSです。
仕組み:Private DNSの設定画面が無いだけで、機能そのものは生きている

鍵付きの回線って、パスワードを覚えておく必要があるの?

いいえ、パスワードは不要です。「この住所録にだけ聞きに行ってね」という接続先を1つ、端末に教え込むだけの設定です。
Private DNS(DNS over TLS、通称DoT)は、DNSの通信そのものを暗号化した上で固定する仕組みで、Android 9以降のAndroidには標準機能として搭載されています。通常のAndroidスマホなら「設定 → ネットワークとインターネット → プライベートDNS」から誰でも変更できます。ところがFireタブレットには、この設定画面が存在しません。
調べた範囲では、Amazonが独自にUIをカスタマイズする過程で、この設定画面だけを表側から取り除いているようでした。ただし、OS内部の設定項目そのもの(private_dns_modeとprivate_dns_specifier)は消えておらず、値として生きています。つまり、画面がないだけで、値を直接書き込む手段さえあれば有効化できるということです。その手段がadbです。


adbはAndroid端末をPCから操作する開発者向けの公式ツールです。Googleが配布していて、怪しいアプリではありません。
この方法には、アプリを使ったフィルタリングにはない利点がいくつかあります。アプリのインストールが不要なので、まっさらな初期状態の端末でも使えますし、root化のような端末保証に関わるリスクもありません。VPN型の広告ブロックアプリのようにVPNスロットを専有することもなく、OSのネットワーク設定として書き込まれるため、家のWi-Fiに限らずモバイル回線でも、外出先の別のWi-Fiでも同じように効きます。そして端末を再起動しても設定は消えません。
- アプリのインストールが不要(初期状態の端末でも使える)
- root化不要
- VPNスロットを消費しない
- Wi-Fiでもモバイル回線でも、外出先でも効く
- 再起動後も設定が残る
準備:WindowsパソコンとFireタブレットをadbでつなぐ

連絡線って、パソコンから何でもできちゃうってこと?

端末側で許可した1台のパソコンからしか操作できません。しかも今回使うのは、DNSの設定を書き換えるだけの、ごく限られた命令です。
adbを使うのが初めてでも、順番通りに進めれば難しい作業ではありません。ただし、つまずきやすい箇所が2つあるので、そこは先に強調しておきます。全体の流れは次の5ステップです。

手順1:端末側でADBデバッグを有効化する
Fireタブレットの「設定」から「デバイスオプション」に進み、「Fireタブレットのバージョン情報」を7回連続でタップします。すると「開発者オプション」というメニューが新しく出現するので、その中の「ADBデバッグ」をONにします。この操作自体はFireタブレットの正規のメニュー内で完結し、非公式なハックではありません。
手順2:PCとUSB接続する(ここで詰まる人が多い)
USBケーブルでPCとつないだら、Fireタブレット側の通知パネルを開いて「ファイル転送」を選択しておく必要があります。デフォルトの「充電のみ」のままだと、PC側からは端末がまったく見えません。
データ転送に対応した(充電専用ではない)USB-Cケーブルの一例です。現行のFire HD 10 / Fire HD 8はUSB-C端子なので、購入する際はUSB-C対応のケーブルを選んでください。

ケーブルをつなぐだけじゃダメなの?
手順3:PCにadbを入れる(Windows)
Windowsの場合、公式のプラットフォームツールをwingetで入れるのが手早い方法です。コマンドプロンプトかPowerShellを開いて、次のコマンドを実行します。
winget install --id Google.PlatformTools -e
このコマンドは、Google公式のadbツール一式をパソコンにインストールしています。
手順4:デバイスを認可する
PC側で端末が認識されているか、次のコマンドで確認します。
adb devices
結果がunauthorizedと表示された場合は、Fireタブレットの画面側に許可を求めるダイアログが出ているはずです。「このパソコンからのUSBデバッグを常に許可する」にチェックを入れて「許可」をタップしてください。表示がdeviceに変われば準備完了です。

このadbの準備さえ済ませておけば、Fireタブレット以外の検証にも使い回せます。

手順:Private DNS(DoT)をadbコマンドで書き込む
ここまで来れば、あとはコマンドを2行打つだけです。ターミナルで次のように入力します。
adb shell settings put global private_dns_specifier xxxxxx.dns.nextdns.io
adb shell settings put global private_dns_mode hostname
1行目でPrivate DNSの接続先ホスト名を指定し、2行目でPrivate DNSの動作モードを「ホスト名指定」に切り替えて有効化しています。
指定するホスト名には、大きく分けて2つの選択肢があります。我が家では子供用途としてNextDNSを選びました。
| ホスト名 | 特徴 |
|---|---|
family.adguard-dns.com | アカウント登録不要ですぐ使える。広告・アダルト・セーフサーチ強制まで一括で入る。手っ取り早さを優先するならこちら |
xxxxxx.dns.nextdns.io(推奨) | 端末ごとにブロックリストを個別管理でき、何がブロックされたかをログで確認できる。子供の端末で「何が原因か」を追いやすい |
子供の端末では、あとから「このアプリが動かない」という報告を正確にはしてくれません。だからこそ、ブロックされた通信をログで後追いできるNextDNSのような仕組みを選んでおくと、原因の切り分けが格段に楽になります。この理由は後半の運用の章でもう一度触れます。

コマンド2行だけで、本当にこれで終わりなの?
終わりではありません。設定を書き込んだだけでは「うまくいっているつもり」で終わってしまうことがあるので、必ず次の章で効いているかを確認してください。
元に戻したいとき(切り戻し手順)
設定してみて動作が不安定になった、あるいはやめたいと思ったときは、次の1行でPrivate DNSを無効化できます。adbが使える状態(手順3・4を済ませた状態)であれば、いつでも実行できます。
adb shell settings put global private_dns_mode off
このコマンドは、Private DNSの設定そのものを無効化し、Fireタブレットを設定前の通常のDNSの状態に戻しています。
切り戻しの後に通信できない状態が続く場合は、後述の「実機で踏んだ罠」の章と同じく、Wi-FiをいったんOFFにしてONに戻してみてください。

もし途中で怖くなったら、どうしたらいいの?

さっきの1行を実行すれば、いつでも元の状態に戻せます。焦らずに、Wi-FiのOFF/ONも試してみてください。
検証する:設定しただけで満足しない
コマンドが通っただけでは「本当に効いているか」はわかりません。ここを飛ばして満足してしまうと、実は素通りしていた、ということが普通に起こります。Fireタブレットのブラウザでhttps://test.nextdns.ioを開いて確認します。
{
"status": "ok",
"protocol": "DOT",
"profile": "xxxxxx",
"server": "vultr-tyo-1"
}
"protocol": "DOT"と表示され、自分の設定したプロファイルが返ってくれば成功です。我が家の環境では東京のサーバーに接続されたので、体感できるような遅延の増加はありませんでした。
あわせて、広告配信ドメインが本当に止まっているかをadb shell pingで確かめました。
doubleclick.net → 127.0.0.1 (ブロック応答)
www.amazon.co.jp → 正常に解決

この確認さえ通れば、あとはゲームアプリで実際に広告が減っているかを見てもらえれば十分です。
検証が終わったら、Fireタブレット側の「開発者オプション」から「ADBデバッグ」をOFFに戻しておきます。子供が普段使う端末なので、デバッグモードを開けたままにする理由はありません。なお、Private DNSの設定自体はADBデバッグをOFFにしても残ります。この2つは別の設定項目です。
実機で踏んだ罠:Fire OS 8は設定直後にDNSが完全に死ぬ
実機2台で試した結果は次の表の通りです。どちらも最終的には成功しましたが、Fire OS 8の端末で1つ、事前に知らないと焦る挙動に遭遇しました。
| 機種 | OS | 結果 |
|---|---|---|
| Fire HD 10 (KFTRWI) | Fire OS 7.3.3.1 / Android 9 | 成功。設定直後から有効 |
| Fire HD 8 (KFTUWI) | Fire OS 8.3.3.8 / Android 11 | 成功。ただし下記の罠あり |
Fire OS 8(Android 11ベース)の端末では、adbコマンドを実行した直後から、アクセス先を問わずすべてのドメインが名前解決できなくなる(unknown host)状態になりました。ブラウザで何を開いても真っ白になり、初見では「設定を間違えて壊した」としか思えません。

え、急に何も開けなくなったんだけど、これ壊れたんじゃないの!?

慌てなくて大丈夫です。Wi-Fiを一度OFFにしてONに戻すと、そのまま復旧します。
Fire OS 7の端末ではこの現象は起きなかったので、Android 11側でPrivate DNSの反映タイミングが変わった影響ではないかと推測しています。いずれにせよ、「設定が終わった直後にネットが繋がらなくなっても、まずWi-Fiをトグルしてから判断する」と覚えておけば十分です。
何がブロックできて、何ができないのか:仕組みから理解する
この章を読み飛ばすと、あとで「効かないじゃないか」とがっかりすることになります。DNSでのブロックは万能ではなく、「どのドメインに接続するか」でしか判断できないという原理的な制約があります。仕組みから理解しておけば、過剰な期待もしなくて済みます。
ブロックできる:ゲームアプリ内の広告
ゲームアプリに表示される広告(AdMob、Unity Ads、AppLovin、ironSourceなど)は、ゲーム本体とは別の広告配信ドメインから読み込まれています。DNSの段階でそのドメインへの接続を止めてしまえば、広告そのものが表示されなくなります。今回の一番の目的だった「ゲーム中の広告」は、この仕組みで達成できました。

ブロックできない:YouTubeの広告
YouTubeの広告動画は、本編動画とまったく同じドメイン(*.googlevideo.comなど)から、同じ経路で配信されています。DNSは「どのドメインに繋ごうとしているか」しか見ていないため、広告と本編を区別する手段がそもそも存在しません。ドメインごとブロックすれば、YouTube自体が見られなくなってしまいます。これはNextDNSの設定不足ではなく、Pi-holeやAdGuard Homeを含めたDNSブロッキング方式そのものの限界です。
| 手段 | 備考 |
|---|---|
| YouTube Premium | 公式の有料オプション。設定が壊れる心配がない |
| Firefox + uBlock Origin | 無料。FirefoxはAmazonアプリストアに正規に配信されている |
| NewPipe等の代替クライアント | 無料だが、YouTube側の仕様変更で定期的に動かなくなる |
ブロックできない:Prime Videoの広告
Prime Videoの広告は、配信サーバー側で本編にあらかじめ縫い込まれた状態(サーバーサイド広告挿入)で届きます。DRMもかかっているため、代替クライアントに切り替えるという逃げ道すらありません。公式の「広告なしオプション」に加入する以外に、現実的な回避手段はないと考えています。
ブロックできない:ロック画面の「特別オファー」
ロック画面に出てくる広告はAmazon側の端末仕様によるもので、DNSの話とは別軸です。消したい場合は、端末の設定画面から解除オプションを購入するか、カスタマーサービスに相談する必要があります。
ブロックリストと運用の勘所
NextDNSにはブロックリストが多数用意されていて、つい全部入れたくなりますが、これは逆効果です。リスト同士の重複は大きく、追加の効果は頭打ちになる一方、誤ブロックのリスクは足すたびに増えていきます。しかも相手は子供なので、「このアプリが動かない」を正確に報告してくれません。原因の切り分けが最も難しい相手だと思って運用する必要があります。

リストって、多く入れておいた方が安心なんじゃないの?

それが逆で、増やすほど「どのリストが原因で壊れたか」が分からなくなるんです。だから僕は3本までに絞っています。
入れる(3本まで)
| リスト | 理由 |
|---|---|
| NextDNS Ads & Trackers Blocklist | 純正リスト。誤爆が少なく、保守の反映も早い。まず土台にする |
| AdGuard Mobile Ads Filter | アプリ内広告SDKに直接効く。今回の主目的にいちばん効く |
| OISD SmallまたはHaGeZi Multi LIGHTのどちらか一方 | 上2本の穴を埋める用。両方は入れない |
まずは上の2本だけで数日運用してみて、それでも広告が残るようなら3本目を足す、という順番をおすすめします。最初から3本まとめて入れると、何が効いたのか、何が誤爆しているのかの切り分けができなくなります。
入れない
- EasyList / EasyPrivacy:ブラウザの要素非表示を前提にしたリストで、DNS層で使うとアプリが壊れやすい割に、アプリ内広告への上乗せ効果は小さい
- HaGeZi Pro++ / Ultimate、Energized系:攻撃的すぎる、または保守が止まっているものがあり、子供の端末には不向き
- 大きいリストの積み増し全般:5本も10本も入れると、どれが原因かが永久にわからなくなる

うっかりAmazonの項目もONにしちゃいそうな名前よね…。
ブロックリストより効く設定がある
子供用途に限って言うと、広告リストを積み増すより、次のトグルを見直す方が効果が大きいというのが僕の考えです。
- Privacy:
Block Disguised Third-Party Trackers(CNAME偽装の解除)をON。副作用がほとんどないまま検出力が上がる - Security:
Threat Intelligence Feeds/Google Safe Browsing/Block Newly Registered DomainsをON - Parental Control:成人向けコンテンツのブロックに加えて、セーフサーチ強制とYouTube制限モード強制をON。端末側の設定を子供が変えても、DNS側で強制がかかるので効き続ける

このあたりはブロックリストと違って誤爆がほぼ無いので、真っ先にONにしてしまって問題ありません。
運用:ログを見る習慣だけは作る
NextDNSの「Logs」を、子供が実際にゲームで遊んでいる最中に開いてみてください。ブロックされたドメインがリアルタイムに流れてきます。アプリが固まった瞬間に表示されたドメインが原因であることが多いので、その場でAllowlistに追加すればすぐに解決します。リストを1本足すたびに、1〜2日はログを確認する。これだけを守れば、原因不明のまま詰まることはほぼなくなります。

複数台ある場合は、同じ設定IDのままだとログ上でどちらの端末か区別できません。分けたいならNextDNSでプロファイル自体を分けてください。広告ブロックの効き方は、IDを分けても変わりません。
よくある質問
子供が設定を触って解除してしまうことはありませんか?
Private DNSの設定画面自体がFireタブレットに存在しないため、子供が普段の操作でこの設定に気づいたり、変更したりする経路がありません。検証を終えたらADBデバッグをOFFに戻しておけば、adbコマンドで再度書き換えない限り設定は維持されます。
家族のAndroidスマホにも同じ設定をしていいですか?
一般のAndroidスマホには、この記事で使ったadbコマンドを使わなくても、設定画面から直接Private DNSのホスト名を入力できます。Fireタブレットだけが設定画面を持たないので、adbが必要になるのはFireタブレット特有の事情です。
一部のアプリだけ広告が消えず、動作もおかしくなりました
ブロックリストの誤爆を疑ってください。NextDNSのLogsを開いて、そのアプリを操作した直後にブロックされているドメインがないか確認し、心当たりのあるドメインをAllowlistに追加します。改善しない場合は、3本目に足したリストを一旦外して切り分けてみてください。
ADBデバッグを有効にするのは危険ではありませんか?
ADBデバッグは、許可したPCからのみ端末を操作できる公式の開発者機能です。今回のように認可のダイアログで許可したPCだけがアクセスできる状態にした上で、設定を終えたらOFFに戻す運用であれば、危険性は限定的だと考えています。

これでようやく、広告に振り回されずに遊ばせられそうね。
まとめ:アプリ不要・外出先でも効く。ただし万能ではない
Fireタブレットの広告は、アプリを1個も入れずに、端末2台とも、外出先でも効く形で止められることが確認できました。手段はadbによるPrivate DNS(DoT)の直接設定です。ゲームアプリの広告にはよく効きますが、YouTubeとPrime Videoの広告には原理的に効きません。Fire OS 8では設定直後にDNSが一時的に死にますが、Wi-Fiのトグルで復旧します。そしてブロックリストは3本まで。増やすほど、原因を切り分けられなくなって壊れていきます。
これから買い替え・買い足しを検討する方に向けて補足すると、今回検証に使った我が家の個体(Fire HD 10 KFTRWI)とは世代が違う可能性がありますが、この記事の手順自体はFire OS 7とFire OS 8の2台で確認できています。現行販売されているFire HD 10は次のモデルです。






























コメント