目錄

簡介

必要條件

需求

採用元件

分割與標準DNS

測試DNS — 重要資訊

True與Best Effort Split DNS

Tunnel-all和Tunnel-all DNS

通道全DNS和思科安全使用者端總機模組

AnyConnect 3.0版(4235)中已解決的DNS效能問題

解決方法（如果無法升級）

在不同的使用者端作業系統上使用分割通道的DNS

Microsoft Windows（Windows 10和Windows 11）

全通道組態（和已啟用全通道DNS的分割通道）

Split-include Configuration(Tunnel-all-DNS Disabled， No Split-DNS)

Split-exclude Configuration(Tunnel-all-DNS Disabled， no Split-DNS)

Split-DNS（已禁用Tunnel-all-DNS，已配置Split-include）

使用分割排除隧道的分割DNS（安全客戶端5.x）

Windows上的加密DNS(DoH/DoT)

macOS

全通道組態（和已啟用全通道DNS的分割通道）

Split-include / Split-exclude（禁用Tunnel-all-DNS，無拆分DNS）

Split-DNS（已禁用Tunnel-all-DNS，已配置Split-include）

Linux

全通道組態（和已啟用全通道DNS的分割通道）

Split-include / Split-exclude（禁用Tunnel-all-DNS、不拆分DNS）

Split-DNS（已禁用Tunnel-all-DNS，已配置Split-include）

Linux VM和容器

Apple iOS（iPhone和iPad）

動態分割通道和DNS（安全使用者端4.5+）

歷史客戶端版本（參考）

相關錯誤資訊

相關資訊

修訂記錄

文檔應用於

簡介

本文檔介紹客戶端作業系統如何使用Cisco IOS®安全客戶端處理DNS查詢以及對域名解析的影響。

必要條件

需求

本文件沒有特定需求。

採用元件

本文件所述內容不限於特定軟體和硬體版本。實驗室示例使用Windows、macOS、Linux和Apple iOS上的安全防火牆ASA/FTD組策略和Cisco安全客戶端。

本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除（預設）的組態來啟動。如果您的網路運作中，請確保您瞭解任何指令可能造成的影響。

分割與標準DNS

本檔案將說明使用者端作業系統如何處理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解析行為取決於三個因素：

- VPN DNS策略：在頭端上配置（拆分DNS、全隧道DNS或標準DNS）

- 分割隧道模式：Tunnel-all、split-include或split-exclude

- 客戶端作業系統：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)而異。

測試DNS — 重要資訊

附註：在客戶端上測試名稱解析時，請避免使用NSLookup或dig。請改用Web瀏覽器或執行ping指令。NSLookup和dig並不像大多數應用程式那樣使用作業系統DNS解析程式末節。安全使用者端不會強制每個DNS要求通過特定介面；它允許或拒絕基於拆分DNS和隧道全DNS策略的請求。

要觀察正確的故障切換行為，請僅對依賴本機OS DNS解析程式的應用程式（瀏覽器、ping和大多數業務應用程式）進行測試。 執行自身DNS解析的工具（NSLookup、dig和某些自定義應用）即使客戶端工作正常，也可能顯示誤導性故障。

True與Best Effort Split DNS

AnyConnect版本2.4引入了分割DNS回退（盡力分割DNS），這不是真正的分割DNS，也可在傳統IPsec客戶端中找到。

盡力而為（後援）行為：

- 如果請求與拆分DNS域匹配，安全客戶端允許將請求通過隧道傳輸到頭端。

- 如果VPN DNS伺服器無法解析主機名，OS DNS解析程式將繼續，並且可以將相同的查詢傳送到物理介面上的DNS伺服器。

- 如果請求與任何拆分DNS域不匹配，則安全客戶端不會對其進行隧道傳輸。它可以合成響應，這樣，解析器將回退到物理介面DNS伺服器。

這就是為分割隧道的傳統功能稱為DNS回退的原因，它不是真正的分割DNS。安全客戶端確保只有匹配的拆分DNS域查詢才能進入隧道，但仍依賴作業系統解析程式行為進行最終解析。

安全問題:當VPN DNS伺服器返回NXDOMAIN或解析失敗時，私有域名會洩漏到公共DNS伺服器；解析程式在物理介面卡上重試。

真正的拆分DNS:思科錯誤ID CSCtn14578

在Microsoft Windows的AnyConnect 3.0(4235)中解決，並保留在Secure Client 4.2+中):

- 僅允許通過VPN路徑（隧道DNS伺服器/VPN介面卡，具體取決於平台和版本）查詢已配置的拆分DNS域。

- 所有其他查詢僅允許通過非VPN DNS伺服器（物理介面卡）進行。

附註：只有註冊思科使用者才能存取內部思科錯誤工具及詳細錯誤資訊。

Tunnel-all和Tunnel-all DNS

停用分割通道(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伺服器），請完成以下步驟：

1. 如果當前配置為tunnel-all，請啟用split-exclude tunneling。任何單主機拆分 — 排除網路都是可接受的，例如本地鏈路地址。

2. 確保在組策略中未啟用tunnel-all-DNS(split-tunnel-all-dns disable)。

通道全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。)

AnyConnect 3.0版(4235)中已解決的DNS效能問題

在以下情況下，此Microsoft Windows問題最為普遍：

- DNS和DHCP伺服器共用同一IP地址的家庭路由器設定（安全客戶端建立通往DHCP伺服器的必要路由）。

- 組策略中有大量DNS字尾/域。

- tunnel-all組態。

- 名稱解析使用不限定的主機名，因此，解析程式會嘗試在所有可用的DNS伺服器上使用多個DNS字尾。

- 本地DNS客戶端嘗試通過物理介面卡傳送DNS查詢，安全客戶端在tunnel-all下阻止物理介面卡。

這可能會導致嚴重的名稱解析延遲，尤其是當頭端推送許多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)存取的偏好設定

1. 使用完全限定的域名(FQDN)而不是不限定的主機名。

2. 對物理介面上的DNS伺服器使用不同的IP地址（與同一子網上的DHCP不同）。

在不同的使用者端作業系統上使用分割通道的DNS

對於安全客戶端，不同的客戶端作業系統使用拆分隧道（無拆分DNS）以不同方式處理DNS;本節介紹這些差異。

Microsoft Windows（Windows 10和Windows 11）

在Windows上，DNS設定是按網路介面設定的。使用分割隧道，DNS查詢可以在VPN隧道介面卡上失敗後回退到物理介面卡DNS伺服器。如果使用拆分隧道而不使用拆分DNS，則內部和外部解析都可以工作，因為解析程式可以回退到外部DNS伺服器。修復思科錯誤ID CSCuf07885後，版本4.2中的Secure Client for Windows發生了重大更改。此行為在Secure Client 5.x中保持不變。

附註：只有註冊思科使用者才能存取內部思科錯誤工具。

全通道組態（和已啟用全通道DNS的分割通道）

預安全客戶端4.2（AnyConnect 4.1及更低版本）：

- 僅允許向在組策略（隧道DNS伺服器）下配置的DNS伺服器發出DNS請求。

- 安全客戶端驅動程式會響應所有其他沒有此類名稱的請求。

- DNS解析只能使用隧道DNS伺服器。

安全客戶端4.2及更高版本：

- 如果向任何DNS伺服器發出的DNS請求來自VPN介面卡，並通過隧道傳送，則允許這些請求。

- 所有其他請求均未收到此類名稱；僅通過VPN隧道解析。

- 在思科漏洞ID CSCuf07885之前，安全客戶端限制目標DNS伺服器。修復後，它會限制哪些網路介面卡可以啟動DNS請求。

Split-include Configuration(Tunnel-all-DNS Disabled， No Split-DNS)

安全客戶端驅動程式不會干擾本地DNS解析程式。解析度取決於網路介面卡的順序；安全客戶端是連線VPN時的首選介面卡。

DNS查詢首先通過隧道傳送；如果未解決，解析程式可以嘗試使用公共介面。在4.2之前的版本中，拆分包含訪問清單必須包括覆蓋隧道DNS伺服器的子網。從安全客戶端4.2開始，隧道DNS伺服器的主機路由將自動新增為拆分包含網路（安全路由），因此拆分包含的ACL不再需要顯式隧道DNS伺服器子網。

Split-exclude Configuration(Tunnel-all-DNS Disabled， no Split-DNS)

