分割与标准DNS
使用分割包括隧道时,对于域名系统(DNS),有以下三个选项:
- 拆分DNS — 在思科自适应安全设备(ASA)上配置与域名匹配的DNS查询。它们通过隧道(例如,到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不依赖于操作系统DNS解析器。AnyConnect不会通过特定接口强制DNS请求,但根据拆分DNS配置允许或拒绝该请求。为了强制DNS解析器尝试请求的可接受DNS服务器,切分DNS测试必须仅对依赖本地DNS解析器进行域名解析的应用程序(例如,除NSLookup、Dig和自身处理DNS解析的类似应用程序之外的所有应用程序)执行。
True与尽力而为拆分DNS
AnyConnect版本2.4支持拆分DNS回退(尽力而为拆分DNS),这不是真正的拆分DNS,可在传统IPsec客户端中找到。如果请求与拆分DNS域匹配,AnyConnect允许将请求通过隧道传输到ASA。如果服务器无法解析主机名,则DNS解析程序将继续并向映射到物理接口的DNS服务器发送相同的查询。
另一方面,如果请求与任何拆分DNS域都不匹配,AnyConnect不会将其隧道连接至ASA。相反,它会构建DNS响应,以便DNS解析器回退并将查询发送到映射到物理接口的DNS服务器。因此,此功能不称为拆分DNS,而是用于拆分隧道的DNS回退。AnyConnect不仅确保只有目标拆分DNS域的请求通过隧道进入,还依赖客户端操作系统DNS解析器行为进行主机名解析。
由于可能存在私有域名泄露,这引起了安全担忧。例如,当VPN DNS名称服务器无法解析DNS查询时,本地DNS客户端可以向公共DNS服务器发送专用域名查询。
请参阅Cisco Bug ID CSCtn14578,目前仅在Microsoft Windows上解决,截止到3.0(4235)版。该解决方案实现了真正的拆分DNS,它严格查询与VPN DNS服务器匹配并允许其使用的已配置域名。所有其他查询仅允许到其他DNS服务器,例如物理适配器上配置的那些服务器。
注意:只有思科注册用户才能访问思科内部工具和信息。
Tunnel-all和Tunnel-all DNS
当禁用分割隧道(Tunnel-all配置)时,DNS流量严格通过隧道允许。Tunnel-all DNS配置(在组策略中配置)通过隧道发送所有DNS查找,以及某些类型的拆分隧道,并且严格允许DNS流量通过隧道。
在Microsoft Windows上,这一点在平台之间是一致的,但有一个警告:当配置任何Tunnel-all或Tunnel-all DNS时,AnyConnect会严格允许DNS流量流向在安全网关(应用于VPN适配器)上配置的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后缀,直到尝试尝试与查询主机名相关的后缀。此问题是由尝试通过物理适配器发送DNS查询的本地DNS客户端引起的,AnyConnect会阻止物理适配器(给定Tunnel-all配置)。这会导致严重的名称解析延迟,特别是在头端推送大量DNS后缀时。DNS客户端必须遍历所有查询和可用的DNS服务器,直到收到肯定响应。
此问题在AnyConnect版本3.0(4235)中已解决。有关详细信息,请参阅Cisco Bug IDs CSCtq02141和Cisco Bug ID CSCtn14578,以及前面提到的真正拆分DNS解决方案的简介。
注意:只有思科注册用户才能访问思科内部工具和信息。
如果无法实施升级,则以下是可能的解决方法:
- 为IP地址启用切分 — 排除隧道,允许本地DNS请求流经物理适配器。您可以使用本地链路子网169.254.0.0/16中的地址,因为任何设备都不太可能通过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地址。
在不同思科操作系统上使用分割隧道的DNS
当与AnyConnect的拆分隧道(无拆分DNS)配合使用时,不同的思科操作系统以不同方式处理DNS搜索。本节介绍这些差异。
Microsoft Windows
在Microsoft Windows系统上,DNS设置是每个接口的。如果使用分割隧道,则DNS查询可能会在VPN隧道适配器上失败后回退到物理适配器DNS服务器。如果定义了不带拆分DNS的分割隧道,则内部和外部DNS解析都会起作用,因为它会回退到外部DNS服务器。
在AnyConnect for Windows上,在修复了Cisco Bug ID CSCuf07885之后,版本4.2中,处理此问题的DNS机制中的行为发生了变化。
注意:只有思科注册用户才能访问思科内部工具和信息。
Windows 7+
全隧道配置(以及启用了全隧道DNS的分割隧道)
AnyConnect 4.2之前的版本:
仅允许对组策略下配置的DNS服务器(隧道DNS服务器)发出DNS请求。AnyConnect驱动程序用“no such name”响应来响应所有其他请求。因此,DNS解析只能通过隧道DNS服务器执行。
AnyConnect 4.2 +
允许发往任何DNS服务器的DNS请求,只要这些请求源自VPN适配器并通过隧道发送。所有其它请求均不以此名称响应,且DNS解析只能通过VPN隧道执行。
在Cisco Bug ID CSCuf07885修复之前,AC限制目标DNS服务器,但是通过此Bug的修复程序,它现在限制哪些网络适配器可以启动DNS请求。
注意:只有思科注册用户才能访问思科内部工具和信息。
分割包含配置(禁用所有DNS隧道且无分割DNS)
AnyConnect驱动程序不会干扰本地DNS解析程序。因此,DNS解析是根据网络适配器的顺序执行的,其中AnyConnect在VPN连接时始终是首选适配器。此外,DNS查询首先通过隧道发送,如果无法解析,解析程序会尝试通过公共接口解析它。split-include access-list包括涵盖隧道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驱动程序将以“no such name”进行响应。因此,拆分DNS域只能通过隧道DNS服务器进行解析。
与拆分dns域不匹配的DNS请求允许发送到其他DNS服务器,但不允许通过隧道传输DNS服务器。即使在这种情况下,如果通过隧道尝试查询非拆分DNS域,AnyConnect驱动程序也会以“no such name”进行响应。因此,只能通过隧道外部的公共DNS服务器解析非拆分DNS域。
AnyConnect 4.2 +
允许与拆分DNS域匹配的DNS请求发送到任何DNS服务器,只要这些请求来自VPN适配器。如果查询由公共接口发出,则AnyConnect驱动程序会以“no such name”做出响应,以强制解析程序始终使用隧道进行名称解析。因此,拆分DNS域只能通过隧道解析。
与分离DNS域不匹配的DNS请求只要来自物理适配器,就允许发送到任何DNS服务器。如果查询由VPN适配器发起,AnyConnect将以“no such name”作为响应,强制解析器始终尝试通过公共接口解析名称。因此,只能通过公共接口解析非拆分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。这需要使用FQDN进行内部DNS查询。
拆分DNS案例在AnyConnect版本3.1中已解决。但是,您必须确保满足以下条件之一:
- 必须为两个IP协议启用拆分DNS,这需要Cisco ASA 9.0版或更高版本。
- 必须为一个IP协议启用拆分DNS。如果运行Cisco ASA 9.0版或更高版本,则对其他IP协议使用客户端旁路协议。例如,确保没有地址池,并且已在组策略中启用Client Bypass Protocol。或者,如果您运行的ASA版本早于版本9.0,请确保没有为其他IP协议配置地址池。这意味着另一个IP协议是IPv6。
注意:AnyConnect不会更改Macintosh OS X上的resolv.conf文件,而是更改特定于OS X的DNS设置。Macintosh OS X出于兼容性原因保持resolv.conf文件为最新版本。使用scutil —dns命令查看Macintosh OS X上的DNS设置。
全隧道配置(以及启用了全隧道DNS的分割隧道)
连接AnyConnect时,系统DNS配置中仅维护隧道DNS服务器,因此DNS请求只能发送到隧道DNS服务器。
分割包含配置(禁用所有DNS隧道且无分割DNS)
AnyConnect不会干扰本地DNS解析程序。隧道DNS服务器被配置为首选解析器,优先于公共DNS服务器,因此可以确保用于名称解析的初始DNS请求通过隧道发送。由于DNS设置在Mac OS X上是全局设置,因此DNS查询不可能使用隧道外部的公共DNS服务器,如Cisco Bug ID CSCtf2026中所述。从AnyConnect 4.2开始,隧道DNS服务器的主机路由由AnyConnect客户端自动添加为拆分包含网络(安全路由),因此,拆分包含访问列表不再需要明确添加隧道DNS服务器子网。
分割排除配置(禁用所有DNS隧道且无分割DNS)
AnyConnect不会干扰本地DNS解析程序。隧道DNS服务器被配置为首选解析器,它们优先于公共DNS服务器,因此可确保用于名称解析的初始DNS请求通过隧道发送。由于DNS设置在Mac OS X上是全局设置,因此DNS查询不可能使用隧道外部的公共DNS服务器,如Cisco Bug ID CSCtf2026中所述。从AnyConnect 4.2开始,隧道DNS服务器的主机路由由AnyConnect客户端自动添加为拆分包含网络(安全路由),因此,拆分包含访问列表不再需要明确添加隧道DNS服务器子网。
Split-DNS(禁用所有DNS隧道,已配置split-include)
如果为两个IP协议(IPv4和IPv6)都启用了拆分DNS,或者它只为一个协议启用,并且没有为另一个协议配置地址池:
系统将真正执行分离 DNS(与 Windows 相似)。真正的拆分DNS意味着与拆分DNS域匹配的请求只能通过隧道解析,不会泄漏到隧道外部的DNS服务器。
如果只对一种 IP 协议启用分离 DNS,并且为另一种 IP 协议分配了客户端地址,则只会强制对分离隧道执行 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域匹配的请求。
iPhone
iPhone与Macintosh系统完全相反,与Microsoft Windows不同。如果定义了拆分隧道,但未定义拆分DNS,则DNS查询将通过定义的全局DNS服务器退出。例如,拆分DNS域条目对于内部解析是必需的。此行为记录在Cisco Bug ID CSCtq09624中,并在Apple iOS AnyConnect客户端的2.5.4038版中修复。
注意:请注意,iPhone DNS查询ignore.local域。 Cisco Bug ID CSCts89292中记录了此错误。Apple工程师确认问题是由操作系统的功能引起的。这是设计好的行为,苹果证实,没有改变这一点。
相关Bug信息
注意:只有思科注册用户才能访问思科内部工具和信息。
相关信息