分割 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 はどちらも応答したサーバーを報告します。再接続後にこれを繰り返します。次に、到達できないサーバーを指す正しいポリシーはポリシーがない場合と同じように失敗するため、プロファイルが押し出すアドレスでトンネルのリゾルバーに到達できることを確認してください。

プロファイルのメモに、どのサフィックスが経路を決め、どのサーバーがそれに答え、それ以外がどうなるかという意図した動作を記録します。次に支えるプラットフォームは、設定ファイルよりもその一文を必要とします。

関連記事