本文檔介紹客戶端作業系統如何使用Cisco IOS®安全客戶端處理DNS查詢以及對域名解析的影響。
本文件沒有特定需求。
本文件所述內容不限於特定軟體和硬體版本。實驗室示例使用Windows、macOS、Linux和Apple iOS上的安全防火牆ASA/FTD組策略和Cisco安全客戶端。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
本檔案將說明使用者端作業系統如何處理DNS查詢,以及在使用具有分割或全通道的Cisco Secure Client(前身為Cisco AnyConnect)時對網域名稱解析的影響。所討論的VPN前端包括Cisco安全防火牆ASA和FTD(以前稱為ASA);除非另有說明,否則組策略設定(例如split-dns、dns-server和split-tunnel-all-dns)將同時應用於這兩種設定。
如果一節明確引用了舊客戶端版本,則應用安全客戶端4.2及更高版本(包括當前的安全客戶端5.x版本)中描述的行為。Cisco AnyConnect 4.x已停產;遷移到Cisco Secure Client以獲得支援的DNS和隧道功能。
DNS解析行為取決於三個因素:
運行split-include tunneling命令時,以下是組策略中可用的三個DNS選項:
| 模式 |
說明 |
|---|---|
| 拆分DNS | 與頭端上配置的域名(split-dns)匹配的DNS查詢通過隧道傳送到VPN DNS伺服器(dns-server)。 所有其他查詢使用客戶端作業系統解析器和物理介面卡DNS伺服器。 |
| Tunnel-all DNS | 僅允許到頭端定義的DNS伺服器的DNS流量。在組策略中配置split-tunnel-all-dns enable。 |
| 標準DNS | 所有DNS查詢首先傳送到由頭端定義的VPN DNS伺服器。在否定(NXDOMAIN或無響應)響應時,解析程式還可以嘗試使用物理介面卡上的DNS伺服器。 |
附註:split-tunnel-all-dns命令最初是在ASA 8.2(5)版中實現的。 在此版本之前,只有拆分DNS或標準DNS可用。在所有情況下,定義為通過隧道移動的DNS查詢都會傳遞到頭端定義的任何DNS伺服器。如果在頭端上未定義DNS伺服器,則通道的DNS設定為空。
如果未定義拆分DNS,則所有DNS查詢都將傳送到由頭端定義的DNS伺服器(受本文檔稍後介紹的作業系統特定行為約束)。 但是,本文檔中描述的行為可能會因作業系統(OS)而異。
附註:在客戶端上測試名稱解析時,請避免使用NSLookup或dig。請改用Web瀏覽器或執行ping指令。NSLookup和dig並不像大多數應用程式那樣使用作業系統DNS解析程式末節。安全使用者端不會強制每個DNS要求通過特定介面;它允許或拒絕基於拆分DNS和隧道全DNS策略的請求。
要觀察正確的故障切換行為,請僅對依賴本機OS DNS解析程式的應用程式(瀏覽器、ping和大多數業務應用程式)進行測試。 執行自身DNS解析的工具(NSLookup、dig和某些自定義應用)即使客戶端工作正常,也可能顯示誤導性故障。
AnyConnect版本2.4引入了分割DNS回退(盡力分割DNS),這不是真正的分割DNS,也可在傳統IPsec客戶端中找到。
盡力而為(後援)行為:
這就是為分割隧道的傳統功能稱為DNS回退的原因,它不是真正的分割DNS。安全客戶端確保只有匹配的拆分DNS域查詢才能進入隧道,但仍依賴作業系統解析程式行為進行最終解析。
安全問題:當VPN DNS伺服器返回NXDOMAIN或解析失敗時,私有域名會洩漏到公共DNS伺服器;解析程式在物理介面卡上重試。
真正的拆分DNS:思科錯誤ID CSCtn14578
在Microsoft Windows的AnyConnect 3.0(4235)中解決,並保留在Secure Client 4.2+中):
附註:只有註冊思科使用者才能存取內部思科錯誤工具及詳細錯誤資訊。
停用分割通道(tunnel-all組態)時,DNS流量會嚴格透過通道通過。
tunnel-all-DNS配置(組策略中為split-tunnel-all-dns enable)通過隧道傳送所有DNS查詢,同時還配置了某種形式的拆分隧道,並且嚴格允許通過隧道介面的DNS流量。
在Microsoft Windows上有一個警告時,這一點在平台之間是一致的,當配置了tunnel-all或tunnel-all-DNS時,安全客戶端會嚴格允許DNS流量流向在安全網關(應用於VPN介面卡)上配置的DNS伺服器。 此安全增強功能是通過真正的拆分DNS實現的。如果存在問題(例如,DNS更新/註冊必須到達非VPN DNS伺服器),請完成以下步驟:
同時啟用分割通道和tunnel-all-DNS時,DNS在核心級別被擷取,如果它沒有輸出正確的VPN介面,則會被阻止。在加密DNS不可用的網路中,安全客戶端Umbrella模組(以前稱為AnyConnect Roaming Security)可能會受到影響。這是因為模組可以透過LAN介面嘗試使用標準DNS,而tunnel-all-DNS要求透過VPN使用DNS。
預設情況下,Umbrella模組使用加密DNS(UDP埠443),通常不會被tunnel-all-DNS阻止。此問題主要出現在加密不可用且使用普通DNS時。
建議:如果將tunnel-all-DNS與Umbrella模組一起使用,請將Cisco Umbrella解析器地址新增到拆分包含清單中。或參閱為使用Umbrella模組的安全客戶端啟用隧道所有DNS文檔(文檔ID:224809。)
在以下情況下,此Microsoft Windows問題最為普遍:
這可能會導致嚴重的名稱解析延遲,尤其是當頭端推送許多DNS字尾時。解析程式必須遍歷字尾和伺服器,直到收到正響應。
此問題在AnyConnect 3.0(4235)及更高版本的Secure Client版本中已解決。如需詳細資訊,請參閱Cisco錯誤ID CSCtq02141和Cisco錯誤ID CSCtn14578。
附註:只有註冊思科使用者才能存取內部思科錯誤工具。
為IP地址啟用拆分 — 排除隧道,以便本地DNS可以使用物理介面卡。來自本地鏈路子網169.254.0.0/16的地址通常用作通向這些地址的流量,因此不太可能通過VPN。
啟用分割排除隧道後,在客戶端配置檔案或客戶端上啟用本地LAN訪問,並禁用tunnel-all-DNS。以下是ASA/FTD配置示例:
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
客戶端配置檔案XML:
true
您也可以在安全客戶端GUI中啟用此功能:使用VPN→啟用允許本地(LAN)存取的偏好設定
對於安全客戶端,不同的客戶端作業系統使用拆分隧道(無拆分DNS)以不同方式處理DNS;本節介紹這些差異。
在Windows上,DNS設定是按網路介面設定的。使用分割隧道,DNS查詢可以在VPN隧道介面卡上失敗後回退到物理介面卡DNS伺服器。如果使用拆分隧道而不使用拆分DNS,則內部和外部解析都可以工作,因為解析程式可以回退到外部DNS伺服器。修復思科錯誤ID CSCuf07885後,版本4.2中的Secure Client for Windows發生了重大更改。此行為在Secure Client 5.x中保持不變。
附註:只有註冊思科使用者才能存取內部思科錯誤工具。
預安全客戶端4.2(AnyConnect 4.1及更低版本):
安全客戶端4.2及更高版本:
安全客戶端驅動程式不會干擾本地DNS解析程式。解析度取決於網路介面卡的順序;安全客戶端是連線VPN時的首選介面卡。
DNS查詢首先通過隧道傳送;如果未解決,解析程式可以嘗試使用公共介面。在4.2之前的版本中,拆分包含訪問清單必須包括覆蓋隧道DNS伺服器的子網。從安全客戶端4.2開始,隧道DNS伺服器的主機路由將自動新增為拆分包含網路(安全路由),因此拆分包含的ACL不再需要顯式隧道DNS伺服器子網。
解析程式行為與拆分包含相同,先通過隧道,然後是公共介面回退。拆分 — 排除訪問清單不得包含涵蓋隧道DNS伺服器的子網。 從安全客戶端4.2開始,隧道DNS伺服器的自動主機路由可防止常見的拆分 — 排除配置錯誤。
Windows上的拆分DNS需要拆分 — 包括隧道(指定了拆分隧道策略隧道。) 它不支援對拆分DNS配置使用僅拆分排除的隧道策略。
預安全客戶端4.2:
安全客戶端4.2及更高版本(在Windows上真正拆分DNS):
安全客戶端5.x管理文檔為拆分 — 排除配置新增了拆分DNS。有關頭端和策略要求,請參閱安全客戶端5.x管理員指南 — 為分割排除隧道配置分割DNS。拆分DNS處於活動狀態後,作業系統級實施規則仍然適用。
使用DNS over HTTPS(DoH)或DNS over TLS(DoT)的應用程式或作業系統功能可以繞過安全客戶端過濾器的Windows存根解析程式路徑。如果分離DNS對於特定應用似乎失敗,但在瀏覽器中起作用,請驗證這些應用是否使用加密或自定義DNS。標準拆分DNS測試應使用作業系統解析程式(瀏覽器、ping),而不是NSLookup/dig。
在macOS上,DNS設定是全域性的(不是每個介面)。 如果使用拆分隧道而不使用拆分DNS,則DNS查詢通常無法按預期到達隧道外部的DNS伺服器,您只能解析內部名稱,而不能通過公共路徑解析外部名稱。此錯誤記錄在Cisco錯誤ID CSCtf2026和Cisco錯誤ID CSCtz86314中。
因應措施:
從AnyConnect 3.1開始,MacOS上支援拆分DNS,但受以下條件限制:
附註:安全客戶端不主要通過macOS上的/etc/resolv.conf管理名稱解析;它配置作業系統級別的DNS設定。macOS可以保持resolv.conf更新以確保相容性。運行scutil —dns以檢視有效的DNS配置。
連線安全客戶端時,系統DNS配置中僅保留隧道DNS伺服器;請求僅繼續執行隧道DNS伺服器。
安全客戶端不會干擾本機解析程式。通道DNS伺服器優先於公共解析程式,因此第一次查詢嘗試會通過通道。由於DNS在macOS上是全域性的,因此查詢並不總是可靠地使用隧道之外的公共DNS(思科錯誤ID:CSCtf20226)。
從安全客戶端4.2開始,隧道DNS伺服器的主機路由將自動新增為安全路由。
在以下情況下應用真正的拆分DNS(類似於Windows):
真正的拆分DNS意味著匹配的拆分DNS域只能通過隧道進行解析,並且不會洩漏給外部解析程式。
如果只為一個協定啟用了拆分DNS,且為另一個協定分配了客戶端地址,則只會對拆分隧道實施DNS回退:安全客戶端允許通過隧道匹配查詢(可以拒絕其他查詢以強制故障轉移),但無法完全防止通過公共介面卡以明文形式傳送的拆分DNS域查詢的洩漏。
平台支援(安全客戶端管理指南):Windows和macOS支援完全剝離DNS。Linux的支援有限(請參見Linux部分)。
連線安全客戶端時,在系統DNS配置中僅維護隧道DNS伺服器。
安全客戶端不會干擾本機解析程式。首選隧道DNS伺服器;初次解析嘗試會通過隧道。
如果啟用了拆分DNS,則在Linux上僅對拆分隧道實施DNS回退:
安全客戶端管理指南指出Linux上的有限拆分DNS:只有通過隧道傳輸的DNS請求完全受分離DNS策略的約束;隧道外部的某些查詢無法符合拆分DNS策略。
安全客戶端支援tunnel-from-any-source custom屬性,因此具有任何源地址的資料包可以在VM例項或Docker容器內以拆分 — 包含或拆分 — 排除模式進行路由。有關配置詳細資訊,請參閱《Secure Client 5.x管理員指南》。
iOS行為與macOS不同,並且與Windows不同。如果配置了分割隧道而沒有分割DNS,則DNS查詢通常使用為裝置定義的全域性DNS伺服器,而不是與Windows相同的回退模式。
實際影響:在使用分割隧道而不使用分割DNS時,通常需要使用分割DNS域條目來進行可靠的內部名稱解析。
歷史修復:思科錯誤ID CSCtq09624 — (適用於iOS 2.5.4038及更高版本的AnyConnect。) 當前的iOS安全客戶端遵守相同的一般要求;使用拆分包括/拆分和排除時,為內部域配置拆分DNS,而不依賴Windows風格的回退。
附註:iOS DNS查詢忽略.local域(思科錯誤ID CSCts89292。)
蘋果視之為設計行為;不希望iOS上通過標準拆分DNS進行.local解析。在iOS上,當拆分隧道與某些拆分DNS清單配置結合使用時,安全客戶端拆分DNS行為也與其他平台不同。請參閱《安全客戶端管理員指南》部分針對iOS特定的策略組合(split-dns none、default-domain等),使用拆分隧道拆分DNS解析行為。
動態拆分隧道可在連線時或按需解析FQDN,並調整到指定域的流量的路由和過濾器。這包括在沒有靜態IP清單的隧道中或從隧道中排除。
| 功能 | 說明 |
|---|---|
| 動態拆分排除 | 在應用程式解析這些名稱時,將在運行時從隧道中排除域(example.com)。 |
| 動態拆分包括 | 域以動態方式包括在隧道中。 |
| 增強的動態拆分 | 包含優先規則的組合include/exclude域清單(例如exclude example.com,但包括mail.example.com)。 |
動態分割隧道使用DNS解析來推動路由更改。它通過頭端上的安全客戶端自定義屬性(例如dynamic-split-exclude-domains、dynamic-split-include-domains)配置。
動態拆分隧道適用於tunnel-all和split-exclude(動態排除)或split-include(動態包含)策略。它不會取代拆分DNS策略,但它補充了它:拆分DNS控制哪些查詢通過隧道傳輸;動態分割隧道根據解析的名稱控制哪些IP流量通過隧道傳輸。請參閱配置詳細資訊:配置動態拆分隧道和《Secure Client 5.x管理員指南》。
分割排除故障轉移(安全客戶端5.x):當公共路徑沒有到拆分 — 排除目標的連線時,可選自定義屬性SplitExcludeFailoverEnabled通過VPN路由流量。有關自定義屬性設定,請參閱《管理員指南》。
下表僅適用於仍在運行過時客戶端的舊部署:
| 版本 | 相關性 |
|---|---|
| AnyConnect 2.4 | 引入了盡力而為的分解DNS後援 |
| AnyConnect 2.5(iOS) | 思科錯誤 ID:CSCtq09624 iOS DNS對齊 |
| AnyConnect 3.0(4235) | 在Windows上真正拆分DNS;DNS效能修復 |
| AnyConnect 3.1(macOS) | 具有IPv4/IPv6條件的拆分DNS支援 |
| AnyConnect 4.2 | 思科漏洞ID:基於CSCuf07885介面卡的實施;自動隧道DNS主機路由 |
在所有受支援的平台上部署Secure Client 5.x,以獲得當前修復程式和功能。
附註:只有註冊思科使用者才能存取內部思科錯誤工具。
| 修訂版 | 日期 | 備註 |
|---|---|---|
| 4.0 | 2026年7月28日 | 全面實質性更新:安全客戶端品牌、平台更新、動態拆分隧道、Umbrella/tunnel-all-DNS、鍵入和配置修復、已更正的相關連結 |
| 3.0 | 2024年5月23日 | 重新認證(Cisco.com) |
| 1.0 | 2014年6月12日 | 初始版本 |
| 修訂 | 發佈日期 | 意見 |
|---|---|---|
4.0 |
10-Aug-2026
|
已更新簡介、拼寫、語法、固定URL、插入水平線以分隔各部分的可讀性和固定CCW錯誤。 |
3.0 |
23-May-2024
|
重新認證 |
1.0 |
12-Jun-2014
|
初始版本 |