SSH Portforwarding
(SSH Tunnelling
) 은 ssh 연결을 기반으로 대상 서버의 특정 port 를 외부에 공개할 때 사용한다.
3가지 옵션이 있는데, 그 중 local portforwarding
, remote portforwarding
에 대해 알아보자.
두 옵션의 차이는 간단히 말해서 최종 목적지까지 터널링을 구성하는 작업의 실행 주체
에 따라 다르다.
Local Portforwarding
1 | ssh -L {접근할 port}:{목적지 ip}:{목적지 port} {목적지 ip:port에 접근 가능한 host ip} |
e.g.
- 목적지 서버(192.168.200.200)의 HTTP(:80) 가 외부에서 접근 불가하며
- 목적지 서버에 접근 권한이 있는 host(192.168.10.10) 와의 ssh 연결은 가능할 때
- 로컬의 8080 포트와 연결하고 싶다면?
- 아래 커맨드를 실행한다.
ssh -L 8080:192.168.200.200:80 192.168.10.10 - 로컬에서 localhost:8080 로 접근하면 192.168.200.200:80 으로 연결된다.
(마지막 파라메터는 꼭 목적지 ip 와 동일한 것이 아니고, 목적지 ip:port 에 접근이 가능한 host 의 ip 일 뿐이다.)
Remote Portforwarding
1 | ssh -R {접근할 port}:{목적지 ip}:{목적지 port} {목적지 ip:port에 접근할 수 있도록 해줄 host ip} |
e.g.
목적지 서버(192.168.200.200)의 HTTP(:80) 가 외부에서 접근 불가하며
목적지 서버에 접근하고자 하는 client 에게 (192.168.100.100) 8080 포트를 열어주려면?
(client 또한 sshd 가 실행되고 있어야 한다)아래 커맨드를 실행한다.
ssh -R 8080:192.168.200.200:80 192.168.100.100
둘의 차이점은 Local Portforwarding
은 대상 ip:port 에 접근 권한이 없는 호스트가 목적지 서버와 연결하기 위해 사용, Remote Portforwarding
은 접근 권한을 가진 호스트가 접근하고자 하는 또 다른 호스트에게 접근할 수 있도록 할 때 사용한다는 것이다.