종류 옵션 핵심 아이디어 주요 용도
Local -L 내 문을 통해 으로 나감 내부망 서비스 접속
Remote -R 저쪽 문을 통해 에게 들어옴 내 로컬 서비스를 외부에 공개
Dynamic -D 목적지 제한 없는 통로 생성 보안 웹 서핑, 프록시

Local Port Forwarding (-L)

내 컴퓨터에 특정 문을 하나 만드는 것. 그 문으로 들어가는 모든 데이터는 SSH 터널을 타고 원격 서버로 날아간 뒤, 거기서 최종 목적지로 전달된다.

-L [local port]:[remote ip]:[remote port]

Remote Port Forwarding (-R)

내가 접속한 원격 서버에 문을 하나 만든다. 누군가 그 서버의 문으로 들어오면 SSH 터널을 거꾸로 타고 내 컴퓨터로 들어오게 된다.

# Note, this has to be enabled in the remote host's config, and is typically off by default
-R [remote port]:[dest ip]:[dest port]

Dynamic Port Forwarding (-D)

위의 두 방식은 목적지를 딱 하나로 정해야 한다. 하지만 -D 는 목적지를 정하지 않는다. 일단 내 컴퓨터에 문을 하나 열어두면, 그 문을 통하는 모든 데이터가 SSH 서버를 통해 어디든 갈 수 있다.

-D [port]

예시

1. Local Port Forwarding

<aside>

집에서 회사 내부망 데이터 베이스에 접속하고 싶을 때. 회사 DB 서버는 보안상 외부 인터넷에서 직접 접속이 불가능하다. 오직 회사에 있는 점프 서버(SSH 서버)를 통해서만 들어갈 수 있는 상황이다.

이제 내 컴퓨터에서 localhost:5555로 접속하면, 데이터가 SSH 터널을 타고 work.ssh.com까지 간 뒤, 거기서 다시 10.0.0.50:3306으로 전달된다. 내 컴퓨터 입장에서는 회사 DB가 바로 옆에 있는 것처럼 느껴지게 된다.

</aside>

2. Remote Port Forwarding

<aside>

내 노트북에서 만든 웹사이트를 멀리 있는 친구에게 보여주고 싶을 때. 내 노트북은 카페 Wi-Fi를 쓰고 있어서 외부에서 접속할 수 있는 공인 IP가 없다. 하지만 나에게는 외부에서 접속 가능한 개인 클라우드 서버가 하나 있다.

이제 친구가 브라우저에 http://my-cloud.com:9000을 입력하면, 그 요청은 클라우드 서버를 거쳐 거꾸로 SSH 터널을 타고 내 노트북의 8080포트로 도달하게 된다. 카페 방화벽을 뚫고 내 노트북까지 길이 열린 셈.

</aside>

3. Dynamic Port Forwarding

<aside>

보안이 취약한 공용 Wi-Fi에서 안전하게 웹 서핑하고 싶을 때. 스타벅스 Wi-Fi를 쓰고 있는데, 내 접속 기록을 누가 훔쳐볼까 봐 걱정된다. 이때 내 집에 있는 리눅스 서버를 경유지로 삼아 모든 인터넷 트래픽을 암호화하고 싶다.

내 노트북에 1080 포트로 SOCKS 프록시가 만들어진다. 브라우저 설정에서 프록시 서버를 localhost:1080으로 지정하면, 내가 구글을 가든 네이버를 가든 모든 데이터는 암호화된 터널을 지나 집 서버를 통해서 인터넷으로 나간다. 스타벅스 주인은 내가 뭘 하는지 전혀 알 수 없다.

</aside>