简介
本文档介绍使AnyConnect和OpenDNS漫游客户端协同工作的一些当前限制和可用解决方法。 思科客户依靠AnyConnect VPN客户端与其公司网络进行安全和加密的通信。同样,借助OpenDNS漫游客户端,用户能够借助OpenDNS公共服务器安全地使用DNS服务。这两个客户端在终端上均添加了一组丰富的安全功能,因此它们相互互操作非常重要。
先决条件
AnyConnect和OpenDNS漫游客户端的工作知识。
熟悉AnyConnect VPN的ASA或IOS/IOS-XE前端配置(隧道组/组策略)。
要求
Cisco 建议您了解以下主题:
- ASA或IOS/IOS-XE前端
- 运行AnyConnect VPN客户端和OpenDNS漫游客户端的终端
使用的组件
本文档中的信息基于以下软件和硬件版本:
- 运行版本9.4的ASA头端
- Windows 7
- AnyConnect客户端4.2.00096
- OpenDNS漫游客户端2.0.154
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。
背景信息
OpenDNS正在与Cisco AnyConnect团队一起开发AnyConnect插件,以便将来可用。尽管尚未设置日期,但此集成将允许漫游客户端与AnyConnect客户端配合使用,而不解决任何问题。这也将使AnyConnect成为漫游客户端的交付机制。
功能
AnyConnect DNS处理
VPN头端可通过几种不同的方式进行配置,以处理来自AnyConnect客户端的流量。
- 全隧道配置(全隧道):这会强制来自终端的所有流量通过VPN隧道进行加密,因此流量永远不会以明文形式离开公共接口适配器
- 拆分隧道配置:
a.分离包括隧道:仅发送到VPN头端上定义的特定子网或主机的流量通过隧道发送,所有其他流量以明文形式在隧道外部发送
b.拆分排除隧道:仅发往在VPN头端上定义的特定子网或主机的流量不会被加密,并将公共接口保留为明文,所有其他流量将被加密,并且只通过隧道发送
这些配置中的每一个都决定AnyConnect客户端如何处理DNS解析,具体取决于终端上的操作系统。在4.2版中,在修复CSCuf07885之后,适用于Windows的AnyConnect的DNS处理机制中的行为发生了变化。
Windows 7+
全部使用隧道配置(以及启用了全部使用隧道DNS的分割隧道)
AnyConnect 4.2之前的版本:
仅允许对组策略下配置的DNS服务器(隧道DNS服务器)的DNS请求。AnyConnect驱动程序用“no such name”响应来响应所有其他请求。因此,只能使用隧道DNS服务器执行DNS解析。
AnyConnect 4.2 +
允许发往任何DNS服务器的DNS请求,只要这些请求源自VPN适配器并通过隧道发送。所有其他请求都以“无此名称”响应进行响应,并且DNS解析只能通过VPN隧道执行
在CSCuf07885修复之前,AC会限制目标DNS服务器,但通过CSCuf07885的修复,它会限制哪些网络适配器可以启动DNS请求。
拆分-包含配置(禁用所有DNS隧道,不拆分DNS)
AnyConnect驱动程序不干扰本地DNS解析器。因此,DNS解析根据网络适配器的顺序执行,而AnyConnect始终是连接VPN时的首选适配器。因此,DNS查询将首先通过隧道发送,如果未解析,解析程序将尝试通过公共接口解析它。拆分-包含访问列表必须包含涵盖隧道DNS服务器的子网。从AnyConnect 4.2开始,隧道DNS服务器的主机路由由AnyConnect客户端自动添加为分离包括网络(安全路由),因此,分离包括访问列表不再需要明确添加隧道DNS服务器子网。
分离排除配置(禁用所有DNS隧道,不分离DNS)
AnyConnect驱动程序不干扰本地DNS解析器。因此,DNS解析根据网络适配器的顺序执行,而AnyConnect始终是连接VPN时的首选适配器。因此,DNS查询将首先通过隧道发送,如果未解析,解析程序将尝试通过公共接口解析它。split-exclude access-list不应包含涵盖隧道DNS服务器的子网。从AnyConnect 4.2开始,隧道DNS服务器的主机路由由AnyConnect客户端自动添加为分离包括网络(安全路由),因此这将防止分离排除访问列表中的错误配置。
Split-DNS(禁用所有DNS隧道,已配置split-include)
AnyConnect 4.2之前的版本
允许与分离DNS域匹配的DNS请求通过DNS服务器隧道传输,但不允许传输至其他DNS服务器。为防止此类内部DNS查询泄漏隧道,如果查询发送到其他DNS服务器,AnyConnect驱动程序将以“无此名称”做出响应。因此,只能通过隧道DNS服务器解析拆分DNS域。
允许与分离DNS域不匹配的DNS请求发送到其他DNS服务器,但不允许隧道传输DNS服务器。即使在这种情况下,如果尝试通过隧道查询非拆分DNS域,AnyConnect驱动程序也会以“无此名称”做出响应。因此,只能通过隧道外部的公共DNS服务器解析非拆分DNS域。
AnyConnect 4.2 +
允许与分离DNS域匹配的DNS请求发送到任何DNS服务器,只要这些请求源自VPN适配器。如果查询由公共接口发起,AnyConnect驱动程序将以“no such name”做出响应,以强制解析程序始终使用隧道进行名称解析。因此,拆分DNS域只能通过隧道进行解析。
允许与分离DNS域不匹配的DNS请求发送到任何DNS服务器,只要这些请求来自物理适配器。如果查询由VPN适配器发起,AnyConnect将以“no such name”做出响应,以强制解析器始终尝试通过公共接口解析名称。因此,只能通过公共接口解析非拆分DNS域。
Mac OS X
全部使用隧道配置(以及启用了全部使用隧道DNS的分割隧道)
连接AnyConnect后,系统DNS配置中仅维护隧道DNS服务器,因此DNS请求只能发送到隧道DNS服务器。
拆分-包含配置(禁用所有DNS隧道,不拆分DNS)
AnyConnect不会干扰本地DNS解析器。隧道DNS服务器配置为首选解析器,优先于公共DNS服务器,从而确保通过隧道发送名称解析的初始DNS请求。由于Mac OS X上的DNS设置是全局性的,因此DNS查询不可能使用隧道外的公共DNS服务器(如CSCtf20226所述)。从AnyConnect 4.2开始,隧道DNS服务器的主机路由由AnyConnect客户端自动添加为分离包括网络(安全路由),因此,分离包括访问列表不再需要明确添加隧道DNS服务器子网。
分离排除配置(禁用所有DNS隧道,不分离DNS)
AnyConnect不会干扰本地DNS解析器。隧道DNS服务器配置为首选解析器,优先于公共DNS服务器,从而确保通过隧道发送名称解析的初始DNS请求。由于Mac OS X上的DNS设置是全局性的,因此DNS查询不可能使用隧道外的公共DNS服务器(如CSCtf20226所述)。从AnyConnect 4.2开始,隧道DNS服务器的主机路由由AnyConnect客户端自动添加为分离包括网络(安全路由),因此,分离包括访问列表不再需要明确添加隧道DNS服务器子网。
Split-DNS(禁用所有DNS隧道,已配置split-include)
如果为两个IP协议(IPv4和IPv6)都启用了拆分DNS,或者它只为一个协议启用,并且没有为另一个协议配置地址池:
系统将真正执行分离 DNS(与 Windows 相似)。真正的拆分DNS意味着与拆分DNS域匹配的请求仅通过隧道进行解析,而不会泄漏到隧道外部的DNS服务器。
如果只为一个协议启用了拆分DNS,而为另一个协议分配了客户端地址,则仅强制实施“用于拆分隧道的DNS回退”。这意味着AC仅允许通过隧道发送与分离DNS域匹配的DNS请求(其他请求由AC以“拒绝”响应进行回复,以强制故障切换至公共DNS服务器),但无法强制要求通过公共适配器不以明文形式发送与分离DNS域匹配的请求。
Linux
全部使用隧道配置(以及启用了全部使用隧道DNS的分割隧道)
连接AnyConnect后,系统DNS配置中仅维护隧道DNS服务器,因此DNS请求只能发送到隧道DNS服务器。
拆分-包含配置(禁用所有DNS隧道,不拆分DNS)
AnyConnect不会干扰本地DNS解析器。隧道DNS服务器配置为首选解析器,优先于公共DNS服务器,从而确保通过隧道发送名称解析的初始DNS请求。
分离排除配置(禁用所有DNS隧道,不分离DNS)
AnyConnect不会干扰本地DNS解析器。隧道DNS服务器配置为首选解析器,优先于公共DNS服务器,从而确保通过隧道发送名称解析的初始DNS请求。
Split-DNS(禁用所有DNS隧道,已配置split-include)
如果启用了拆分DNS,则仅强制实施“用于拆分隧道的DNS回退”。这意味着AC仅允许通过隧道发送与分离DNS域匹配的DNS请求(其他请求由AC以“拒绝”响应进行回复,以强制故障切换至公共DNS服务器),但无法强制要求通过公共适配器不以明文形式发送与分离DNS域匹配的请求。
OpenDNS漫游客户端
漫游客户端是一款软件,用于管理终端上的DNS服务,并利用OpenDNS公共DNS服务器来保护和加密DNS流量。
理想情况下,客户端应处于保护和加密状态。但是,如果客户端无法与OpenDNS公共解析器服务器(208.67.222.222)建立TLS会话,它将尝试在UDP端口53上发送未加密的DNS流量到208.67.222.222。漫游客户端只使用OpenDNS的公共解析器IP地址208.67.222.222(还有其他一些地址,如208.67.220.220、208.67.222.220和208.67.220.222)。漫游客户端安装后,会将127.0.0.1 (localhost)设置为本地DNS服务器并覆盖当前的每接口DNS设置。当前DNS设置存储在本地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,然后漫游客户端的基础的dnscrypt-proxy进程会通过加密信道将其转发到OpenDNS公共服务器。
如果不允许将DNS流至127.0.0.1:53,则漫游客户端将无法运行,并将发生以下情况。 如果客户端无法访问公共DNS服务器或绑定到127.0.0.1:53的地址,它将转换到失效开放状态并恢复本地适配器上的DNS设置。在后台,它继续发送探测到208.67.222.222,并且如果重新建立安全连接,它可以转换到主动模式。
限制
查看过两个客户端的高级功能后,显然漫游客户端需要能够更改本地DNS设置并绑定到127.0.0.1:53以通过安全通道转发查询。连接VPN后,AnyConnect不干扰本地DNS解析器的唯一配置是split-include和split-exclude(禁用了全DNS分割隧道)。因此,当前建议在漫游客户端也在使用时使用这些配置之一。如果使用tunnel-all配置或启用split-tunnel-all DNS,漫游客户端将保持未保护/未加密状态,如图所示。
解决方法
如果目的是保护使用VPN隧道的漫游客户端和OpenDNS服务器之间的通信,则可在VPN头端上使用虚拟拆分-排除访问列表。这将是最接近全隧道配置的事情。如果没有此类要求,则可以在访问列表不包括OpenDNS公共服务器的情况下使用拆分-包含,也可以在访问列表包括OpenDNS公共服务器的情况下使用拆分-排除。
此外,使用漫游客户端时,无法使用拆分DNS模式,因为这将导致本地DNS解析丢失。全隧道分割DNS也应保持禁用状态;但是,它部分受支持,并且应在故障转移后允许漫游客户端加密。
配置
隧道OpenDNS流量
本示例在split-exclude access-list中使用虚拟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 access-list中的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子网的拆分-包含配置。使用此配置,漫游客户端仍将在加密和保护状态下运行,因为发送到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后,漫游客户端应显示已保护和加密,如下图所示: