分割與標準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與Best Effort Split DNS
AnyConnect版本2.4支援拆分DNS回退(盡力拆分DNS),這不是真正的拆分DNS,可在傳統IPsec客戶端找到。如果請求與拆分DNS域匹配,AnyConnect允許將請求通過隧道連線到ASA。如果伺服器無法解析主機名,則DNS解析程式將繼續並向對映到物理介面的DNS伺服器傳送相同的查詢。
另一方面,如果請求與任何拆分DNS域不匹配,AnyConnect不會將其隧道連線到ASA。相反,它會構建DNS響應,以便DNS解析程式回退,並將查詢傳送到對映到物理介面的DNS伺服器。因此,此功能不是稱為拆分DNS,而是用於拆分隧道的DNS後援。AnyConnect不僅確保只有目標拆分DNS域通過隧道傳入的請求,還依賴客戶端作業系統DNS解析器行為進行主機名解析。
由於可能存在私有域名洩露,這引起了安全擔憂。例如,本地DNS客戶端可以傳送有關專用域名的查詢到公共DNS伺服器,特別是當VPN DNS名稱伺服器無法解析DNS查詢時。
請參閱Cisco錯誤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錯誤ID CSCtq02141和Cisco錯誤ID CSCtn14578,以及上述真正拆分DNS解決方案的簡介。
注意:只有註冊思科使用者才能訪問內部思科工具和資訊。
如果無法實施升級,則以下是可能的解決方法:
- 為IP地址啟用split-exclude tunneling,這樣本地DNS請求就可以通過物理介面卡。您可以使用來自linklocal子網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地址。
在不同Cisco OS上使用分割通道的DNS
與AnyConnect的拆分隧道(無拆分DNS)配合使用時,不同的思科作業系統會以不同方式處理DNS搜尋。本節介紹這些差異。
Microsoft Windows
在Microsoft Windows系統上,DNS設定是按介面設定的。如果使用分割隧道,則DNS查詢在VPN隧道介面卡上失敗後,可以回退到物理介面卡DNS伺服器。如果定義了不帶拆分DNS的拆分隧道,則內部和外部DNS解析都會起作用,因為它會回退到外部DNS伺服器。
在修正思科錯誤ID CSCuf07885後,在4.2版中,在AnyConnect for Windows上處理此問題的DNS機制中的行為已發生變化。
注意:只有註冊思科使用者才能訪問內部思科工具和資訊。
Windows 7+
全通道組態(和已啟用全通道DNS的分割通道)
AnyConnect 4.2之前的版本:
僅允許向在組策略(隧道DNS伺服器)下配置的DNS伺服器發出DNS請求。AnyConnect驅動程式用「no these name」響應來響應所有其他請求。因此,只能對通道DNS伺服器執行DNS解析。
AnyConnect 4.2 +
允許對任何DNS伺服器的DNS請求,只要這些請求源自VPN介面卡並通過隧道傳送。所有其它請求都以沒有此類名稱進行響應,且DNS解析只能通過VPN隧道執行。
在思科錯誤ID CSCuf07885修復之前,AC限制了目標DNS伺服器,但通過此錯誤的修復程式,現在可限制哪些網路介面卡可以啟動DNS請求。
注意:只有註冊思科使用者才能訪問內部思科工具和資訊。
Split-include configuration(禁用所有DNS隧道且沒有拆分DNS)
AnyConnect驅動程式不會干擾本機DNS解析程式。因此,DNS解析是根據網路介面卡的順序執行的,其中AnyConnect在VPN連線時始終是首選介面卡。此外,DNS查詢首先會通過隧道傳送,如果無法解析,解析程式會嘗試通過公共介面解析它。split-include access-list包含涵蓋通道DNS伺服器的子網。從AnyConnect 4.2開始,隧道DNS伺服器的主機路由由AnyConnect客戶端自動新增為拆分包含網路(安全路由),因此,拆分包含訪問清單不再需要顯式新增隧道DNS伺服器子網。
Split-exclude configuration(禁用所有DNS隧道且沒有拆分DNS)
AnyConnect驅動程式不會干擾本機DNS解析程式。因此,DNS解析是根據網路介面卡的順序執行的,其中AnyConnect在VPN連線時始終是首選介面卡。此外,DNS查詢首先會通過隧道傳送,如果無法解析,解析程式會嘗試通過公共介面解析它。split-exclude access-list不得包含涵蓋通道DNS伺服器的子網。從AnyConnect 4.2開始,AnyConnect客戶端會自動將隧道DNS伺服器的主機路由新增為拆分包含網路(安全路由),從而防止拆分排除訪問清單中的配置錯誤。
Split-DNS(已禁用所有DNS隧道,已配置拆分 — 包括)
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 this name」作為響應,以強制解析程式始終使用隧道進行名稱解析。因此,拆分DNS網域只能透過通道解析。
與拆分DNS域不匹配的DNS請求允許傳送到任何DNS伺服器,只要它們來自物理介面卡。如果查詢是由VPN介面卡發起的,AnyConnect將以「no this name」作為響應,以強制解析器始終嘗試通過公共介面解析名稱。因此,只能通過公共介面解析非拆分dns域。
Mac OSx
在Macintosh系統上,DNS設定是全域性的。如果使用分割隧道,但不使用分割DNS,則DNS查詢無法到達隧道外部的DNS伺服器。您只能在內部(而非外部)進行解析。
此錯誤記錄在Cisco錯誤ID CSCtf2026和Cisco錯誤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伺服器。
Split-include configuration(禁用所有DNS隧道且沒有拆分DNS)
AnyConnect不會干擾本地DNS解析程式。通道DNS伺服器配置為首選解析器,其優先順序高於公共DNS伺服器,因此可以確保通過通道傳送有關名稱解析的初始DNS請求。由於Mac OS X上的DNS設定是全域性設定,因此DNS查詢無法使用Cisco錯誤ID CSCtf2026中記錄的隧道之外的公共DNS伺服器。從AnyConnect 4.2開始,隧道DNS伺服器的主機路由由AnyConnect客戶端自動新增為拆分包含網路(安全路由),因此,拆分包含訪問清單不再需要顯式新增隧道DNS伺服器子網。
Split-exclude configuration(禁用所有DNS隧道且沒有拆分DNS)
AnyConnect不會干擾本地DNS解析程式。隧道DNS伺服器配置為首選解析器,它們優先於公共DNS伺服器,因此可確保通過隧道傳送有關名稱解析的初始DNS請求。由於Mac OS X上的DNS設定是全域性設定,因此DNS查詢無法使用Cisco錯誤ID CSCtf2026中記錄的隧道之外的公共DNS伺服器。從AnyConnect 4.2開始,隧道DNS伺服器的主機路由由AnyConnect客戶端自動新增為拆分包含網路(安全路由),因此,拆分包含訪問清單不再需要顯式新增隧道DNS伺服器子網。
Split-DNS(已禁用所有DNS隧道,已配置拆分 — 包括)
如果為兩個IP協定(IPv4和IPv6)都啟用了拆分DNS,或者它只為一個協定啟用,並且沒有為另一個協定配置地址池:
實施與Windows類似的真正拆分DNS。真正的拆分DNS意味著與拆分DNS域匹配的請求只能通過隧道解析,不會將其洩露到隧道外部的DNS伺服器。
如果只為一個協定啟用了拆分DNS,而為另一個協定分配了客戶端地址,則只會對拆分隧道實施DNS回退。這意味著AC僅允許通過隧道與拆分DNS域匹配的DNS請求(其他請求由AC通過「拒絕」響應進行響應,以強制故障轉移至公共DNS伺服器),但無法強制實施與未通過公共介面卡以明文傳送的拆分DNS域匹配的請求。
Linux
全通道組態(和已啟用全通道DNS的分割通道)
連線AnyConnect時,在系統DNS配置中僅維護隧道DNS伺服器,因此DNS請求只能傳送到隧道DNS伺服器。
Split-include configuration(禁用所有DNS隧道且沒有拆分DNS)
AnyConnect不會干擾本地DNS解析程式。通道DNS伺服器配置為首選解析器,其優先順序高於公共DNS伺服器,因此可以確保通過通道傳送有關名稱解析的初始DNS請求。
Split-exclude configuration(禁用所有DNS隧道且沒有拆分DNS)
AnyConnect不會干擾本地DNS解析程式。通道DNS伺服器配置為首選解析器,其優先順序高於公共DNS伺服器,因此可以確保通過通道傳送有關名稱解析的初始DNS請求。
Split-DNS(已禁用所有DNS隧道,已配置拆分 — 包括)
如果啟用了拆分DNS,則僅對拆分隧道實施DNS回退。這意味著AC僅允許通過隧道與拆分DNS域匹配的DNS請求(其他請求由AC通過「拒絕」響應進行響應,以強制故障轉移至公共DNS伺服器),但無法強制實施與未通過公共介面卡以明文傳送的拆分DNS域匹配的請求。
iPhone
iPhone完全與Macintosh系統相反,與Microsoft Windows不同。如果定義了拆分隧道,但未定義拆分DNS,則DNS查詢將通過定義的全域性DNS伺服器退出。例如,拆分DNS域條目對於內部解析是必需的。此行為已記錄在Cisco錯誤ID CSCtq09624中,並在Apple iOS AnyConnect客戶端的2.5.4038版中修正。
注意:請注意,iPhone DNS查詢會忽略.local域。 此錯誤記錄在Cisco錯誤ID CSCts89292中。Apple工程師確認問題是由作業系統的功能引起的。這是設計好的行為,蘋果證實,沒有改變這一點。
相關錯誤資訊
注意:只有註冊思科使用者才能訪問內部思科工具和資訊。
相關資訊