簡介
本文檔介紹了當前的一些限制和可用的解決方法,以使AnyConnect和OpenDNS漫遊客戶端協同工作。 思科客戶依靠AnyConnect VPN客戶端與其企業網路進行安全和加密的通訊。同樣,OpenDNS漫遊客戶端使使用者能夠在OpenDNS公共伺服器的幫助下安全地使用DNS服務。這兩個客戶端都在終端上增加了一組豐富的安全功能,因此它們彼此之間的互操作非常重要。
必要條件
AnyConnect和OpenDNS漫遊客戶端的工作知識。
熟悉AnyConnect VPN的ASA或IOS/IOS-XE前端配置(隧道組/組策略)。
需求
思科建議您瞭解以下主題:
- 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解析的方式。在CSCuf07885修復之後,版本4.2中的AnyConnect for Windows的DNS處理機制中的行為發生了更改。
Windows 7+
全隧道配置(以及已啟用全隧道DNS的分割隧道)
AnyConnect 4.2之前的版本:
只允許向組策略下配置的DNS伺服器(隧道DNS伺服器)發出DNS請求。AnyConnect驅動程式以「無此名稱」響應響應所有其他請求。因此,只能使用隧道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查詢將首先透過隧道傳送,如果未得到解析,解析器將嘗試透過公共介面解析它。分割排除存取清單不應包含涵蓋通道DNS伺服器的子網路。從AnyConnect 4.2開始,隧道DNS伺服器的主機路由由AnyConnect客戶端自動增加為分離包括網路(安全路由),因此這將防止分離排除訪問清單中的錯誤配置。
分割DNS (停用所有通道的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驅動程式會以「無此名稱」作出響應,以強制解析器始終使用隧道進行名稱解析。因此,拆分DNS域只能透過隧道進行解析。
只要與分離dns域不匹配的DNS請求來自物理介面卡,則允許它們訪問任何DNS伺服器。如果查詢由VPN介面卡發起,AnyConnect將以「無此名稱」作出響應,以強制解析器始終嘗試透過公共介面解析名稱。因此,只能透過公共介面解析非分離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伺服器子網。
分割DNS (停用所有通道的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伺服器。
分離包括配置(停用所有DNS隧道,不分離DNS)
AnyConnect不會干擾本地DNS解析程式。隧道DNS伺服器被配置為首選解析器,優先於公共DNS伺服器,從而確保名稱解析的初始DNS請求透過隧道傳送。
分離排除配置(停用所有DNS隧道,不分離DNS)
AnyConnect不會干擾本地DNS解析程式。隧道DNS伺服器被配置為首選解析器,優先於公共DNS伺服器,從而確保名稱解析的初始DNS請求透過隧道傳送。
分割DNS (停用所有通道的DNS,已設定分割DNS)
如果啟用了分割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(停用split-tunnel-all DNS)。因此,當漫遊客戶端也在使用中時,目前建議使用其中一種配置。如果使用「全部使用隧道」配置,或啟用「全部使用拆分隧道」DNS,漫遊客戶端將保持未受保護/未加密狀態,如圖所示。
因應措施
如果目的是要使用VPN隧道保護漫遊客戶端和OpenDNS伺服器之間的通訊,則可以在VPN頭端上使用虛擬拆分排除訪問清單。這是最接近全通道組態的專案。如果沒有此類要求,則可以在訪問清單不包括OpenDNS公共伺服器的情況下使用分離包括項,也可以在訪問清單包括OpenDNS公共伺服器的情況下使用分離排除項。
此外,使用漫遊客戶端時,不能使用分離DNS模式,因為這將導致本地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流量
此示例使用分離排除訪問清單中的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連線時,漫遊客戶端應顯示受保護且已加密,如下圖所示: