ASA VPN 클라이언트가 잘못된 DHCP 풀에서 주소를 받는 경우
ASA의 dhcp-server와 dhcp-network-scope를 서로 다른 두 필드로 읽고, scope를 풀 밖의 라우팅 가능한 주소로 설정한 다음 경로를 확인합니다.
AnyConnect 클라이언트가 잘못된 서브넷에 나타나거나 DHCP 서버가 아무것도 주지 않는데, 그룹 정책은 언뜻 보기에 올바르다. ASA에는 «주소가 어디서 오는가»처럼 들리는 필드가 두 곳에 있고, 잘못된 쪽을 설정하면 정확히 이 결과가 나온다. 연결 프로필은 DHCP 서버를 지정하고, 그룹 정책은 그 서버가 선택할 서브넷을 지정한다. 둘 다 풀을 만들지 않는다.
세 객체, 세 질문
먼저 할당 모델과 풀을 분리한다. 두 모델은 구성을 공유하지 않는다. ASA가 직접 주소를 나눠 주면 로컬 풀을 정의하고 그룹 정책을 그쪽으로 향하게 한다. 외부 DHCP 서버가 나눠 주면 연결 프로필이 그 서버를 지정하고 그룹 정책이 scope 힌트를 제공한다. 둘을 섞는 것이 주소가 끝내 나타나지 않는 흔한 이유다.
| Intent | Objects involved |
|---|---|
| ASA allocates from its own pool | ip local pool plus the group policy's address-pool |
| External DHCP allocates | dhcp-server on the tunnel group, dhcp-network-scope on the group policy |
값을 바꾸기 전에 유효 값을 읽는다
생략된 줄은 명시적 none 와 같지 않다. 실행 중인 구성은 입력한 내용을 보여 주고, show run all group-policy 는 상속된 기본값을 포함해 정책이 실제로 무엇으로 귀결되는지 보여 준다. scope가 잘못이라고 판단하기 전에 둘 다 확인한다. 기본 정책에서 상속한 그룹 정책은 짧은 목록에 절대 나타나지 않는 값을 제공할 수 있다.
show running-config group-policy RemoteStaff
show run all group-policy RemoteStaff
show running-config tunnel-group RemoteStaff
group-policy RemoteStaff attributes
dhcp-network-scope ?
? 출력은 설치된 릴리스에서 읽을 가치가 있다. 허용되는 값과 도움말 텍스트가 버전마다 다르다. Cisco ASA 9.24의 그룹 정책 참조 는 이 속성을 원하는 서브넷에서 할당 풀 밖에 있는 라우팅 가능한 주소로, 인터페이스 주소를 우선한다고 설명한다. 풀 범위도 아니고 네트워크 번호도 아니다.
scope는 범위가 아니라 주소로 설정한다
서버가 사용하길 원하는 풀이 /24에서 10.50.30.50부터 10.50.30.200이고, 그 세그먼트의 ASA 인터페이스가 10.50.30.1이라고 하자. scope 값은 10.50.30.1이다. 10.50.30.0은 네트워크 번호라서 실패하고, 범위를 쓰는 것도 속성이 주소 하나만 받으므로 실패한다. 고른 주소가 인터페이스 주소가 아니면 DHCP 서버의 응답이 도달하도록 정적 경로가 필요하다.
group-policy RemoteStaff attributes
dhcp-network-scope 10.50.30.1
이 조각은 한 가지만 한다. DHCP 서버를 구성하지 않고, 거기에 풀을 만들지도 않으며, 부분적인 원격 액세스 프로필을 동작하는 것으로 바꾸지도 않는다. 여기 문서화된 동작은 IPv4뿐이다. DHCPv6나 프리픽스 위임을 제어할 것이라 기대하지 말라.
롤백 지점과 함께 바꾼다
먼저 스냅숏을 뜬다. 롤백이 재구성이 아니라 명령이 되도록. 편집 전에 관련 구성을 파일로 저장하고, no 가 릴리스에서 무엇을 복원하는지 알아 둔다. 속성을 기본값이나 상속값으로 되돌리므로 위의 정책이 아니라 none 일 수 있다.
copy running-config flash:pre-dhcp-scope.cfg
conf t
group-policy RemoteStaff attributes
no dhcp-network-scope
dhcp-network-scope 10.50.30.1
end
write memory
속성을 제거하는 것도 진단 단계다. scope를 정의하지 않으면 DHCP 서버는 자기 풀에서 미할당 주소를 찾으므로 클라이언트가 예상 밖의 곳에 떨어질 수 있지만 적어도 연결된다. 그 결과는 요청 경로가 동작하고 실패하는 것이 풀 선택임을 알려 준다.
주소와 경로, 권한을 확인한다
할당은 클라이언트 대화상자가 아니라 세션 테이블에서 읽고, 그다음 주소가 터널로 되돌아가는 경로에서 라우팅 가능한지, 그룹 정책의 필터가 예상한 트래픽을 허용하는지 확인한다. 할당 결정은 라우팅 결정이 아니며, 올바른 풀에서 주소를 받은 클라이언트도 모든 요청에서 실패할 수 있다.
show vpn-sessiondb detail anyconnect filter name testuser
show ip local pool
show route | include 10.50.30
ping 10.50.30.61 source inside
세션이 의도한 주소를 보여 주는데 트래픽이 죽는다면 scope는 용의자로서 끝났다. 반환 경로, 그룹 정책의 split-tunnel이나 필터 설정, DHCP scope가 ASA가 실제로 라우팅하는 세그먼트에 있는지를 본다.