소개
이 문서에서는 AnyConnect와 OpenDNS 로밍 클라이언트가 함께 작동하도록 하기 위한 현재 제한 사항 및 사용 가능한 해결 방법에 대해 설명합니다. Cisco 고객은 기업 네트워크에 대한 안전하고 암호화된 통신을 위해 AnyConnect VPN 클라이언트를 사용합니다. 마찬가지로, OpenDNS Roaming 클라이언트는 OpenDNS 공용 서버를 통해 DNS 서비스를 안전하게 사용할 수 있는 기능을 제공합니다. 이 두 클라이언트는 모두 엔드포인트에 다양한 보안 기능을 추가하므로 서로 상호 운용하는 것이 중요합니다.
사전 요구 사항
AnyConnect 및 OpenDNS 로밍 클라이언트에 대한 작업 지식
AnyConnect VPN에 대한 ASA 또는 IOS/IOS-XE 헤드엔드 컨피그레이션(tunnel-group/group-policy)에 익숙합니다.
요구 사항
다음 주제에 대한 지식을 보유하고 있으면 유용합니다.
- ASA 또는 IOS/IOS-XE 헤드엔드
- AnyConnect VPN 클라이언트 및 OpenDNS 로밍 클라이언트를 실행하는 엔드포인트
사용되는 구성 요소
이 문서의 정보는 다음 소프트웨어 및 하드웨어 버전을 기반으로 합니다.
- ASA headend 실행 릴리스 9.4
- 윈도우 7
- AnyConnect 클라이언트 4.2.00096
- OpenDNS 로밍 클라이언트 2.0.154
이 문서의 정보는 특정 랩 환경의 디바이스를 토대로 작성되었습니다. 이 문서에 사용된 모든 디바이스는 초기화된(기본) 컨피그레이션으로 시작되었습니다. 현재 네트워크가 작동 중인 경우, 모든 명령어의 잠재적인 영향을 미리 숙지하시기 바랍니다.
배경 정보
OpenDNS는 향후 사용할 수 있도록 Cisco AnyConnect 팀과 함께 AnyConnect 플러그인을 개발하고 있습니다. 날짜가 설정되지 않았지만 이 통합을 통해 해결 방법 없이 로밍 클라이언트가 AnyConnect 클라이언트와 작동할 수 있습니다. 이렇게 하면 AnyConnect가 로밍 클라이언트에 대한 전달 메커니즘이 될 수도 있습니다.
기능
AnyConnect DNS 처리
VPN 헤드엔드는 AnyConnect 클라이언트의 트래픽을 처리하기 위해 몇 가지 다른 방식으로 구성할 수 있습니다.
- 전체 터널 컨피그레이션(tunnel-all): 이렇게 하면 엔드포인트의 모든 트래픽이 암호화된 VPN 터널을 통해 전송되므로 트래픽이 일반 텍스트로 공용 인터페이스 어댑터를 벗어나지 않습니다
- 스플릿 터널 구성:
a. 스플릿-포함 터널링: VPN 헤드엔드에 정의된 특정 서브넷 또는 호스트로만 향하는 트래픽은 터널을 통해 전송되고, 다른 모든 트래픽은 일반 텍스트로 터널 외부로 전송됩니다
b. 스플릿 제외 터널링: VPN 헤드엔드에 정의된 특정 서브넷 또는 호스트로만 향하는 트래픽은 암호화에서 제외되며 일반 텍스트로 공용 인터페이스를 떠나고 다른 모든 트래픽은 암호화되어 터널을 통해서만 전송됩니다
이러한 각 컨피그레이션은 엔드포인트의 운영 체제에 따라 AnyConnect 클라이언트에서 DNS 확인을 처리하는 방법을 결정합니다. CSCuf07885에 대한 수정 후 릴리스 4.2에서 Windows용 AnyConnect의 DNS 처리 메커니즘에서 동작이 변경되었습니다.
Windows 7 이상
Tunnel-all 컨피그레이션(및 tunnel-all DNS가 활성화된 스플릿 터널링)
AnyConnect 4.2 이전:
그룹 정책(터널 DNS 서버)에 구성된 DNS 서버에 대한 DNS 요청만 허용됩니다. AnyConnect 드라이버는 '해당 이름 없음' 응답으로 다른 모든 요청에 응답합니다. 따라서 DNS 확인은 터널 DNS 서버를 통해서만 수행할 수 있습니다.
AnyConnect 4.2 +
VPN 어댑터에서 시작되어 터널을 통해 전송되는 모든 DNS 서버에 대한 DNS 요청은 허용됩니다. 다른 모든 요청은 '해당 이름 없음' 응답으로 응답되며 DNS 확인은 VPN 터널을 통해서만 수행할 수 있습니다
CSCuf07885 수정 이전에 AC는 대상 DNS 서버를 제한하지만, CSCuf07885에 대한 수정을 사용하면 어떤 네트워크 어댑터가 DNS 요청을 시작할 수 있는지 제한합니다.
Split-include 컨피그레이션(tunnel-all DNS는 비활성화되고 split-DNS는 없음)
AnyConnect 드라이버는 네이티브 DNS 확인자를 방해하지 않습니다. 따라서 DNS 확인은 네트워크 어댑터 순서에 따라 수행되며, VPN 연결 시 AnyConnect가 항상 기본 어댑터입니다. 따라서 먼저 터널을 통해 DNS 쿼리를 전송하고, 확인되지 않으면 확인자가 공용 인터페이스를 통해 확인하려고 시도합니다. 스플릿-포함 액세스 목록은 터널 DNS 서버를 다루는 서브넷을 포함해야 합니다. AnyConnect 4.2부터 터널 DNS 서버에 대한 호스트 경로는 AnyConnect 클라이언트에 의해 스플릿-포함 네트워크(보안 경로)로 자동으로 추가되므로 스플릿-포함 액세스 목록에 터널 DNS 서버 서브넷을 더 이상 명시적으로 추가할 필요가 없습니다.
Split-exclude 컨피그레이션(tunnel-all DNS는 비활성화되고 split-DNS는 없음)
AnyConnect 드라이버는 네이티브 DNS 확인자를 방해하지 않습니다. 따라서 DNS 확인은 네트워크 어댑터 순서에 따라 수행되며, VPN 연결 시 AnyConnect가 항상 기본 어댑터입니다. 따라서 먼저 터널을 통해 DNS 쿼리를 전송하고, 확인되지 않으면 확인자가 공용 인터페이스를 통해 확인하려고 시도합니다. 스플릿 제외 액세스 목록은 터널 DNS 서버를 다루는 서브넷을 포함해서는 안 됩니다. AnyConnect 4.2부터 터널 DNS 서버에 대한 호스트 경로는 AnyConnect 클라이언트에 의해 스플릿-포함 네트워크(보안 경로)로 자동으로 추가되므로 스플릿-제외 액세스 목록의 잘못된 컨피그레이션을 방지할 수 있습니다.
Split-DNS(tunnel-all DNS disabled, split-include configured)
AnyConnect 4.2 이전
스플릿 DNS 도메인과 일치하는 DNS 요청은 DNS 서버를 터널링할 수 있지만 다른 DNS 서버에는 허용되지 않습니다. 이러한 내부 DNS 쿼리가 터널 밖으로 유출되는 것을 방지하기 위해 AnyConnect 드라이버는 쿼리가 다른 DNS 서버로 전송되는 경우 '해당 이름 없음'으로 응답합니다. 따라서 스플릿 DNS 도메인은 터널 DNS 서버를 통해서만 확인할 수 있습니다.
스플릿 DNS 도메인과 일치하지 않는 DNS 요청은 다른 DNS 서버에 허용되지만 DNS 서버를 터널링할 수 없습니다. 이 경우에도 스플릿 DNS 이외의 도메인에 대한 쿼리가 터널을 통해 시도되면 AnyConnect 드라이버는 '해당 이름 없음'으로 응답합니다. 따라서 스플릿 DNS 도메인이 아닌 도메인은 터널 외부의 공용 DNS 서버를 통해서만 확인할 수 있습니다.
AnyConnect 4.2 +
스플릿 DNS 도메인과 일치하는 DNS 요청은 VPN 어댑터에서 시작하는 모든 DNS 서버에 허용됩니다. 쿼리가 공용 인터페이스에서 시작된 경우 AnyConnect 드라이버는 '해당 이름 없음'으로 응답하여 이름 확인을 위해 레졸버가 항상 터널을 사용하도록 합니다. 따라서 스플릿 DNS 도메인은 터널을 통해서만 확인할 수 있습니다.
스플릿 DNS 도메인과 일치하지 않는 DNS 요청은 물리적 어댑터에서 시작되는 모든 DNS 서버에 허용됩니다. 쿼리가 VPN 어댑터에서 시작된 경우 AnyConnect는 '해당 이름 없음'으로 응답하여 확인자가 항상 공용 인터페이스를 통해 이름 확인을 시도하도록 합니다. 따라서 스플릿 DNS 도메인이 아닌 도메인은 공용 인터페이스를 통해서만 확인할 수 있습니다.
맥 OS X
Tunnel-all 컨피그레이션(및 tunnel-all DNS가 활성화된 스플릿 터널링)
AnyConnect가 연결되면 터널 DNS 서버만 시스템 DNS 컨피그레이션에서 관리되므로 DNS 요청은 터널 DNS 서버로만 보낼 수 있습니다.
Split-include 컨피그레이션(tunnel-all DNS는 비활성화되고 split-DNS는 없음)
AnyConnect는 네이티브 DNS 확인자를 방해하지 않습니다. 터널 DNS 서버는 공용 DNS 서버보다 우선하여 기본 설정 확인자로 구성되므로 이름 확인에 대한 초기 DNS 요청이 터널을 통해 전송됩니다. DNS 설정은 Mac OS X에서 전역이므로 DNS 쿼리에서 CSCtf20226에 설명된 대로 터널 외부의 공용 DNS 서버를 사용할 수 없습니다. AnyConnect 4.2부터 터널 DNS 서버에 대한 호스트 경로는 AnyConnect 클라이언트에 의해 스플릿-포함 네트워크(보안 경로)로 자동으로 추가되므로 스플릿-포함 액세스 목록에 터널 DNS 서버 서브넷을 더 이상 명시적으로 추가할 필요가 없습니다.
Split-exclude 컨피그레이션(tunnel-all DNS는 비활성화되고 split-DNS는 없음)
AnyConnect는 네이티브 DNS 확인자를 방해하지 않습니다. 터널 DNS 서버는 공용 DNS 서버보다 우선하여 기본 설정 확인자로 구성되므로 이름 확인에 대한 초기 DNS 요청이 터널을 통해 전송됩니다. DNS 설정은 Mac OS X에서 전역이므로 DNS 쿼리에서 CSCtf20226에 설명된 대로 터널 외부의 공용 DNS 서버를 사용할 수 없습니다. AnyConnect 4.2부터 터널 DNS 서버에 대한 호스트 경로는 AnyConnect 클라이언트에 의해 스플릿-포함 네트워크(보안 경로)로 자동으로 추가되므로 스플릿-포함 액세스 목록에 터널 DNS 서버 서브넷을 더 이상 명시적으로 추가할 필요가 없습니다.
Split-DNS(tunnel-all DNS disabled, split-include configured)
스플릿 DNS가 두 IP 프로토콜(IPv4 및 IPv6) 모두에 대해 활성화되었거나 한 프로토콜에만 활성화되어 있고 다른 프로토콜에 대해 구성된 주소 풀이 없는 경우:
Windows와 유사한 진정한 스플릿 DNS가 적용됩니다. 진정한 스플릿 DNS는 스플릿 DNS 도메인과 일치하는 요청이 터널을 통해서만 확인되고 터널 외부의 DNS 서버로 유출되지 않음을 의미합니다.
스플릿 DNS가 한 개의 프로토콜에 대해서만 활성화되고 클라이언트 주소가 다른 프로토콜에 대해 할당된 경우 "스플릿 터널링을 위한 DNS 폴백"만 적용됩니다. 즉, AC는 터널을 통해 스플릿 DNS 도메인과 일치하는 DNS 요청만 허용합니다(다른 요청은 공용 DNS 서버로 강제로 장애 조치하기 위해 "거부됨" 응답과 함께 AC에서 응답함). 그러나 일치하는 스플릿 DNS 도메인이 공용 어댑터를 통해 암호화되지 않은 상태로 전송되지 않도록 할 수는 없습니다.
Linux
Tunnel-all 컨피그레이션(및 tunnel-all DNS가 활성화된 스플릿 터널링)
AnyConnect가 연결되면 터널 DNS 서버만 시스템 DNS 컨피그레이션에서 관리되므로 DNS 요청은 터널 DNS 서버로만 보낼 수 있습니다.
Split-include 컨피그레이션(tunnel-all DNS는 비활성화되고 split-DNS는 없음)
AnyConnect는 네이티브 DNS 확인자를 방해하지 않습니다. 터널 DNS 서버는 공용 DNS 서버보다 우선하여 기본 설정 확인자로 구성되므로 이름 확인에 대한 초기 DNS 요청이 터널을 통해 전송됩니다.
Split-exclude 컨피그레이션(tunnel-all DNS는 비활성화되고 split-DNS는 없음)
AnyConnect는 네이티브 DNS 확인자를 방해하지 않습니다. 터널 DNS 서버는 공용 DNS 서버보다 우선하여 기본 설정 확인자로 구성되므로 이름 확인에 대한 초기 DNS 요청이 터널을 통해 전송됩니다.
Split-DNS(tunnel-all DNS disabled, split-include configured)
스플릿 DNS가 활성화된 경우 "스플릿 터널링을 위한 DNS 폴백"만 적용됩니다. 즉, AC는 터널을 통해 스플릿 DNS 도메인과 일치하는 DNS 요청만 허용합니다(다른 요청은 공용 DNS 서버로 강제로 장애 조치하기 위해 "거부됨" 응답과 함께 AC에서 응답함). 그러나 일치하는 스플릿 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 설정은 Roaming Client 컨피그레이션 폴더 내의 로컬 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 바인딩된 주소에 연결할 수 없는 경우, 클라이언트가 fail-open 상태로 전환되고 로컬 어댑터에서 DNS 설정을 복원합니다. 백그라운드에서 208.67.222.222로 프로브를 계속 전송하며, 보안 연결이 다시 설정되는 경우 활성 모드로 전환될 수 있습니다.
제한 사항
두 클라이언트의 상위 레벨 기능을 살펴보았으므로, 로밍 클라이언트는 로컬 DNS 설정을 변경하고 127.0.0.1:53에 바인딩하여 보안 채널을 통해 쿼리를 전달할 수 있어야 합니다. VPN이 연결된 경우 AnyConnect가 기본 DNS 확인자와 간섭하지 않는 유일한 컨피그레이션은 split-include 및 split-exclude입니다(split-tunnel-all DNS가 비활성화됨). 따라서 현재 로밍 클라이언트도 사용 중인 경우 이러한 컨피그레이션 중 하나를 사용하는 것이 좋습니다. 그림과 같이 tunnel-all 컨피그레이션이 사용되거나 split-tunnel-all DNS가 활성화된 경우 로밍 클라이언트는 보호되지 않거나 암호화되지 않은 상태로 유지됩니다.
해결 방법
VPN 터널을 사용하여 로밍 클라이언트와 OpenDNS 서버 간의 통신을 보호하려는 경우 VPN 헤드엔드에서 더미 스플릿-제외 액세스 목록을 사용할 수 있습니다. 이는 전체 터널 컨피그레이션에 가장 가까운 것입니다. 이러한 요구 사항이 없으면 액세스 목록에 OpenDNS 공용 서버가 포함되지 않은 경우 split-include를 사용할 수 있으며, 액세스 목록에 OpenDNS 공용 서버가 포함된 경우 split-exclude를 사용할 수 있습니다.
또한 로밍 클라이언트를 사용할 경우 로컬 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 트래픽 제외
이 예에서는 split-exclude access-list의 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이 연결되면 로밍 클라이언트는 다음 이미지에 표시된 대로 보호 및 암호화되어 표시됩니다.