セキュリティ : Cisco AnyConnect セキュア モビリティ クライアント

DNS クエリに関する動作の違いおよび異なる OS でのドメイン名解決

2015 年 11 月 26 日 - 機械翻訳について
その他のバージョン: PDFpdf | ライター翻訳版 (2013 年 6 月 28 日) | 英語版 (2015 年 8 月 22 日) | フィードバック

概要

このドキュメントでは、異なるオペレーティング システム(OS)がドメイン ネーム システム(DNS)のクエリを処理する方法と、Cisco AnyConnect およびスプリット トンネリングまたは完全トンネリングによるドメイン ネーム解決への影響について説明します。

著者:Cisco TAC エンジニア。

スプリット DNS 対標準 DNS

split-include トンネリングを使用するとき、DNS について次の 3 つのオプションがあります。

  1. スプリット DNS - Cisco 適応型セキュリティ アプライアンス(ASA)に設定されているドメイン ネームに一致する DNS クエリは、トンネルを通って(ASA で定義されている DNS サーバなどに)到達し、一致しないクエリは到達しません。

  2. Tunnel-all-DNS - ASA に定義された DNS サーバへの DNS トラフィックのみが許可されます。 この設定は、グループ ポリシーで設定されます。

  3. 標準 DNS - すべての DNS クエリは ASA によって定義された DNS サーバを介して送信されます。 否定応答の場合、DNS クエリは、物理アダプタに設定されている DNS サーバにも送られる可能性があります。

split-tunnel-all-dns コマンドは、ASA バージョン 8.2(5) で初めて実装されました。 このバージョンよりも前は、スプリット DNS または標準 DNS のみが可能でした。

いずれの場合も、トンネルを介して送信されるように定義された DNS クエリは ASA で定義された DNS サーバに送信されます。 ASA 上で DNS サーバが定義されない場合、トンネルについての DNS 設定はブランクです。 定義されたスプリット DNS がない場合、すべての DNS クエリは ASA により定義された DNS サーバに送信されます。 ただし、このドキュメントで説明されている動作は、オペレーティング システム(OS)によって異なる場合があります。

クライアントの名前解決をテストするときに NSLookup を使用しないでください。 代わりに、ブラウザを利用するか、ping コマンドを使用してください。 これは NSLookup が OS の DNS リゾルバに依存しないためです。 AnyConnect は、特定のインターフェイスを介した DNS 要求を強制しませんが、スプリット DNS の設定によっては、これを許可したり拒否したりします。 DNS リゾルバに対し、要求について任意の受け入れ可能な DNS サーバの試行を強制するには、スプリット DNS のテストをドメイン名解決についてネイティブ DNS レゾルバに依存するアプリケーション(NLSLookup、Dig、および DNS 解決をアプリケーション自身で処理する類似のアプリケーションなどを除く、すべてのアプリケーション)でのみ実行することが重要です。

真のスプリット DNS とベスト エフォートのスプリット DNS

AnyConnect リリース 2.4 は、スプリット DNS フォールバック(ベスト エフォートのスプリット DNS)をサポートしますが、これはレガシー IPSec クライアントに見られる真のスプリット DNS ではありません。 要求がスプリット DNS ドメインと一致した場合、AnyConnect は要求が ASA にトンネリングされることを許可します。 サーバがホスト名を解決できない場合、DNS リゾルバは処理を続行し、物理インターフェイスにマッピングされた DNS サーバに同じクエリを送信します。

一方、要求がどのスプリット DNS ドメインとも一致しない場合、AnyConnect は要求を ASA にトンネリングさせません。 その代わりに、AnyConnect は DNS 応答を作成することで、DNS リゾルバがフォールバックして、物理インターフェイスにマッピングされた DNS サーバにクエリを送信します。 この機能がスプリット DNS ではなく、スプリット トンネリング用の DNS フォールバックと呼ばれるのはこのためです。 AnyConnect は、スプリット DNS ドメインに対する要求のみがトンネリングされることを保証するだけではなく、ホスト名解決に対するクライアント OS の DNS リゾルバの動作も使用します。

