はじめに
このドキュメントでは、AnyConnectとOpenDNS Roaming Clientを連携させるための現在の制限事項と利用可能な回避策について説明します。 シスコのお客様は、AnyConnect VPNクライアントを使用して、企業ネットワークへのセキュアで暗号化された通信を実現しています。同様に、OpenDNS Roamingクライアントは、OpenDNSパブリックサーバを使用してDNSサービスを安全に使用する機能をユーザに提供します。これらのクライアントはいずれも、エンドポイントに豊富なセキュリティ機能を追加するため、相互に連携することが重要です。
前提条件
AnyConnectおよびOpenDNS Roamingクライアントの実務知識。
AnyConnect VPNのASAまたはIOS/IOS-XEヘッドエンド設定(トンネルグループ/グループポリシー)に関する知識。
要件
次の項目に関する知識があることが推奨されます。
- ASAまたはIOS/IOS-XEヘッドエンド
- AnyConnect VPNクライアントとOpenDNS Roamingクライアントを実行しているエンドポイント
使用するコンポーネント
このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づいています。
- リリース9.4を実行しているASAヘッドエンド
- Windows 7
- AnyConnectクライアント4.2.00096
- OpenDNS Roamingクライアント2.0.154
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。対象のネットワークが実稼働中である場合には、どのようなコマンドについても、その潜在的な影響について確実に理解しておく必要があります。
背景説明
OpenDNSは、Cisco AnyConnectチームとのAnyConnectプラグインを開発しており、将来的に提供される予定です。日付は設定されていませんが、この統合により、回避策を取り上げなくても、Roaming ClientはAnyConnectクライアントと連携して動作します。これにより、AnyConnectをRoaming Clientの配信メカニズムとして使用することもできます。
機能
AnyConnect DNS処理
VPNヘッドエンドは、AnyConnectクライアントからのトラフィックを処理するためのいくつかの異なる方法で設定できます。
- フルトンネル設定(tunnel-all):この設定では、エンドポイントからのすべてのトラフィックが強制的にVPNトンネル経由で暗号化されて送信されるため、トラフィックがパブリックインターフェイスアダプタからクリアテキストで送信されることはありません
- Split-tunnel 設定:
a. split-includeトンネリング:特定のサブネットまたはVPNヘッドエンドで定義されたホスト宛てだけのトラフィックが、トンネル経由で送信されます。その他のすべてのトラフィックは、トンネルの外部にクリアテキストで送信されます
b.スプリット除外トンネリング:VPNヘッドエンドで定義された特定のサブネットまたはホスト宛てのみのトラフィックは暗号化から除外され、パブリックインターフェイスをクリアテキストのまま残し、その他のトラフィックはすべて暗号化されてトンネル経由でのみ送信されます
これらの各設定は、エンドポイントのオペレーティングシステムに応じて、AnyConnectクライアントによるDNS解決の処理方法を決定します。AnyConnect for Windowsのリリース4.2では、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トンネル経由でのみ実行できます
CSCuf07885の修正より前は、ACはターゲットDNSサーバを制限しますが、CSCuf07885の修正により、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 OS X
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設定はグローバルであるため、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設定はグローバルであるため、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サーバにはリークされないことを意味します。
split-DNSが1つのプロトコルだけに対して有効になっており、クライアントアドレスが他のプロトコルに割り当てられている場合、「スプリットトンネリング用のDNSフォールバック」だけが適用されます。つまり、トンネル経由でsplit-DNSドメインに一致するDNS要求のみをACが許可し(他の要求は、パブリック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要求のみをACが許可し(他の要求は、パブリックDNSサーバへのフェールオーバーを強制する「拒否」応答でACが応答します)、split-DNSドメインに一致する要求がクリアテキストでパブリックアダプタ経由で送信されないように強制することはできません。
OpenDNSローミングクライアント
Roamingクライアントは、エンドポイント上のDNSサービスを管理するソフトウェアで、OpenDNSパブリックDNSサーバを使用してDNSトラフィックを保護および暗号化します。
クライアントが保護および暗号化された状態であることが理想的です。ただし、クライアントがOpenDNSパブリックリゾルバサーバ(208.67.222.222)とのTLSセッションを確立できない場合、クライアントはUDPポート53で暗号化されていないDNSトラフィックを208.67.222.222に送信しようとします。Roaming Clientは、OpenDNSのパブリックリゾルバのIPアドレス208.67.222.222を排他的に使用します(208.67.220.220、208.67.222.220、208.67.220.222など、その他にもいくつかのアドレスがあります)。ローミングクライアントをインストールすると、ローカルDNSサーバとして127.0.0.1(localhost)が設定され、現在のインターフェイスごとのDNS設定が上書きされます。現在のDNS設定は、Roaming Client設定フォルダ内のローカルresolv.confファイル(Windowsの場合でも)に保存されます。OpenDNSは、AnyConnectアダプタを介して学習されたDNSサーバもバックアップします。たとえば、192.168.92.2がパブリックアダプタ上のDNSサーバである場合、OpenDNSは次の場所にresolv.confを作成します。
C:\ProgramData\OpenDNS\ERC\Resolver1-LocalAreaConnection-resolv.conf
ネームサーバ192.168.92.2
ローミングクライアントは、OpenDNSに設定された各パケットを暗号化しますが、208.67.222.222への暗号化トンネルを開始または使用しません。ローミングクライアントには、IPアドレスをブロックするためにDNS以外の目的でIPSec接続を開くオプションのIPレイヤ強制機能があります。これは、アクティブなAnyConnect接続が存在する場合に自動的に無効になります。また、127.0.0.1:53にバインドして、コンピュータ上でローカルに生成されたクエリーを受信します。エンドポイントが名前を解決する必要がある場合、ローカルクエリは上書きのために127.0.0.1に送信され、Roaming Clientの基礎となるdnscrypt-proxyプロセスは暗号化されたチャネルを介してOpenDNSパブリックサーバに転送します。
DNSが127.0.0.1:53へのフローを許可されていない場合、Roaming Clientは機能できず、次の状態が発生します。 クライアントがパブリックDNSサーバまたは127.0.0.1:53にバインドされたアドレスに到達できない場合、クライアントはフェールオープン状態に移行し、ローカルアダプタのDNS設定を復元します。バックグラウンドで、208.67.222.222にプローブを送信し続け、セキュアな接続が再確立されるとアクティブモードに移行できます。
制限事項
両方のクライアントの高レベルの機能を確認すると、ローミングクライアントがローカルDNS設定を変更し、セキュアチャネル経由でクエリを転送するために127.0.0.1:53にバインドできる必要があることは明らかです。VPNが接続されている場合、AnyConnectがネイティブDNSリゾルバに干渉しない唯一の設定は、split-include(スプリットトンネルが有効)およびsplit-exclude(split-tunnel-all DNSが無効)です。したがって、ローミングクライアントも使用する場合は、現在これらの設定のいずれかを使用することを推奨します。図に示すように、tunnel-all設定が使用されるか、split-tunnel-all DNSが有効になっている場合、Roamingクライアントは保護されていない/暗号化されていない状態のままになります。
回避策
ローミングするクライアントとOpenDNSサーバの間のVPNトンネルを使用した通信を保護することが目的である場合は、VPNヘッドエンドでダミーのsplit-exclude access-listを使用できます。これは、フルトンネル設定に最も近い設定です。このような要件がない場合、アクセスリストにOpenDNSパブリックサーバが含まれていない場合はsplit-includeを使用でき、アクセスリストにOpenDNSパブリックサーバが含まれている場合はsplit-excludeを使用できます。
また、Roaming Clientを使用する場合、split-DNSモードは使用できません。これは、ローカルDNS解決が失われるためです。Split-tunnel-all DNSもディセーブルのままにする必要があります。ただし、部分的にサポートされており、Roaming Clientがフェールオーバー後に暗号化される必要があります。
コンフィギュレーション
トンネルOpenDNSトラフィック
この例では、split-excludeアクセスリストでダミーのIPアドレスを使用します。この設定では、208.67.222.222とのすべての通信はVPNトンネル経由で行われ、ローミングクライアントは暗号化および保護された状態で動作します。
ciscoasa# sh run access-li split
access-list split standard permit host 2.2.2.2
ciscoasa# sh run group-policy
group-policy GroupPolicy-OpenDNS internal
group-policy GroupPolicy-OpenDNS attributes
wins-server none
dns-server value 1.1.1.1
vpn-tunnel-protocol ssl-client
split-tunnel-policy excludespecified
split-tunnel-network-list value split
default-domain value cisco.com
address-pools value acpool
webvpn
anyconnect profiles value AnyConnect type user
ciscoasa#
[an error occurred while processing this directive]
VPNトンネルからのOpenDNSトラフィックの除外
この例では、split-excludeアクセスリストのOpenDNSリゾルバアドレスを使用します。この設定では、208.67.222.222とのすべての通信はVPNトンネルの外部で行われ、ローミングクライアントは暗号化および保護された状態で動作します。
ciscoasa# sh run access-li split
access-list split standard permit host 208.67.222.222
ciscoasa# sh run group-policy
group-policy GroupPolicy-OpenDNS internal
group-policy GroupPolicy-OpenDNS attributes
wins-server none
dns-server value 1.1.1.1
vpn-tunnel-protocol ssl-client
split-tunnel-policy excludespecified
split-tunnel-network-list value split
default-domain value cisco.com
address-pools value acpool
webvpn
anyconnect profiles value AnyConnect type user
ciscoasa#
[an error occurred while processing this directive]
次の例は、内部192.168.1.0/24サブネット(内部サブネット0)に対するsplit-includeの設定を示しています。この設定では、208.67.222.222へのトラフィックがトンネル経由で送信されないため、ローミングクライアントは暗号化および保護された状態で動作します。
ciscoasa# sh run access-li split
access-list split standard permit 192.168.1.0 255.255.255.0
ciscoasa# sh run group-policy
group-policy GroupPolicy-OpenDNS internal
group-policy GroupPolicy-OpenDNS attributes
wins-server none
dns-server value 1.1.1.1
vpn-tunnel-protocol ssl-client
split-tunnel-policy tunnelspecified
split-tunnel-network-list value split
default-domain value cisco.com
address-pools value acpool
webvpn
anyconnect profiles value AnyConnect type user
ciscoasa#
[an error occurred while processing this directive]
Note: Split-tunnel-all-dns must be disabled in all of the scenarios
[an error occurred while processing this directive]
確認
VPNが接続されると、次の図に示すように、Roamingクライアントにはprotectedとencryptedが表示されます。