2007년 4월 1일 일요일

ssh tunneling

ssh는 다양한 기능이 많은데, 그중에 하나가 tunneling 기능이다. 여기서 설명할 상황은 다음과 같다.

notebook 한대가 있는데, 이것은 사무실과 집 등 다양한 장소에서 사용이 가능하다. 그런데, 집에서 회사의 특정 server에 접속하려고 하는데, 이 server는 firewall 설정으로 인해 외부로 부터의 접속을 차단하고 있어, 접속할 수가 없다.
하지만, 나에게는 회사에 ssh 접속이 가능한 linux가 설치된 desktop이 있다.
이제, notebook에서 desktop을 거쳐 회사의 server에 ssh로 접속하는 방법에 대해 알아 보도록 하자.

간단히 요약하면 과정은 다음과 같다.
  • desktop에서 다음 명령을 실행하고, 접속을 계속 유지시킨다. (즉, 터미널 창을 닫지 말고 유지해야 한다.)
$ ssh -R 5000:server:22 desktop_user@desktop

이것은 desktop의 port 5000으로부터 수신되는 모든 packet을 server의 port 22로 전달하는 일을 하는 ssh 프로그램을 기동하는 것이다.
  • notebook에서 다음 명령을 실행하고, 접속을 계속 유지시킨다.
$ ssh -L 5000:server:22 desktop_user@desktop

이것은 notebook과 desktop 사이의 tunneling을 유지하는 ssh 프로그램을 기동하는 것이다. 이제 notebook의 port 5000으로 입력되는 모든 packet이 desktop port 5000으로 전달 되는 것과 같은 효과를 가진다.
이 방법은 5000 포트를 이용하여 desktop에 접속할 수 없는 경우에, ssh 연결을 통해 5000 포트를 이용하는 것과 같은 효과를 보인다.
  • 다음 명령을 이용하여 서버에 접속한다.
$ ssh server_user@localhost -p 5000

이제 localhost의 포트 5000에 접속을 하면, ssh에 의해 packet이 desktop에 전달 되고, 다시 desktop에서 server로 전달된다.

사실, 항상 ssh -L 옵션에 해당하는 명령을 실행하고 접속을 하기 때문에, 이 명령의 역할이 이 글에 나열된 것과 동일한지 확인치 못했다.

이것저것 확인하기 귀찮으면, 이 방법을 그대로 따라해도 된다. 또한, 5000 이라는 포트 번호만 바꿔 주면, MSN등의 다른 서비스에 대한 터널링도 가능하다. 이러한 터널링은 외부 접속이 차단된 어떤 단체 내부에서 차단된 서비스를 이용하고자 할때 외부에 서버를 설치하고, 터널링을 연결하는 경우에도 사용할 수 있다.

ssh의 경우 port 22번을 기본으로 사용하지만, 외부 서버의 설정을 바꾸면 80 포트와 같이 http를 위한 포트를 ssh로 사용할 수 있기 때문에, 거의 어떠한 경우에도 적용이 가능한 방법이다.

댓글 없음: