Windows VPN 사용자 한 명이 한 서버의 HTTPS에는 도달하고 같은 서버의 SMB에는 도달하지 않아야 하는데, 경로는 그것을 표현할 수 없다. 두 요청은 같은 목적지 주소를 가지므로 트래픽을 터널로 보내는 프리픽스는 제외하려던 흐름도 함께 나른다. 둘을 분리하려면 목적지보다 더 세밀한 것을 검사하는 규칙이 필요하다.

두 가지 다른 의도는 두 가지 다른 Windows 메커니즘으로 만들어진다. 이들을 섞으면 의도한 것의 절반만 적용하면서도 완전해 보이는 정책이 된다.

경로는 한 주소에서 두 서비스를 분리할 수 없다

기본 VPN 라우팅은 프리픽스 기반이며, 어떤 목적지가 터널을 지나고 어떤 목적지가 밖에 남는지 결정한다. 하나의 서브넷을 안에, 다른 서브넷을 밖에 두는 데는 맞는 도구이며 구조상 포트에는 눈이 멀다. VPN 프로필의 트래픽 필터는 두 번째 차원을 더해 프로토콜, 원격 주소, 그리고 원격 포트 를 그 인터페이스를 통과할 수 있는 것과 대조한다. IPsec 규칙은 세 번째 위치에서 작동하며 어떤 흐름이 보호를 요구하고 누구와 인증하는지를 표현한다. 세 가지는 서로 다른 질문에 답하며 어느 것도 다른 것을 대신하지 않는다.

의도한 문장을 쓰는 것에서 시작한다. HTTPS만 허용 은 액세스 문장이고, HTTPS에 IPsec 요구 는 보호 문장이며, 둘은 다른 구성으로 이어진다.

액세스 제한과 보호 요구는 갈라진다

액세스 제한은 인터페이스를 무엇이 사용할 수 있는지 말하며, 한 집합을 허용하고 나머지를 모두 거부함으로써 적용된다. 보호 요구는 어떤 흐름을 암호화하고 인증해야 하는지 말하며, 그에 맞는 보안 연결을 협상함으로써 적용된다. 전자는 목록에 없는 것이 있을 때 차단된 요청을 만들고, 후자는 요구된 보호를 나르거나 아예 설정되지 않는 연결을 만든다. 하나를 다른 것으로 취급하는 것이 정책이 결국 아무것도 차단하지 않거나 아무것도 보호하지 않게 되는 길이다.

실무적 결과는 필터 목록이 닫힌 집합이라는 것이다. 프로필에 목록이 있으면 그 인터페이스에서 어떤 항목과도 일치하지 않는 트래픽은 거부되므로 DNS, 인증 교환, 애플리케이션이 필요로 하는 모든 의존성은 각자의 항목이 필요하다. 거부를 잠재우려고 넓은 규칙 하나를 추가하면 인터페이스 전체가 다시 열리고 제한이 조용히 취소된다. 목록은 요구가 허용하는 만큼 짧고 애플리케이션이 요구하는 만큼 완전해야 한다.

필터 목록을 완전한 집합으로 구성한다

VPNv2 프로필은 경로 목록과 별도로 필터 목록을 가지며, 그 항목은 명령이 아니라 프로필 속성이다. HTTPS 예에서 항목에는 프로토콜 6, 원격 주소, 원격 포트가 필요하며, 사용하는 프로필 형식에 따라 관리 채널이나 ProfileXML로 배포된다. Microsoft의 VPNv2 트래픽 필터 정의 는 한 규칙 안의 조건은 결합되고 별개의 규칙 식별자는 대안으로 작동한다고 밝힌다.

TrafficFilterList/0/Protocol            = 6
TrafficFilterList/0/RemoteAddressRanges = 10.60.4.20/32
TrafficFilterList/0/RemotePortRanges    = 443
RouteList/0/Address                     = 10.60.4.0/24

그 목록의 포트 값은 먼 쪽의 서비스 포트를 설명하며, 로컬 포트는 제한하지 않아야 클라이언트의 임시 원본 포트가 필터링되지 않는다. 이를 반대로 하면 아무것도 일치하지 않는 규칙과 반나절이 걸리는 수수께끼가 남는다.

경로와 필터를 두 개의 별도 결정으로 쓴다. 경로는 이 서버에 터널로 도달한다고 결정하고, 필터는 어떤 서비스가 그 경로를 사용할 수 있는지 결정한다.

두 요청으로 두 결과를 모두 입증한다

허용된 흐름과 거부된 흐름을 따로 시험하고, 빠진 페이지가 아니라 실패를 읽는다. 빠르게 오는 거부는 정책 결정이고, 시간 초과는 경로가 빠졌거나 듣지 않는 서비스일 가능성이 크다. 아래 명령은 두 요청을 모두 실행하고 유효한 규칙을 보여 준다.

Test-NetConnection 10.60.4.20 -Port 443
Test-NetConnection 10.60.4.20 -Port 445
Get-NetIPsecRule -DisplayName *Vpn*
Get-VpnConnection -Name Corp

SMB 시험에서 빠른 거부와 HTTPS 시험의 성공이 필터가 만들어야 했던 결과다. 두 포트 모두 거부되면 목록에 세션에 필요한 무언가가 빠진 것이고, 둘 다 시간 초과되면 필터링이 아니라 라우팅을 가리킨다. 보호된 흐름이 IPsec 출력에서 보안 연결 없음 을 보이면 연결이 성공해도 보호 요구는 충족되지 않는다. 네 출력을 함께 읽어야 하는데, 각각은 따로 다른 이야기를 뒷받침하기 때문이다.

유효한 프로필, 규칙 집합, 상대방 정책을 결과와 함께 기록한다. 오래된 Windows 클라이언트에 관한 과거 호환성 설명은 오늘날 관리 프로필 기능이 특정 게이트웨이에서 무엇을 지원하는지 말해 주지 않는다. 버전별 동작은 가정이 아니라 기록에 속한다.

관련 글