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

VPN、DNS クエリ、およびオペレーティング システム/プラットフォーム バリアントの FAQ

2013 年 6 月 28 日 - ライター翻訳版
その他のバージョン: PDFpdf | 機械翻訳版 (2014 年 2 月 6 日) | 英語版 (2014 年 1 月 28 日) | フィードバック

概要

このドキュメントでは、異なる Operations Support Systems(OSS)が DNS クエリを処理する方法の違いと、AnyConnect によるドメイン名解決に及ぼす影響について、質問とそれに対する回答を示します。

Q. 異なる OSS プラットフォームが DNS クエリを処理する方法はどのように違いますか。AnyConnect とフル トンネリングまたはスプリット トンネリングによるドメイン名の解決にどのように影響しますか。

A.

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

  1. スプリット DNS:適応型セキュリティ アプライアンス(ASA)で設定されたドメイン名と一致する DNS クエリがトンネルを通って、ASA で定義された DNS サーバなどに到達し、他のクエリは到達しません。
  2. Tunnel-all-DNS:ASA で定義された DNS サーバ向けの DNS トラフィックのみが許可されます。 この設定は、グループ ポリシーで設定されます。
  3. 標準 DNS:すべての DNS クエリが、ASA によって定義された DNS サーバ経由で送信され、否定応答の場合は物理アダプタ上で設定された DNS サーバにも送信されます。

すべてのケースで、トンネルを通過するように定義された DNS クエリは、ASA 上で定義されたすべての DNS サーバに到達します。 特に、ASA 上で DNS サーバが定義されない場合、トンネルについての DNS 設定はブランクです。 つまり理論的に言えば、スプリット DNS を定義しない場合、すべての DNS クエリは ASA によって定義された DNS サーバに送信されることも意味します。 ただし実際には、このドキュメントに記載する動作は、オペレーティング システムによって異なる可能性があります。

クライアントの名前解決をテストする場合は、NSLookup の使用を避けてください。代わりにブラウザを利用するか、ping を使用してください。 この理由は、NSLookup がオペレーティング システム(OS)DNS リゾルバに依存しないことによって、AnyConnect が特定のインターフェイス経由で DNS 要求を強制しないためです。 これはスプリット DNS 設定に応じて、DNS 要求の許可または拒否のみを行います。 その要求について受け入れ可能な DNS サーバを試すよう DNS リゾルバに強制するためには、ドメイン名解決についてネイティブ DNS リゾルバに依存するアプリケーションを使用したスプリット DNS テストのみが実行されることが重要です。 たとえば、DNS 解決を自分自身で処理する、NSLookup、Dig、または同様のアプリケーションを除くすべてのアプリケーションです。

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

AnyConnect リリース 2.4 は、スプリット DNS フォールバック(ベスト エフォートのスプリット DNS)をサポートし、これはレガシーの IPSec クライアントに見られる真のスプリット DNS ではありません。 要求がスプリット DNS ドメインと一致した場合、AnyConnect は要求が ASA にトンネリングされることを許可します。 サーバがホスト名を解決できない場合、DNS リゾルバは処理を続行し、物理インターフェイスにマッピングされた DNS サーバに同じクエリを送信します。 一方、要求がどのスプリット DNS ドメインとも一致しない場合、AnyConnect は要求を ASA にトンネリングさせません。 その代わりに、AnyConnect は DNS 応答を作成することで、DNS リゾルバがフォールバックして、物理インターフェイスにマッピングされた DNS サーバにクエリを送信します。 この機能がスプリット DNS ではなく、スプリット トンネリング用の DNS フォールバックと呼ばれるのはこのためです。 つまり、スプリット DNS ドメインをターゲットとした要求のみがトンネリングされることを AnyConnect が保証するだけでなく、AnyConnect はホスト名解決のために、クライアント オペレーティング システムの DNS リゾルバの動作にも依存していると言えます。

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

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

「tunnel all」と「tunnel all DNS」

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

これはすべてのプラットフォームで一貫していますが、Windows の場合は次の注意点があります。

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

