TorとVPNを組み合わせたときDNSはどこへ行くのか
Tor Browser、OS、トンネルクライアントはそれぞれ別の名前を別の経路で解決できます。漏えいと呼ぶ前に、そのやり取りをたどってください。
プライバシー保護ツールが二つ動いていて、一つのページが読み込まれず、リゾルバのテストはブラウザの外の何かが名前を受け取ったと告げている。それを漏えい報告にする前に、どのやり取りから来たのかを名指ししよう。TorとVPNの構成には少なくとも所有者の異なる三つの名前照会があり、起きる順番にたどることが、どれが誤動作しているかを見る最短の道だ。
漏えいと呼ぶ前に、各やり取りを名指しする
最初のやり取りはVPNのエンドポイント自体を解決し、何らかの保護が存在する前に起きる。二つ目はTor Browserのための宛先を解決し、ブラウザは名前をローカルで解決せずプロキシに渡せる。三つ目はマシン上の他のすべてを覆い、更新確認、メールクライアント、OS自身のサービス照会を含む。他の二つが関与せずに起こりうるのは最初のものだけだ。
それぞれが別の経路をたどりうるが、ブラウザでの一度のテストは自分の要求しか観察しない。一つの結果を三つすべての状態とみなすことが、混乱の大半の始まりだ。
何かを変える前に、どの名前がどの層に属するかを書き留めよう。組織内の私有名、公開の宛先、トンネルのエンドポイント自体は同じ要件を持たず、それらを一つのカテゴリとして扱う方針は何かを壊す。
ブートストラップの照会はトンネルの前に起きる
ホスト名で設定されたクライアントはトンネルを開くためにその名前を解決しなければならず、その時点で照会を運ぶトンネルは存在しない。現在のネットワークでOSが提供するリゾルバが応答し、それはキャプティブポータル、ホテルのリゾルバ、公開リゾルバのいずれかでありうる。まだトンネルがないのだから、これはトンネル内の漏えいではない。
ブラウザのセキュアDNS設定を変えても、それがブラウザの外で動きどのページを開くよりも先に起動するサービスに属するため、この照会には触れない。エンドポイントの名前が解決できなければ、失敗は構成が説明するすべてより一段階早く起きるのだから、トンネル内のどんな方針も助けにならない。
エンドポイントにリテラルアドレスを使うことが、プロバイダが対応していれば依存を増やすのではなく減らす唯一の場所だ。アドレスをローテーションするプロバイダを追う能力も失うので、この交換は現実的であり、発見するのではなく決めるべきだ。
ブラウザとマシンの残りは異なる
TorのSOCKSインターフェースは宛先ホスト名をプロキシへ渡すことをサポートしており、つまり解決は遠端が行い、ローカルマシンは決して問い合わせない。プロキシに対応した汎用アプリは、名前をまずローカルで解決してから得たアドレスに接続することがあり、ユーザーがプロキシ経由だと思っていた宛先にローカル照会を発生させる。したがって二つのアプリは一つのプロキシ設定を共有しながら別の場所で漏えいしうる。共有のプロキシアドレスからは、どちらの振る舞いが使われているか分からない。
ブラウザはセキュアDNSが有効なとき、独自のプロバイダを選んでシステムのリゾルバを完全に迂回できるため、もう一層追加する。一方トンネルクライアントは、マシン全体のためにリゾルバをトンネル経由で押し込むことがある。この二つの設定は両方とも正しくありながら、異なるプログラムに異なる振る舞いを説明しうる。
テストページ一枚から推測するのではなく、要求を出したプログラムを確認しよう。トンネル内で運ばれる照会とTorにまったく届かなかった照会の区別こそ、一つのリゾルバアドレスでは示せない区別だ。
各プログラムを確認し、それから意図と比べる
観察は、システムが何を使うか、ブラウザが何を使う設定か、SOCKS接続が名前を運ぶのかアドレスを運ぶのか、と別々に行う。最後のものが遠隔解決とローカル解決の違いであり、SOCKS拡張仕様はホスト名が先に解決されるのではなくどう渡されるかを説明している。
resolvectl status | grep -E "Current DNS Server|DNS Servers"
ss -tnp '( dport = :9050 )'
dig +short dev.internal.example
getent hosts vpn-endpoint.example.net
次に、観察したものを意図したものと比べる。選んだリゾルバがトンネル経由で解決する公開名は、フォールバック時に公開リゾルバへ渡される私有名と同じ発見ではなく、通常対応が必要なのは後者だけだ。前者は設計どおりに動く構成であり、報告書の中で見慣れないとしてもそうだ。
受け入れる例外を、保護できないブートストラップの照会も含めて記録しよう。書かれた例外は設計上の判断だが、同じ例外が後から見つかると欠陥に見える。見つけた人はそう扱うだろうし、あなたはなぜそうではないかを会議で説明することになる。