スプリット DNS 対標準 DNS
split-includeトンネリングを使用する場合、ドメインネームシステム(DNS)には次の3つのオプションがあります。
- スプリットDNS – ドメイン名に一致するDNSクエリは、Cisco適応型セキュリティアプライアンス(ASA)で設定されます。トンネルを通過して(ASAで定義されているDNSサーバなどに)、他のサーバは通過しません。
- Tunnel-all-DNS:ASAによって定義されたDNSサーバへのDNSトラフィックのみが許可されます。この設定は、グループ ポリシーで設定されます。
- 標準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)をサポートします。これは真のスプリットDNSではなく、レガシーIPsecクライアントに存在します。要求がスプリット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は、セキュアゲートウェイ(VPNアダプタに適用される)に設定されたDNSサーバへのDNSトラフィックのみ許可します。これは、先に述べた真のスプリット DNS ソリューションと一緒に実装されたセキュリティの機能強化です。
これが問題となる場合(たとえば、DNS の更新/登録要求を、VPN DNS サーバ以外のサーバに送信する必要がある場合など)は、次の手順を実行します。
- 現在の設定がTunnel-allの場合、split-exclude tunneling を有効にします(tunnel-allはデフォルト)。すべてのシングル ホスト、スプリット除外ネットワーク(リンクローカル アドレスなど)の使用を受け入れます。
- グループポリシーで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 Bug ID CSCtq02141およびCisco Bug ID CSCtn14578を参照してください。
注:シスコの内部ツールおよび情報にアクセスできるのは、シスコの登録ユーザーのみです。
アップグレードを実装できない場合は、考えられる回避策を次に示します。
- IP アドレスの split-exclude tunneling を有効にします。これにより、ローカル DNS 要求が物理アダプタ経由で送信されることが許可されます。任意のデバイスがリンクローカル サブネット 169.254.0.0/16 のいずれか 1 つに対して VPN 経由でトラフィックを送信することはほとんどないため、これらの IP アドレスからのアドレスを使用できます。split-exclude tunnelingdを有効にした後、クライアントプロファイルまたはクライアント自身のローカルLANアクセスを有効にし、Tunnel-all dDNSを無効にします。
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 アドレスを使用します。
異なるCisco OSでのスプリットトンネリングを使用したDNS
AnyConnectでスプリットトンネリング(スプリットDNSなし)とともに使用する場合、Cisco OSによって処理されるDNS検索は異なります。このセクションではこれらの相違点について説明します。
Microsoft Windows
Microsoft Windows システムでは、DNS 設定をインターフェイスごとに行います。スプリット トンネリングが使用される場合、DNS クエリは VPN トンネル アダプタで失敗した後に、物理アダプタの DNS サーバへフォール バックできます。スプリット DNS を使用しないスプリット トンネリングが定義された場合、外部 DNS サーバにフォールバックするため、内部および外部の両方の DNS 解決が機能します。
AnyConnect for Windowsのリリース4.2では、Cisco Bug ID CSCuf07885の修正後、この問題を処理するDNSメカニズムの動作が変更されています。
注:シスコの内部ツールおよび情報にアクセスできるのは、シスコの登録ユーザーのみです。
Windows 7以降
Tunnel-allの設定(tunnel-all DNSが有効な場合のスプリットトンネリング)
AnyConnect 4.2より前:
グループポリシー(トンネルDNSサーバ)で設定されたDNSサーバへのDNS要求のみが許可されます。AnyConnectドライバは、他のすべての要求に対して「名前が見つかりません(no such name)」という応答を返します。その結果、DNS解決はトンネルDNSサーバでのみ実行できます。
AnyConnect 4.2以降
DNSサーバに対するDNS要求は、VPNアダプタから発信され、トンネル経由で送信される限り許可されます。他のすべての要求には「no such name」と応答され、DNS解決はVPNトンネル経由でのみ実行できます。
Cisco Bug ID CSCuf07885の修正より前は、ACはターゲットのDNSサーバを制限していましたが、このバグの修正により、DNS要求を開始できるネットワークアダプタが制限されるようになりました。
注:シスコの内部ツールおよび情報にアクセスできるのは、シスコの登録ユーザーのみです。
split-include設定(tunnel-all DNSが無効で、split-DNSが設定されていない)
AnyConnectドライバは、ネイティブDNSリゾルバに干渉しません。したがって、DNS解決はネットワークアダプタの順序に基づいて実行され、VPNの接続時には常にAnyConnectが優先アダプタになります。さらに、DNSクエリが最初にトンネル経由で送信され、解決されない場合、リゾルバはパブリックインターフェイス経由でそれを解決しようとします。split-includeアクセスリストには、トンネルDNSサーバをカバーするサブネットが含まれています。AnyConnect 4.2から開始すると、トンネルDNSサーバのホストルートは、AnyConnectクライアントによってsplit-includeネットワーク(セキュアルート)として自動的に追加されるため、split-includeアクセスリストでトンネルDNSサーバサブネットを明示的に追加する必要はなくなりました。
スプリット除外の設定(tunnel-all DNSが無効、スプリットDNSなし)
AnyConnectドライバは、ネイティブDNSリゾルバに干渉しません。したがって、DNS解決はネットワークアダプタの順序に基づいて実行され、VPNの接続時には常にAnyConnectが優先アダプタになります。さらに、DNSクエリが最初にトンネル経由で送信され、解決されない場合、リゾルバはパブリックインターフェイス経由でそれを解決しようとします。split-excludeアクセスリストには、トンネルDNSサーバをカバーするサブネットを含めることはできません。AnyConnect 4.2から開始すると、トンネルDNSサーバのホストルートは、AnyConnectクライアントによってsplit-includeネットワーク(セキュアルート)として自動的に追加されるため、split-excludeアクセスリストでの誤設定を防ぐことができます。
スプリットDNS(tunnel-all DNSは無効、split-includeは設定済み)
AnyConnect 4.2より前
split-dnsドメインと一致するDNS要求は、DNSサーバのトンネリングを許可されますが、他のDNSサーバは許可されません。このような内部DNSクエリがトンネルから漏出するのを防ぐため、クエリが他のDNSサーバに送信されると、AnyConnectドライバは「名前が見つかりません(no such name)」と応答します。したがって、split-dnsドメインは、トンネルDNSサーバを介してのみ解決できます。
split-dnsドメインと一致しないDNS要求は、他のDNSサーバに許可されますが、DNSサーバのトンネリングは許可されません。この場合でも、非split-dnsドメインに対するクエリがトンネル経由で試行されると、AnyConnectドライバは「名前が見つかりません(no such name)」と応答します。したがって、非split-dnsドメインは、トンネル外のパブリックDNSサーバを介してのみ解決できます。
AnyConnect 4.2以降
split-dnsドメインと一致するDNS要求は、VPNアダプタから発信されている限り、すべてのDNSサーバに許可されます。クエリがパブリックインターフェイスから発信されている場合、AnyConnectドライバは「名前が見つかりません(no such name)」と応答し、リゾルバは常にトンネルを名前解決に使用します。したがって、split-dnsドメインはトンネル経由でのみ解決できます。
split-dnsドメインと一致しないDNS要求は、物理アダプタから発信されている限り、すべてのDNSサーバに許可されます。クエリがVPNアダプタから発信されている場合、AnyConnectは「名前が見つかりません(no such name)」と応答し、リゾルバは常にパブリックインターフェイスを介して名前解決を試みます。したがって、非split-dnsドメインはパブリックインターフェイスを介してのみ解決できます。
Mac OSx
Macintosh システムでは、DNS 設定はグローバルです。スプリット トンネリングが使用されているものの、スプリット DNS は使用されない場合、DNS クエリはトンネル外部の DNS サーバに到達できません。外部ではなく、内部でのみ解決できます。
この問題は、Cisco Bug ID CSCtf20226およびCisco Bug ID 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.conf(デフォルト)ファイルが最新の状態に保たれます。Macintosh OS XのDNS設定を表示するには、scutil —dnsコマンドを使用します。
Tunnel-allの設定(tunnel-all DNSが有効な場合のスプリットトンネリング)
AnyConnectが接続されている場合、システムDNS設定にはトンネルDNSサーバのみが保持されるため、DNS要求はトンネルDNSサーバにのみ送信できます。
split-include設定(tunnel-all DNSが無効で、split-DNSが設定されていない)
AnyConnectはネイティブDNSリゾルバに干渉しません。トンネルDNSサーバは、パブリックDNSサーバよりも優先される優先リゾルバとして設定されているため、名前解決のための最初のDNS要求がトンネル経由で送信されます。Mac OS XのDNS設定はグローバルであるため、Cisco Bug ID CSCtf20226で説明されているように、DNSクエリがトンネルの外部でパブリックDNSサーバを使用することはできません。AnyConnect 4.2から開始すると、トンネルDNSサーバのホストルートは、AnyConnectクライアントによってsplit-includeネットワーク(セキュアルート)として自動的に追加されるため、split-includeアクセスリストでトンネルDNSサーバサブネットを明示的に追加する必要はなくなりました。
スプリット除外の設定(tunnel-all DNSが無効、スプリットDNSなし)
AnyConnectはネイティブDNSリゾルバに干渉しません。トンネルDNSサーバは優先リゾルバとして設定され、パブリックDNSサーバよりも優先されます。このため、名前解決のための最初のDNS要求がトンネル経由で送信されます。Mac OS XのDNS設定はグローバルであるため、Cisco Bug ID CSCtf20226で説明されているように、DNSクエリがトンネルの外部でパブリックDNSサーバを使用することはできません。AnyConnect 4.2から開始すると、トンネルDNSサーバのホストルートは、AnyConnectクライアントによってsplit-includeネットワーク(セキュアルート)として自動的に追加されるため、split-includeアクセスリストでトンネルDNSサーバサブネットを明示的に追加する必要はなくなりました。
スプリットDNS(tunnel-all DNSは無効、split-includeは設定済み)
スプリットDNSが両方のIPプロトコル(IPv4とIPv6)に対して有効であるか、一方のプロトコルに対してのみ有効で、他方のプロトコルに対して設定されたアドレスプールがない場合:
Windows と同様に、True split-DNS が適用されます。真のsplit-DNSとは、split-DNSドメインに一致する要求がトンネル経由でのみ解決され、トンネル外部のDNSサーバにはリークされないことを意味します。
スプリットDNSが1つのプロトコルだけに対して有効になっており、クライアントアドレスが他のプロトコルに割り当てられている場合、スプリットトンネリング用のDNSフォールバックだけが適用されます。つまり、トンネル経由でsplit-DNSドメインに一致するDNS要求のみを許可し(他の要求は、パブリックDNSサーバへのフェールオーバーを強制するために「拒否」応答でACによって応答されます)、クリアテキストで送信されないsplit-DNSドメインに一致する要求を、パブリックアダプタ経由で適用することはできません。
Linux
Tunnel-allの設定(tunnel-all DNSが有効な場合のスプリットトンネリング)
AnyConnectが接続されている場合、システムDNS設定にはトンネルDNSサーバのみが保持されるため、DNS要求はトンネルDNSサーバにのみ送信できます。
split-include設定(tunnel-all DNSが無効で、split-DNSが設定されていない)
AnyConnectはネイティブDNSリゾルバに干渉しません。トンネルDNSサーバは、パブリックDNSサーバよりも優先される優先リゾルバとして設定されているため、名前解決のための最初のDNS要求がトンネル経由で送信されます。
スプリット除外の設定(tunnel-all DNSが無効、スプリットDNSなし)
AnyConnectはネイティブDNSリゾルバに干渉しません。トンネルDNSサーバは、パブリックDNSサーバよりも優先される優先リゾルバとして設定されているため、名前解決のための最初のDNS要求がトンネル経由で送信されます。
スプリットDNS(tunnel-all DNSは無効、split-includeは設定済み)
split-DNSがイネーブルの場合、split-tunneling用のDNSフォールバックだけが適用されます。つまり、トンネル経由でsplit-DNSドメインと一致するDNS要求のみを許可し(他の要求は、パブリックDNSサーバへのフェールオーバーを強制するために「拒否」応答でACによって応答されます)、クリアテキストで送信されないsplit-DNSドメインと一致する要求を、パブリックアダプタ経由で強制することはできません。
iPhone
iPhone は Macintosh システムとはまったく異なるものであり、Microsoft Windows にも似ていません。スプリット トンネリングが定義されているものの、スプリット DNS は定義されていない場合、DNS クエリは、定義されているグローバル DNS サーバ経由で送信されます。たとえば、スプリット DNS ドメイン エントリは内部解決のために必須です。この動作は Cisco バグ ID CSCtq09624 に記載されており、Apple iOS AnyConnect クライアントのバージョン 2.5.4038 で修正されています。
注:iPhoneのDNSクエリは.local domainsを無視することに注意してください。 この問題については、Cisco バグ ID CSCts89292 に記載されています。この問題はオペレーティング システムの機能が原因であることが、Apple のエンジニアによって確認されています。これは設計による動作であり、変更されることがないことが Apple により確認されています。
関連するバグ情報
注:シスコの内部ツールおよび情報にアクセスできるのは、シスコの登録ユーザーのみです。
関連情報