解析程式行為與拆分包含相同，先通過隧道，然後是公共介面回退。拆分 — 排除訪問清單不得包含涵蓋隧道DNS伺服器的子網。 從安全客戶端4.2開始，隧道DNS伺服器的自動主機路由可防止常見的拆分 — 排除配置錯誤。

Split-DNS（已禁用Tunnel-all-DNS，已配置Split-include）

Windows上的拆分DNS需要拆分 — 包括隧道(指定了拆分隧道策略隧道。) 它不支援對拆分DNS配置使用僅拆分排除的隧道策略。

預安全客戶端4.2:

- 拆分DNS域查詢：僅允許通過DNS伺服器通道傳輸；如果傳送到其他伺服器，則沒有此類名稱。

- 非拆分DNS域查詢：僅允許到其他DNS伺服器；如果通過隧道嘗試，則沒有此類名稱。

安全客戶端4.2及更高版本（在Windows上真正拆分DNS）:

- 拆分DNS域查詢：只允許任何DNS伺服器通過VPN介面卡。來自公共介面的查詢不會收到此類名稱以強制使用隧道。

- 非拆分DNS域查詢：僅允許來自物理介面卡的DNS伺服器訪問。來自VPN介面卡的查詢不會收到此類名稱來強制公共介面解析。

使用分割排除隧道的分割DNS（安全客戶端5.x）

安全客戶端5.x管理文檔為拆分 — 排除配置新增了拆分DNS。有關頭端和策略要求，請參閱安全客戶端5.x管理員指南 — 為分割排除隧道配置分割DNS。拆分DNS處於活動狀態後，作業系統級實施規則仍然適用。

Windows上的加密DNS(DoH/DoT)

使用DNS over HTTPS(DoH)或DNS over TLS(DoT)的應用程式或作業系統功能可以繞過安全客戶端過濾器的Windows存根解析程式路徑。如果分離DNS對於特定應用似乎失敗，但在瀏覽器中起作用，請驗證這些應用是否使用加密或自定義DNS。標準拆分DNS測試應使用作業系統解析程式（瀏覽器、ping），而不是NSLookup/dig。

macOS

在macOS上，DNS設定是全域性的（不是每個介面）。 如果使用拆分隧道而不使用拆分DNS，則DNS查詢通常無法按預期到達隧道外部的DNS伺服器，您只能解析內部名稱，而不能通過公共路徑解析外部名稱。此錯誤記錄在Cisco錯誤ID CSCtf2026和Cisco錯誤ID CSCtz86314中。

因應措施:

- 在組策略下指定外部DNS伺服器IP並將FQDN用於內部查詢。

- 如果可以通過隧道解析外部名稱，請通過從組策略中刪除DNS名稱在Advanced > Split Tunneling中禁用拆分DNS，並將FQDN用於內部查詢。

從AnyConnect 3.1開始，MacOS上支援拆分DNS，但受以下條件限制：

- 為兩個IP協定啟用拆分DNS（需要ASA 9.0+/等效的FTD），或；

- 為其中一個IP協定啟用拆分DNS，為另一個協定啟用了客戶端旁路協定，且沒有旁路協定的地址池（或9.0之前的ASA版本上沒有IPv6池）。

附註：安全客戶端不主要通過macOS上的/etc/resolv.conf管理名稱解析；它配置作業系統級別的DNS設定。macOS可以保持resolv.conf更新以確保相容性。運行scutil —dns以檢視有效的DNS配置。

全通道組態（和已啟用全通道DNS的分割通道）

連線安全客戶端時，系統DNS配置中僅保留隧道DNS伺服器；請求僅繼續執行隧道DNS伺服器。

Split-include / Split-exclude（禁用Tunnel-all-DNS，無拆分DNS）

安全客戶端不會干擾本機解析程式。通道DNS伺服器優先於公共解析程式，因此第一次查詢嘗試會通過通道。由於DNS在macOS上是全域性的，因此查詢並不總是可靠地使用隧道之外的公共DNS(思科錯誤ID:CSCtf20226)。

從安全客戶端4.2開始，隧道DNS伺服器的主機路由將自動新增為安全路由。

Split-DNS（已禁用Tunnel-all-DNS，已配置Split-include）

在以下情況下應用真正的拆分DNS（類似於Windows）：

- 為IPv4和IPv6都啟用拆分DNS，或；

