Debian 13:StubbyでDNSをDoT暗号化する

Debian

DoH / DoTが当たり前になった今、Linuxでも最低限の対策を

本記事では 2025年12月現在 Debian のStubbyが IPv6 不安定なためそれを今回は使用しません。
(2025年頭くらいまでは Stubby の IPv6 調子良かったのですがね(^_^;))
環境によっては IPv6を止めることで通信が遅く感じられる場合 があります。

ちなみにVPN使う場合はたいがい Stubby はいりません。というかないほうがいいです。


少し前まで、DNSの暗号化は「一部の人がやる設定」だった。
だが、状況は確実に変わっている。

現在の主流はこうだ。

  • 主要ブラウザ(Firefox / Chrome / Edge)
    → DoH(DNS over HTTPS)がデフォルト有効
  • Android
    → DoT(プライベートDNS)(DNS over TLS)がOSで標準対応
  • Windows 11
    → 設定画面に DoH 項目が正式に追加

つまり、DNSを平文で投げるほうが
むしろ時代遅れになりつつある

一方で、Linuxは何もしなければ今も平文DNSのまま。

この記事では、VPNのような重装備は使わず、

DNSの中身だけを静かに暗号化する

という、軽量で現実的な構成を紹介する。


DNS暗号化は「匿名化」ではない

最初に誤解を解いておく。

DNS over TLS(DoT)や DNS over HTTPS (DoH) は、

  • IPアドレスを隠すものではない
  • 匿名化ツールではない
  • 検閲回避のための魔法でもない

守るのは、あくまで DNSクエリの中身 だけだ。

現実的な脅威は、もっと地味なところにある。

  • 公衆Wi-Fi
  • マンションの共有回線
  • 社内・学内ネットワーク
  • ルーターや回線途中のDNS差し替え

こうした環境では、

  • 偽のIPへ誘導される
  • 広告・追跡用DNSに書き換えられる
  • 意図しないフィルタリングがかかる

いわゆる DNSジャック が起きやすい。

DoT / DoH は、
この「道を汚される」リスクを減らすための仕組みだ。


なぜLinuxでもやっておく意味があるのか

多くの人はすでに、

  • ブラウザでは DoH
  • Android スマートフォンでは DoT

という状態でネットを使っている。

その横で、

デスクトップLinuxだけ平文DNS

というのは、
全体の整合性として少し不自然になってきている。

DNS暗号化は、もはや尖ったセキュリティ対策ではない。
現代インターネットの最低限の作法 に近い。


今回の構成方針(重要)

この記事で紹介する構成は、意図的に割り切っている。

  • DNSのみ暗号化(DoT)
  • IPアドレスは隠さない
  • 上流DNSは Cloudflare(UFW設定の理解が必要だし不便にはなりますが…)
  • IPv4のみ使用(2025年12月現在DebianのStubbyバージョンではIPv6不安定なため)
  • GUI ネットワークマネージャー(NetworkManager)で設定
  • VPN使用時は Stubby をオフにする前提

目的はただひとつ。

軽く、壊れにくく、説明できる構成にすること

ちなみに systemd-resolved と resolv.conf ファイルの話し

あと
Debian13という前提をつけて会話しても
systemd-resolved
があるから stubby 使ってもあまり意味がないとかAIは言うのですが
Debianでは systemd-resolved は実はデフォルトで入ってませんwww

そんなもんないんです Debian

systemctl status systemd-resolved
コマンドで調べても
Unit systemd-resolved.service could not be found.
(ユニット systemd-resolved.service が見つかりませんでした。)

ですwww

だから 今回は触れませんが
アプリやOSの勝手な通信は多少はありますが resolv.conf でDNSを制御したら
Debianはほぼユーザーが通信を管理できます。
完璧に制御するならプラスUFWのファイヤーウォールでやろうとおもえばできます。
(UFW設定の理解が必要だし不便にはなりますが…)

Stubby.yml Cloudflare 1.1.1.1 & 1.0.0.1 IPv4のみ DoT暗号化の編集例

stubby.ymlファイルは一個余計なスペースとか文字混入してもエラーで動かなくてこれをして設定GUIのネットワーク設定のDNSの自動をオンに戻すネット通信不能なんで
慎重に入力してください。


Step 4:DNSをGUIで127.0.0.1に設定する
ここがこの構成の肝。
設定を開き
ネットワーク設定を開き
IPv4 DNS:127.0.0.1
DNS自動取得:オフ
設定したら必ず適用ボタンを押す

今回の設定ではIPv6はDoT暗号化されないので
通信漏れしないように
IPv6設定にも行き
IPV6メソッドをオフにしてIPv6通信をブロック

設定したら適用を忘れずに押す
設定GUI操作方法↓

こう設定して適用押す↓
これでIPv4通信は127.0.0.1の Stubbyに流れる。

IPv6はこの場合余計な平文DNS通信をするのでブロックしておく
設定したら適用を忘れずに押す↓

これをして設定GUIのネットワーク設定のDNSの自動をオンに戻す⚠ VPNを使うときの注意(重要)

この構成では、VPN使用時は Stubby をオフにすることを推奨する。

まあ別にどっちみち通信はできるんだけど理由はシンプル。

  • 多くのVPNは独自DNSを使う
  • VPN側のDNS保護と Stubby が競合することがある
  • DNSが二重管理になると、通信不能やリークの原因になる

運用方針としては、

  • 通常通信(VPNなし)
    → StubbyでDNS暗号化
  • VPN使用時
    → Stubbyを停止し、VPNのDNSに任せる

という切り替えが最も安定する。

Stubby停止:(再起動で自動オン)
これをしてGUI設定のネットワーク設定のDNSの自動スイッチををオンに戻す

sudo systemctl stop stubby

再開:

sudo systemctl start stubby

⚠ IPv6を有効にしない理由(Debian + Stubbyの実情)

近年のDebian環境では、

  • StubbyでIPv6を有効にすると
  • 環境によって通信できなくなるケースが実際にあった

体感的には、Debian側の Stubby 実装に起因する不具合の可能性も高い。

原因は一つではない。

  • Stubbyの実装状況
  • systemd / NetworkManager との絡み
  • 上流DNSやISP側IPv6の挙動差

結果として、

  • DNSが引けない
  • 一部サイトだけ繋がらない
  • 突然通信が止まる

といった不具合が起きやすい。

そのため本記事では、

IPv6は使わず、IPv4に限定する

という判断をしている。

安定性と再現性を優先した、実務的な選択だ。


まとめ

DNS暗号化は、
もはや「特別な人の設定」ではない。

  • ブラウザ
  • スマートフォン
  • Windows

それらがすでにやっていることを、
Linuxでも同じ水準まで引き上げるだけ。

ただし、

  • VPN使用時は無理に併用しない
  • IPv6は現状では使わない

この割り切りが、
壊れない運用 には重要になる。

過剰な防御はしない。
だが、丸裸にもならない。

DNSを静かに守る。

それだけで、
日常用途としては十分な場面は多い。