통신사 NAT와 잠긴 사무실 라우터 뒤의 두 엔드포인트에는 전달할 인바운드 포트가 없는데도 반사적으로 포트를 요청하게 됩니다. 더 나은 질문은 어느 쪽이 밖으로 연결할 수 있으며 어떤 접근 가능한 서비스가 트래픽을 실어 나를 수 있느냐입니다. 네 가지 설계는 그 질문에 서로 다르게 답하며, 경로가 막히면 서로 다른 방식으로 실패합니다. 이들 중에서 고르는 일은 프로토콜 이름이 아니라 보장의 비교입니다.

네 가지 설계, 네 가지 다른 약속

아래 표는 짧은 판본입니다. 가운데 열은 시험해 볼 수 있는 약속으로, 오른쪽 열은 아무도 하지 않은 약속으로 읽으십시오.

DesignWho initiatesPromise you getPromise you do not get
Routed VPN hubBoth ends, outbound to the hubA routed path to permitted prefixesAccess to services no policy allows
Peer traversal with ICEBoth peers to a rendezvous serviceA path tested between the two peersA direct path through every NAT
TURN relayClient outbound to a relayTransport that survives symmetric NATPeer discovery or a usable directory
Application brokerWorkstation outbound to a brokerOne audited application sessionSubnet-wide reachability

어느 행이 적용되는지는 선호가 아니라 작업에 달려 있습니다. 원격 데스크톱 세션 하나, 관리용 셸 하나, 그리고 사설 서브넷 전체에 대한 접근 은 우연히 같은 기계와 관련되더라도 같은 진입점을 필요로 하지 않는 세 가지 요구 사항입니다.

허브는 누가 밖으로 연결하는지를 바꿀 뿐, 무엇이 허용되는지는 바꾸지 않습니다

라우팅 허브 설계에서 원격 노트북과 워크스테이션, 또는 그 앞의 사이트 게이트웨이는 각각 양쪽이 도달할 수 있는 서비스로 나가는 터널을 엽니다. 워크스테이션의 라우터에서는 아무것도 요청되지 않은 연결을 받지 않으며, 바로 그렇기 때문에 이 설계는 NAT를 견디고 사이트에 고정 주소가 없어도 작동합니다. 그다음 허브는 자체 정책에 따라 두 내부 주소 사이의 트래픽을 라우팅합니다.

비용은 허브가 존재해야 하고, 양쪽에서 도달할 수 있어야 하며, 누군가 운영해야 한다는 점입니다. 아웃바운드 필터링이 전송을 허용해야 하며, 이를 차단하는 네트워크는 포트 포워딩이 필요 없었더라도 이 설계를 무너뜨립니다.

미묘한 부분은 도달 가능성과 권한 부여가 서로 다른 곳에서 내려지는 별개의 결정이라는 점입니다. 어떤 프리픽스로 가는 경로는 그 ID가 워크스테이션의 어떤 서비스를 쓸 수 있는지 말해 주지 않고, 터널을 허용하는 방화벽 규칙도 그 계정이 로그인할 수 있는지 말해 주지 않습니다. 둘 다 구성하고 둘 다 시험하며, 권한 부여 결정은 라우팅 테이블이 아니라 리소스를 소유한 시스템 곁에 두십시오.

트래버설은 두 스택이 모두 구현할 때만 작동합니다

피어 간 트래버설은 특정 시스템의 능력이지 VPN을 개선하는 설정이 아닙니다. Interactive Connectivity Establishment는 로컬 인터페이스의 호스트 후보, NAT가 드러내는 것으로 만든 서버 반사 후보, 릴레이에 할당된 릴레이 후보 등 여러 후보 주소를 모으고 하나가 작동할 때까지 짝을 시험합니다. 사설 주소만으로는, 상대편이 그곳으로 라우팅할 수 없기 때문에 경로가 아닙니다.

릴레이되는 경우는 버리기 전에 이해할 가치가 있습니다. RFC 8656 은 TURN을, 클라이언트가 서버에 릴레이된 전송 주소를 요청하고 서버가 그 클라이언트와 그 피어 사이에서 트래픽을 전달하는 프로토콜로 설명합니다. 따라서 데이터를 실어 나르는 것은 릴레이이며, 단지 엔드포인트가 만나도록 돕는 디렉터리와는 본질적으로 다릅니다. 릴레이 주소를 상대와 교환하는 것은 애플리케이션이 해야 하는 조정 단계입니다.

약속할 수 없는 것은 직접 경로이며, 대칭 NAT와 일부 기업 방화벽은 홀 펀칭을 무력화하고, 그럴 때 시스템은 릴레이로 물러서거나 실패합니다. 또한 번역된 두 엔드포인트가 결코 대화할 수 없다고 결론 내릴 수도 없습니다. 릴레이 폴백을 갖춘 지원 스택이 존재하는 것은 바로 그들이 자주 대화할 수 있기 때문입니다. 가용성과 직접성 중 무엇이 더 중요한지 정한 뒤, 행복한 경우를 가정하는 대신 배포가 실제로 어느 경로를 골랐는지 확인하십시오.

브로커는 네트워크보다 좁습니다

요구 사항이 애플리케이션 하나일 때는 앱 브로커나 워크스테이션이 시작한 역방향 연결이 가장 작은 답일 수 있습니다. 워크스테이션은 브로커로 밖으로 연결하고, 브로커는 원격 사용자를 인증하며, 오직 그 애플리케이션 세션만 전달됩니다. 워크스테이션의 서브넷으로 가는 경로는 만들어지지 않으므로 원격 세션이 침해되어도 옆에 있는 모든 기기에 이르는 경로를 물려받지 않습니다.

그 좁음에는, 추가 애플리케이션마다 자체 통합이 필요하고, 애플리케이션이 로컬 네트워크에 대해 가정하는 것, 예를 들어 가까운 서버에서 여는 파일 공유가 도달하지 못할 수 있다는 대가가 있습니다. 브로커는 정책과 로깅도 한곳에 모으는데, 그것은 그곳이 장애가 되기 전까지는 유용합니다.

신뢰 경계를 비교한 뒤 경로를 시험하십시오

터널을 종료하는 허브는 자신이 라우팅하는 트래픽을 읽을 수 있습니다. 애플리케이션이 종단 간 암호화를 하면 릴레이는 독립적으로 보호된 교환을 실어 나를 수 있고, 브로커는 보통 자신이 제시하는 세션을 종료합니다. 둘 다 암호화되어 있다는 이유로 두 설계가 동등하다고 결정하기 전에 보호가 실제로 어디서 끝나는지 확립하십시오.

위의 모든 설계가 그것에 의존하므로, 그다음 워크스테이션이 바깥으로 실제 어디까지 도달하는지 확인하십시오. 사용하려는 호스트 이름으로 바꾸어 이것을 워크스테이션에서 실행하십시오.

ss -lntup
nc -vz hub.example.com 443
curl -sS -o /dev/null -w "%{http_code}\n" https://hub.example.com

허용된 ID 아래에서 의도한 원격 작업이 성공하고, 승인되지 않은 ID가 거부되며, 직접 또는 릴레이 경로를 쓸 수 없을 때의 동작이 알려져 문서화된 뒤에만 설계를 받아들이십시오. 사무실에서 LAN으로 시작한 세션은 원격 접근이 의존하는 무엇도 시험하지 않으므로, 재연결과 워크스테이션의 정상 시작 컨텍스트도 포함하십시오.

관련 글