ETC

SSH Portforwarding

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 은 접근 권한을 가진 호스트가 접근하고자 하는 또 다른 호스트에게 접근할 수 있도록 할 때 사용한다는 것이다.