こうすると、非公開ドメイン名が漏えいする可能性があるため、セキュリティ上の問題となります。 たとえば、ネイティブ DNS クライアントが公開 DNS サーバに対して非公開ドメイン名を求めるクエリを送信する可能性があります(特に、VPN DNS 名前サーバが DNS クエリを解決できなかった場合)。

Cisco バグ ID CSCtn14578(現行バージョン 3.0(4235) の時点では Microsoft Windows でのみ解決されています)を参照してください。 解決策では真のスプリット DNS を実施しています。 これは、VPN DNS サーバに一致して、許可された設定済みドメイン名に限りクエリを出します。 その他のすべてのクエリは、物理アダプタ上で構成されたものなど、他の DNS サーバでのみ許可されます。

Tunnel All と Tunnel All DNS

スプリット トンネリングが無効にされた場合(tunnel all 設定)、DNS トラフィックはトンネルでのみ許可されます。 tunnel all DNS 設定(グループ ポリシーで設定)では、ある種のスプリット トンネリング同様、トンネル経由ですべての DNS ルックアップが送信され、DNS トラフィックは厳密にトンネルでのみ許可されます。

これはすべてのプラットフォームで一貫していますが、Microsoft Windows の場合は 1 つ、注意点があります。 tunnel all または tunnel all DNS が設定された場合、AnyConnect は、セキュア ゲートウェイ上で設定された DNS サーバへの DNS トラフィックのみ許可します(VPN アダプタに適用)。 これは、先に述べた真のスプリット DNS ソリューションと一緒に実装されたセキュリティの機能強化です。

これが問題となる場合(たとえば、DNS の更新/登録要求を、VPN DNS サーバ以外のサーバに送信する必要がある場合など)は、次の手順を実行します。

  1. 現在の設定が tunnel all の場合、split-exclude tunneling を有効にします。 すべてのシングル ホスト、スプリット除外ネットワーク(リンクローカル アドレスなど)の使用を受け入れます。

  2. tunnel all DNS がグループ ポリシーで設定されていないことを確認します。

AnyConnect バージョン 3.0(4235) で解決された DNS の性能問題

この Microsoft Windows で発生する問題は、以下の条件で最もよく見られます。

  • ホーム ルータ設定によって、DNS および DHCP サーバに同じ IP アドレスが割り当てられる(AnyConnect により、DHCP サーバへの必要なルートが作成されます)。

  • 大量の DNS ドメインがグループ ポリシーにある。

  • Tunnel-all 設定が使用される。

  • 名前解決は修飾されていないホスト名によって実行されます。これは、問い合わせされたホスト名に関係するものが試行されるまで、リゾルバは選択可能なすべての DNS サーバについて大量の DNS サフィクスを試す必要があることを意味します。

この問題は、AnyConnect がブロックする物理アダプタ経由で DNS クエリを送信しようとするネイティブ DNS クライアントが原因です(tunnel-all 設定を指定した場合)。 これは名前解決の遅延につながり、特に大量の DNS サフィックスがヘッドエンドにより送信される場合は重大な問題になる可能性があります。 DNS クライアントは肯定応答を受信するまで、すべてのクエリと選択可能な DNS サーバを調べる必要があるからです。

この問題は AnyConnect バージョン 3.0(4235) で解決されています。 詳細については、前述の真のスプリット DNS ソリューションの概要とともに、Cisco バグ ID CSCtq02141 および CSCtn14578 を参照してください。

ただし、アップグレードを実行できない場合は、次のような回避策が可能です。

  • IP アドレスの split-exclude tunneling を有効にします。これにより、ローカル DNS 要求が物理アダプタ経由で送信されることが許可されます。 何らかのデバイスがリンクローカル サブネット 169.254.0.0/16 のいずれかのアドレスに対して VPN 経由でトラフィックを送信することはほとんどないため、このサブネットのアドレスを使用できます。 split-exclude tunneling を有効にした後、クライアント プロファイルまたはクライアント自身のローカル LAN アドレスを有効にし、tunnel all DNS を無効にしてください。

    ASA では、次の設定を変更してください。

    access-list acl_linklocal_169.254.1.1 standard permit host 169.254.1.1
    group-policy gp_access-14 attributes
    split-tunnel-policy excludespecified
    split-tunnel-network-list value acl_linklocal_169.254.1.1
    split-tunnel-all-dns disable
    exit

    クライアント プロファイルで、次の行を追加してください。

    <LocalLanAccess UserControllable="true">true</LocalLanAccess>

    また、AnyConnect クライアント GUI でこれをクライアントごとに有効にすることもできます。 [AnyConnect Preference] メニューに移動し、[Enable local LAN access] チェック ボックスをオンにします。

  • 名前解決には、修飾されていないホスト名でなく、完全修飾ドメイン名(FQDN)を使用します。

  • 物理インターフェイスの DNS サーバに別の IP アドレスを使用します。