このことが特定のシナリオで問題になることがわかった場合(たとえば、DNS 更新または登録要求を VPN DNS サーバ以外のサーバに送信する必要があるなど)、2 つの手順から成る回避策は次のとおりです。

  1. 現在の設定が、tunnel-all: enable split-exclude tunneling の場合、1 つの偽のホストのスプリット除外ネットワークは機能します(リンクローカル アドレスなど)。
  2. tunnel all DNS がグループ ポリシーで設定されていないことを確認します。

AnyConnect 3.0.4325 で解決された DNS の性能問題

Windows に固有のこの問題は、以下の条件で最もよく見られます。

  • ホーム ルータ設定: DNS サーバと DHCP サーバに同じ IP アドレスを割り当てた場合(AnyConnect は DHCP サーバへの必要なルートを作成します)。
  • 大量の DNS ドメインがグループ ポリシーにある。
  • Tunnel-all 設定。
  • 修飾されていないホスト名によって実行される名前解決。つまり、問い合わせされたホスト名に関係するものが試行されるまで、リゾルバは選択可能なすべての DNS サーバについて大量の DNS サフィクスを試す必要があることを暗示します。

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

この問題は、先に述べた真のスプリット DNS ソリューションと一緒に(バグ CSCtq02141 および CSCtn14578 と組み合わせて)バージョン 3.0.4325 で解決済みです。

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

  1. 1 つの偽の IP アドレスに対して split-exclude トンネリングを有効にすることで、ローカル DNS 要求が物理アダプタを通過します。 任意のデバイスがリンクローカル サブネット 169.254.0.0/16 のいずれか 1 つに対して VPN 経由でトラフィックを送信することはほとんどないため、これらの IP アドレスからのアドレスを使用できます。 スプリット除外を可能にした後、クライアント プロファイルまたはクライアント自身のローカル 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] オプションにチェックマークを入れます。

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

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

Q. それぞれのオペレーティング システムは DNS をどのように処理しますか。

A.

AnyConnect のスプリット トンネリングと一緒に使用するとき(スプリット DNS を使用しない)、DNS 検索を処理する方法は、オペレーティング システムの種類によって異なります。

Windows

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

MAC

MAC では、DNS 設定はグローバルです。 したがって、スプリット トンネリングが使用されているが、スプリット DNS は使用されない場合、DNS クエリはトンネル外部の DNS サーバに到達できません。 外部ではなく、内部でのみ解決できます。 このことは、バグ CSCtf20226 および CSCtz86314 に記載されています。 いずれの場合も、次の回避策によって問題が解決されるはずです。

- Specify an external DNS server IP address under the group-policy and use FQDN for 
internal DNS queries
- If external names are resolvable via the tunnel, disable split DNS by removing the
DNS names configured in the group policy, under Advanced > Split Tunneling.
This requires using FQDN for internal DNS queries.
 
- The split-DNS case has been resolved in AnyConnect 3.1, with these caveats:
 
* split-DNS must be enabled for both IP protocols (requires ASA v9.0 or later);
OR
* split-DNS must be enabled for one IP protocol
   and
   (if ASA has v9.0 or later: client bypass protocol for the other IP protocol,
    for example, no address pool and Client Bypass Protocol enabled in the group policy
   or
   if ASA is earlier than v9.0: no address pool configured for the other IP protocol;
   this implies that this other IP protocol is IPv6.)

: AnyConnect は MAC OSX の resolv.conf ファイルを直接変更せず、OSX 固有の DNS 設定を変更します。 OSX には、OSX の DNS 設定を参照する resolv.confscutil --dns コマンドがあります。

iPhone

iPhone は MAC と正反対で、Windows と同じではありません。 スプリット トンネリングが定義されたがスプリット DNS が定義されない場合、DNS クエリは、定義されたグローバル DNS サーバに到達します。 たとえば、スプリット DNS ドメイン エントリは内部解決のために必須です。 この動作はバグ CSCtq09624 に記載されており、iOS AnyConnect クライアントの最新の 2.5.4038 バージョンで修正されています。

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

関連情報

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

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


Document ID: 116016