ssh 를 이용하여 터널링을 하는 방법은 Socks Proxy, TCP 포워딩, X11 포워딩, TUN드라이버를 이용한 VPN등등 여러가지 방법이 있는데, 여기서는 제가 자주 애용하는 Scosks Proxy 설정, 활용 하는 방법을 소개해 보려고 합니다. 주로 MacOSX 위주로 설명하겠지만, 리눅스나 기타 UNIX기반의 OS들 역시 특별히 다르지는 않습니다.제 경우에는 집에서 회사로 접속하기 위해서 VPN을 이용하거나 SSH게이트웨이 서버를 이용해야 하는데,회사 VPN 클라이언트가 64bit OS를 제대로 지원하지 않는 관계로 VPN보다는 SSH Socks를 열어서 주로 작업을 하곤 합니다. 이와 반대로, 회사내 내트웍에서 외부로 나가는 패킷이 제한된 경우에도 간단하게 SSH를 활용 할 수 있겠습니다.
Socks Port열기
터미널을 실행한 후 쉘에서 다음과 같이 터널링을 원하는 서버로 리모트 접속을 합니다.
ssh -D 1080 [TARGET HOST]
위와 같이 하면 [TARGET HOST] 서버로 리모트 접속을 합니다. 평소에 ssh를 상용 하는 것과 아무 차이가 없어 보이지만, "-D 1080" 옵션은 127.0.0.1(localhost) 주소의 1080포트에 socks 서버를 띄우라는 것을 의미합니다. (socks는 socks v4, v5 두가지를 동시에 지원합니다.) 좀 허무해 보이지만 이 명령 하나로 모든 준비는 끝입니다. (참고로 ssh로 접속한 서버에서 아무 작업도 할 계획이 없을 경우엔 "-N" 옵션을 추가해 주면 서버에 접속만 유지하게 됩니다.)
Client 어플리케이션
socks proxy를 이용 하기 위해서는, 어플리케이션들이 지원을 해야 하는데, 대부분의 웹브라우저들은 socks를 지원을 하고 있습니다. 아래는 각종 어플리케이션에서 socks proxy를 설정하는 이미지들입니다.
Socks Proxy를 통해 리모트쉘 접속하기
ssh는 위처럼 socks 서버기능을 해주기도 하지만, 반대로 socks proxy를 통해서 외부 서버로 접속 할 수 도 있습니다. 이를 위해서는 ProxyCommand를 이용 해야하는데 .ssh/config 파일에 다음과 같이 적어 주면 지정한 socks 서버를 이용해서 원하는 서버로 접속을 하게 됩니다.
Host *
ProxyCommand /usr/bin/nc -x localhost:1080 %h %p
위의 예제 처럼 설정하면 ssh 사용시 모든 리모트 호스트들에 대해서 localhost 의 1080을 거쳐서 접속하게 합니다.
자연스러움이란 늘 당신 곁에 있는 강력한 힘이다.