異なる OS でのスプリット トンネリングの DNS

AnyConnect のスプリット トンネリング(スプリット DNS なし)と併用する場合、OS によって DNS 検索を処理する方法が異なります。 このセクションではこれらの相違点について説明します。

Microsoft Windows

Microsoft Windows システムでは、DNS 設定をインターフェイスごとに行います。 スプリット トンネリングが使用される場合、DNS クエリは VPN トンネル アダプタで失敗した後に、物理アダプタの DNS サーバへフォール バックできます。 スプリット DNS を使用しないスプリット トンネリングが定義された場合、外部 DNS サーバにフォールバックするため、内部および外部の両方の DNS 解決が機能します。

Macintosh

Macintosh システムでは、DNS 設定はグローバルです。 スプリット トンネリングが使用されているものの、スプリット DNS は使用されない場合、DNS クエリはトンネル外部の DNS サーバに到達できません。 外部ではなく、内部でのみ解決できます。

これは Cisco バグ ID CSCtf20226 および CSCtz86314 に記載されています。 いずれの場合も、次の回避策によって問題が解決されるはずです。

  • グループ ポリシーで外部 DNS サーバの IP アドレスを指定し、内部 DNS クエリに FQDN を使用します。

  • 外部名がトンネルを介して解決可能である場合は、[Advanced] > [Split Tunneling] を選択して、グループ ポリシーで設定されている DNS 名を削除し、スプリット DNS を無効にします。 これには、内部 DNS クエリに FQDN を使用する必要があります。

スプリット DNS の問題は、AnyConnect バージョン 3.1 で解決されています。 ただし、次の条件のいずれかが満たされていることを確認する必要があります。

  • スプリット DNS を両方の IP プロトコルに対して有効にする必要があります(Cisco ASA バージョン 9.0 以降が必要)。

  • スプリット DNS を 1 つの IP プロトコルに対して有効にする必要があります。 Cisco ASA バージョン 9.0 以降を実行している場合、他の IP プロトコルにクライアント バイパス プロトコルを使用します。 たとえば、アドレス プールがなく、クライアント バイパス プロトコルがグループ ポリシーで有効になっていることを確認します。 または、9.0 よりも前のバージョンの ASA を実行している場合は、他の IP プロトコルにアドレス プールが設定されていないことを確認します。 これは、もう一方の IP プロトコルが IPv6 であることを意味します。

: AnyConnect は、Macintosh OS X の resolv.conf ファイルを変更しませんが、 OS X 固有の DNS の設定を変更します。 Macintosh OS X は互換性のために resolv.conffile を最新状態で維持します。 scutil----dns コマンドを使用することにより、Macintosh OS X の DNS 設定を表示できます。

iPhone

iPhone は Macintosh システムとはまったく異なるものであり、Microsoft Windows にも似ていません。 スプリット トンネリングが定義されているものの、スプリット DNS は定義されていない場合、DNS クエリは、定義されているグローバル DNS サーバ経由で送信されます。 たとえば、スプリット DNS ドメイン エントリは内部解決のために必須です。 この動作は Cisco バグ ID CSCtq09624 に記載されており、Apple iOS AnyConnect クライアントのバージョン 2.5.4038 で修正されています。

: iPhone の DNS クエリは .local ドメインを無視することに注意してください。 この問題については、Cisco バグ ID CSCts89292 に記載されています。 この問題はオペレーティング システムの機能が原因であることが、Apple のエンジニアによって確認されています。 これは設計による動作であり、変更されることがないことが Apple により確認されています。

関連情報


関連するシスコ サポート コミュニティ ディスカッション

シスコ サポート コミュニティは、どなたでも投稿や回答ができる情報交換スペースです。


Document ID: 116016