- 為一個協定啟用了拆分DNS，而另一個協定不存在任何客戶端地址池。

真正的拆分DNS意味著匹配的拆分DNS域只能通過隧道進行解析，並且不會洩漏給外部解析程式。

如果只為一個協定啟用了拆分DNS，且為另一個協定分配了客戶端地址，則只會對拆分隧道實施DNS回退：安全客戶端允許通過隧道匹配查詢（可以拒絕其他查詢以強制故障轉移），但無法完全防止通過公共介面卡以明文形式傳送的拆分DNS域查詢的洩漏。

平台支援（安全客戶端管理指南）：Windows和macOS支援完全剝離DNS。Linux的支援有限（請參見Linux部分）。

Linux

全通道組態（和已啟用全通道DNS的分割通道）

連線安全客戶端時，在系統DNS配置中僅維護隧道DNS伺服器。

Split-include / Split-exclude（禁用Tunnel-all-DNS、不拆分DNS）

安全客戶端不會干擾本機解析程式。首選隧道DNS伺服器；初次解析嘗試會通過隧道。

Split-DNS（已禁用Tunnel-all-DNS，已配置Split-include）

如果啟用了拆分DNS，則在Linux上僅對拆分隧道實施DNS回退：

- 安全客戶端允許通過隧道進行拆分DNS域查詢。

- 其他查詢可能會收到拒絕以鼓勵故障切換到公共DNS。

- 安全客戶端無法完全強制拆分DNS域查詢，因為它們永遠不會通過公共介面卡以明文形式傳送。

安全客戶端管理指南指出Linux上的有限拆分DNS:只有通過隧道傳輸的DNS請求完全受分離DNS策略的約束；隧道外部的某些查詢無法符合拆分DNS策略。

Linux VM和容器

安全客戶端支援tunnel-from-any-source custom屬性，因此具有任何源地址的資料包可以在VM例項或Docker容器內以拆分 — 包含或拆分 — 排除模式進行路由。有關配置詳細資訊，請參閱《Secure Client 5.x管理員指南》。

Apple iOS（iPhone和iPad）

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解析行為。

動態分割通道和DNS（安全使用者端4.5+）

動態拆分隧道可在連線時或按需解析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，以獲得當前修復程式和功能。

相關錯誤資訊

附註：只有註冊思科使用者才能存取內部思科錯誤工具。

- 思科漏洞ID:CSCtn14578 — 真分離DNS（非回退） — Windows，3.0(4235)+

- 思科錯誤ID: CSCtq02141 — 當ISP DNS與公共IP位於同一子網時的DNS延遲

- 思科錯誤 ID:CSCuf07885 - Windows DNS:按介面卡限制，而不是按目標伺服器限制 — 4.2+

- 思科錯誤 ID:CSCtf20226 - macOS拆分隧道DNS，與Windows不同

- 思科錯誤 ID:CSCtz86314 - macOS拆分DNS查詢不通過隧道傳送

- 思科錯誤 ID:CSCtq09624 - iOS拆分隧道DNS行為

- 思科錯誤 ID:CSCts89292 - iOS忽略.local DNS域

- 思科錯誤 ID:CSCsv34395 - DHCP伺服器的FQDN代理

相關資訊

- 檢查DNS查詢和域名解析的行為(Cisco.com) — 文檔ID 116016

- Cisco Secure Client 5.x管理員指南 — 配置VPN訪問/拆分DNS

- 配置ASA/AnyConnect動態拆分隧道 — 文檔ID號215383

- 為使用Umbrella模組的安全客戶端啟用隧道所有DNS — 文檔ID標224809

- AnyConnect和OpenDNS漫遊客戶端之間的互操作 — 文檔ID標200395

- 思科技術支援與下載

修訂記錄

修訂版

日期

備註

4.0

2026年7月28日

全面實質性更新：安全客戶端品牌、平台更新、動態拆分隧道、Umbrella/tunnel-all-DNS、鍵入和配置修復、已更正的相關連結

3.0

2024年5月23日

重新認證(Cisco.com)

1.0

2014年6月12日

初始版本

文檔應用於

- 思科安全客戶端（包括AnyConnect） — Windows、macOS、Linux、iOS

- Cisco安全防火牆ASA和FTD遠端訪問VPN組策略