OpenVPN 経由の分割 DNS:各 OS でルーティングドメインが果たすべき役割
検索サフィックス、ルーティングドメイン、IP ルートはそれぞれ別物です。プラットフォームごとにポリシーを設定し、どのサーバーが応答したかを確かめます。
分割 DNS のあらゆる要求は、会社の名前は会社の DNS へ送り、それ以外はそのまま動かし続けるという同じ一文から始まります。その一文を設定に変えるには、OS ごとに三つの問いに答える必要があり、答えはそれぞれ別の仕組みを使います。Linux ノート PC で動くプロファイルが Windows で失敗するのは、トンネルとは無関係な理由からです。その差はたいてい ルートと取り違えられたリゾルバー設定です。
まずポリシーに名前を付け、次にそれを表現するプラットフォームのプリミティブを選びます。
混同しやすい三つの設定
検索サフィックスは短い名前を展開し、files と入力するとリゾルバーがサフィックスを順に試して files.corp.example になります。ルーティングドメインは、名前空間の内側の問い合わせにどのリゾルバーが答えるかを選びます。IP ルートは選んだリゾルバーに到達できるようにするだけです。この三つは別の層にあり、一方を他方に置き換えると、正しそうに見えて何も解決しない設定になります。
混同には代償があり、検索サフィックスを足すと、別の場所に属する名前も含めて、あらゆる短い名前が仕事用リゾルバーへ送られます。ルーティングドメインを選べば、無関係な問い合わせはローカルのリゾルバーに残したまま、*.corp.example はトンネル経由で送れます。
Linux:経路専用ドメインであり、検索サフィックスではない
systemd-resolved では、チルダを前に付けたドメインは経路専用ドメインであり、その名前空間への問い合わせは検索サフィックスにもならずに、リンクされたリゾルバーへ送られます。resolvectl domain tun0 '~corp.example' がそれを設定し、resolvectl dns tun0 10.8.0.1 がサーバーを指定します。どちらの設定もインターフェースに属するため、インターフェースと一緒に消えます。チルダこそが人々が省いてしまう部分で、それがないと短い名前が仕事用リゾルバー経由で解決され始めます。
同じドメインをグローバルな検索サフィックスとしても入れないでください。二つの設定は重複ではなく、一方は経路を決め、もう一方は入力したものを書き換えます。
Windows にはサフィックスではなく名前空間ポリシーが必要です
Windows は分割 DNS のポリシーをアダプターの DNS サフィックスではなく Name Resolution Policy Table に保持します。規則は名前空間を特定のサーバーに対応付けます:Add-DnsClientNrptRule -Namespace .corp.example -NameServers 10.8.0.1。サフィックスだけを設定すると短い名前の見え方が変わるだけで、問い合わせを別のサーバーへ向けるわけではありません。
先行する接続の規則がトンネルより長く残ることがあるため、接続後は Get-DnsClientNrptPolicy で有効なポリシーを確認してください。トンネルが落ちたら規則を名前で削除し、後片付けが正しい項目を狙うよう表示名を一定に保ちます。
プラットフォームごとに一つのリゾルバー所有者を保つ
デスクトップマネージャー、OpenVPN の up スクリプト、ローカルのリゾルバーデーモンは、どれも同じ設定を書き込もうとします。それらが食い違うと最後に書いたものが勝ち、結果は解体の順序に左右されます。リゾルバーの状態を所有するコンポーネントを一つ選ぶ、他には書き込ませずに報告させ、規則を重複させずに再接続に耐えることを試してください。残った状態こそが次の接続を別の振る舞いにするため、切断も試してください。
自前の暗号化リゾルバーを同梱するアプリケーションは、OS のポリシーを完全に無視します。それはアプリケーションの性質であり、トンネルの欠陥ではありません。
設定ファイルではなく結果を検証する
トンネルを通すべき名前と通すべきでない名前を各プラットフォームで一つずつ解決し、どのサーバーが答えたかを確認します。resolvectl query host.corp.example と Resolve-DnsName host.corp.example はどちらも応答したサーバーを報告します。再接続後にこれを繰り返します。次に、到達できないサーバーを指す正しいポリシーはポリシーがない場合と同じように失敗するため、プロファイルが押し出すアドレスでトンネルのリゾルバーに到達できることを確認してください。
プロファイルのメモに、どのサフィックスが経路を決め、どのサーバーがそれに答え、それ以外がどうなるかという意図した動作を記録します。次に支えるプラットフォームは、設定ファイルよりもその一文を必要とします。