SSH 로컬 포워드가 TCP OpenVPN 세션을 전달하는 방식
로컬 포트 하나, 인증된 관계 둘, 전송 계층 셋. SSH 포워드가 무엇을 옮기고 루프와 인증서 검사가 어디에서 여전히 적용되는지.
여기에는 세 개의 전송이 겹쳐 있고 각자 고유한 프레이밍을 가진다. VPN 페이로드는 TLS 세션 안에서 이동하고, 그 TLS 세션은 루프백 포트로 가는 TCP 연결 안에서 이동하며, 그 연결의 바이트는 SSH 안에서 릴레이 호스트로 이동하는데, 릴레이 호스트가 VPN 리스너로 가는 실제 TCP 연결을 연다. 이 배치가 바꾸지 않는 것은 OpenVPN 이 인증하는 대상이며, 이 배치가 UDP 리스너를 TCP로 도달 가능하게 만들지도 않는다. 나머지는 바이트 경로에 대한 설명으로 읽고, 네트워크 통제를 우회하는 방법으로 읽지 말라.
로컬 포워드가 실제로 옮기는 것
SSH 클라이언트는 로컬 포트에서 수신한다. 로컬 프로세스가 연결하면 클라이언트는 바이트를 암호화된 채널에 담고, 서버 쪽은 포워드 요청에 적힌 목적지로 새 TCP 연결을 연다.
그 목적지는 릴레이가 해석하며, 당신의 기계가 아니며, 그래서 원격 네트워크 내부에만 존재하는 이름도 여전히 동작한다. 이 말은 릴레이가 VPN 리스너에 도달할 수 있어야 하고 그쪽으로 돌아가는 경로를 가져야 한다는 뜻이기도 하다. 노트북에서 해석되는 이름은 릴레이가 무엇을 볼 수 있는지에 대해 아무것도 말해 주지 않는다.
SSH 세션을 시작한다고 해서 릴레이에 도달 가능하고 인증되었다는 사실만 증명된다. 다음 리스너가 살아 있는지, 릴레이와 리스너 사이의 방화벽이 연결을 허용하는지, VPN이 프로필을 받아들일지는 말해 주지 않는다.
클라이언트를 로컬 리스너로 향하게 하라
명시된 예시에서 릴레이는 gw.internal.example:443 의 TCP 리스너에 도달할 수 있고, 높은 로컬 포트는 그 경로를 이 기계에만 노출한다.
ssh -N -L 127.0.0.1:24011:gw.internal.example:443 [email protected]OpenSSH 매뉴얼 은 로컬 포워드를 TCP 연결을 로컬에서 받아들이고 이후 연결을 원격 쪽에서 여는 것으로 설명한다. 네트워크에서 도달 가능한 포워드는 당신의 이름이 붙은 열린 릴레이이기 때문에 리스너를 모든 인터페이스가 아니라 루프백에 묶어라. 와일드카드 바인딩은 공용 기계의 다른 로컬 계정에도 포트를 노출한다.
그다음 VPN 클라이언트를 TCP 모드로 두고 127.0.0.1:24011 를 가리키게 하라. 프로필이 UDP를 쓰면 포워드는 바이트 스트림을 나르며 데이터그램 경로가 그 안에 없으므로 이 설계는 도울 수 없다.
두 인증을 분리해 두라
SSH가 릴레이 호스트를 인증한다. OpenVPN은 여전히 VPN 피어를 인증하며, 루프백 목적지가 그 요구를 바꾸지 않는다. 소켓이 이제 localhost를 가리킨다고 인증서 검사를 끄는 것은 이 설계에서 가장 나쁜 지름길이다. 그것은 전송 배치를 신뢰 배치로 바꾸며, 두 번째에 대해서는 아무도 승인하지 않았다.
프로필의 신뢰 앵커, 서버 역할 검사, 이름 검증을 그대로 유지하라. 클라이언트가 서버 이름을 연결한 주소와 비교한다면 루프백은 검사를 끄는 대신 명시적 이름 설정이 필요할 수 있으며, 어떤 필드가 비교되는지는 프로필 문서에서 확인해야 한다.
릴레이는 신뢰 이야기의 두 번째 당사자이며, 그 관리자는 연결 메타데이터를 볼 수 있고 구성이 바뀌면 포워드를 다른 곳으로 돌릴 수 있다. 이 배치는 릴레이와 VPN 서비스 소유자 모두의 승인이 필요하며, 오늘 그것이 필요한 사람만의 승인으로는 부족하다.
터널 아래에 루프를 만들지 말라
VPN이 경로를 설치한 뒤에도 그것을 나르는 SSH 연결에는 터널을 지나지 않는 릴레이 경로가 필요하다. 기본 경로가 VPN으로 옮겨가고 릴레이가 같은 터널로만 도달 가능하면 전송이 무너지고 VPN도 함께 간다. 장애는 라우팅 실수가 아니라 끊긴 터널처럼 보이며, 그래서 오진된다.
보통의 수정은 터널이 올라오기 전에 물리 인터페이스에 고정한 릴레이 주소로의 호스트 경로와, 재연결 후에도 경로가 살아 있는지 확인하는 것이다. 순서가 맞았다고 가정하지 말고 릴레이 주소에 대한 경로 조회로 검증하라.
이제 순서가 있는 전송이 둘이고 유지할 종단점이 하나 더 있기 때문에 이 적층은 직접 연결보다 느리고 더 깨지기 쉽다고 예상하라. 이것은 네트워크 경계를 넘는 방법이지 성능 기법이 아니다.
끝나면 리스너를 닫아라
터널이 더 이상 필요 없으면 SSH 세션을 멈추고 로컬 포트가 해제되었는지 확인하라. 잊힌 포워드는 공유될 수 있는 기계에 인증된 경로를 열어 둔다.
관대한 구성은 침해된 어떤 계정이든 일반적인 발판으로 바꾸므로 릴레이의 허용된 포워드 목적지도 검토하라. 포트, 릴레이, 목적지를 함께 기록해 다음 사람이 포워드의 목적과 승인 여부를 알 수 있게 하라.