OpenVPN 포트 하나, 서비스 셋: 내부 포트가 중요한 이유
터널 하나, 서비스 셋, 공개 포트 하나. 바깥 VPN 리스너와 안쪽 애플리케이션 포트를 분리한 뒤, 각 내부 권한을 따로 시험하십시오.
SSH 세션 하나, 웹 앱 하나, 이름 조회 하나가 포트를 두고 다투지 않고 하나의 VPN 연결을 공유할 수 있습니다. 클라이언트는 게이트웨이로 암호화된 흐름 하나를 만들고, 모든 애플리케이션 대화는 그 안에서 이동합니다. 밖에서는 터널 자체의 전송과 포트만 보입니다. 안에서는 각 서비스가 자기 포트를 유지하며 여전히 자기 권한이 필요합니다.
바깥 흐름이 나르는 것과 감추는 것
클라이언트는 패킷이 장비를 떠나기 전에 터널의 전송으로 감쌉니다. 그 바깥 흐름에는 목적지 포트가 하나 있고, VPN을 구성할 때 고정됩니다. 감싼 안에서 각 원래 패킷은 대상 서비스의 주소와 포트를 유지합니다. 게이트웨이는 포장을 벗기고 안쪽 헤더로 라우팅하므로, 목적지에는 네트워크에서 도착한 평범한 클라이언트가 보입니다.
따라서 WAN 인터페이스의 캡처에는 대화가 하나만 보이고 셋이 아닙니다. 안쪽 포트는 캡슐화를 해제한 뒤에야 나타납니다. 그래서 방화벽 구멍 하나가 SSH, HTTPS, DNS를 동시에 나를 수 있습니다.
# WAN side: one outer tuple, whatever the inner services are
tcpdump -ni wan0 'udp port 443'
# tunnel side: the inner tuples appear after decapsulation
tcpdump -ni tun0
TUN/TAP 문서 는 라우팅된 TUN 장치가 커널과 사용자 공간 프로세스 사이에서 IP 패킷을 넘기는 인계를 다룹니다. 이 인계가 안쪽 헤더를 게이트웨이의 라우팅 및 방화벽 코드에 보이게 합니다. 또한 바깥 포트가 어떤 서비스가 허용되는지에 대해 아무 말도 하지 않는 이유를 설명합니다.
NAT 포워딩은 리스너의 것이지 애플리케이션의 것이 아닙니다
IPv4 NAT 뒤의 자체 호스팅 게이트웨이에는 인바운드 변환 하나가 필요합니다. 공인 주소와 포트가 VPN 리스너로 매핑됩니다. 터널 사용자가 도달한다는 이유만으로 SSH, HTTPS, DNS에 규칙이 필요한 것은 아닙니다. 그 포트를 공개하면 터널이 이미 보호하는 서비스가 노출됩니다. 포워딩 규칙은 리스너의 도달 가능성을 설명할 뿐, 내부의 무언가에 대한 허가가 아닙니다.
반대도 성립합니다. 터널 포트를 열어도 다른 것은 노출되지 않으므로, 터널로만 닿는 서비스는 공개 표면을 닫힌 채로 유지합니다. 이 분리가 보통 서비스를 처음부터 비공개로 두는 이유입니다.
접근이 실제로 결정되는 곳은 내부 정책입니다
암호화는 경로를 보호하지만 목적지를 승인하지는 않습니다. 클라이언트 경로는 어떤 접두사가 터널로 들어갈지 고르고, 게이트웨이의 포워딩 정책은 패킷이 터널을 나갈 수 있는지 결정하며, 목적지의 방화벽과 로그인이 서비스가 응답하는지 결정합니다. DNS가 가장 분명한 사례입니다. 질의를 나른다고 해서 리졸버가 당신의 클라이언트 풀에서 온 질의를 받아들이는 것은 아닙니다. 각 계층은 독립적으로 거절할 수 있습니다.
터널을 통해 각 서비스를 따로 시험하십시오. 조회가 성공해도 웹 포트에 대해 아무것도 알 수 없고, 웹 요청이 성공해도 SSH에 대해 아무것도 알 수 없습니다.
dig @10.40.0.53 app.corp.example
nc -vz 10.40.0.10 8443
ssh -p 2222 [email protected]
터널이 올라와 있는데 모두 실패하면 먼저 클라이언트의 라우팅 테이블을 읽으십시오. 한 서비스만 실패하고 나머지가 동작하면 결함은 그 목적지에 있습니다. 이 두 관찰은 서로 다른 책임자를 가리키며, 둘을 섞으면 시간을 낭비합니다.
WireGuard도 같은 선을 긋습니다
WireGuard는 바깥 리스너를 ListenPort 라는 이름으로 부르고, 안쪽 애플리케이션은 필요한 아무 서비스 포트나 사용합니다. AllowedIPs 는 라우팅된 접두사의 집합이지 허용된 서비스 포트 목록이 아닙니다. 이를 포트 허용 목록으로 읽으면 터널이 하는 일과 맞지 않는 규칙이 생깁니다. 이름은 다르지만 계층은 같습니다.
서비스가 엔드포인트 자체에서 실행되면 로컬 입력 정책에서, 그 엔드포인트 뒤에 있으면 포워딩 정책에서 허용하십시오. 이 구분이 어떤 규칙 집합이 패킷을 보는지 결정합니다.
일반적인 형태는 하나의 바깥 전송과 많은 안쪽 대화입니다. 여러 번의 바깥 교환이나 다른 IP 프로토콜이 필요한 제품은 단일 공개 포트 패턴이 이 설계를 설명할 뿐 모든 VPN을 설명하지는 않는다는 점을 일깨워 줍니다.