スプリット 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 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) で解決されています。詳細については、Cisco Bug ID CSCtq02141およびCisco Bug ID CSCtn14578と、前述の真のスプリットDNSソリューションの概要を参照してください。
注:シスコの内部ツールおよび情報にアクセスできるのは、シスコの登録ユーザーのみです。
アップグレードを実装できない場合は、次の回避策が考えられます。
- 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が有効な場合のsplit-tunneling)
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クエリがトンネルから漏出するのを防ぐために、AnyConnectドライバは、クエリが他のDNSサーバに送信されると「名前が見つかりません(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が有効な場合のsplit-tunneling)
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は設定済み)
split-DNSが両方のIPプロトコル(IPv4とIPv6)に対して有効であるか、一方のプロトコルに対してのみ有効で、他方のプロトコルに対してアドレスプールが設定されていない場合:
Windows と同様に、True split-DNS が適用されます。真のsplit-DNSは、split-DNSドメインと一致する要求がトンネル経由でのみ解決され、トンネル外部のDNSサーバにはリークされないことを意味します。
split-DNSが1つのプロトコルだけに対して有効になっており、クライアントアドレスが他のプロトコルに割り当てられている場合、split-tunnelingのDNSフォールバックだけが適用されます。つまり、トンネル経由でsplit-DNSドメインに一致するDNS要求のみが許可され(他の要求は、パブリックDNSサーバへのフェールオーバーを強制するためにACによって「拒否」応答で応答されます)、クリアテキストで送信されないsplit-DNSドメインに一致する要求は、パブリックアダプタ経由で強制できません。
Linux
Tunnel-allの設定(tunnel-all DNSが有効な場合のsplit-tunneling)
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要求のみがACによって許可され(他の要求は、パブリック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 により確認されています。
関連するバグ情報
注:シスコの内部ツールおよび情報にアクセスできるのは、シスコの登録ユーザーのみです。
関連情報