PuTTY 터널링(SSH 포트 포워딩)
고객사의 서버에 ssh 포트는 열려있는데 그 밖의 포트(db, web, ftp 등..) 는 보안상 외부에 막혀 있는 경우가 종종 있습니다.
또는 서버장비를 역할별로(db서버, 웹서버, 메일서버 등..) 여러 대 두고 특정 서버의 ssh 포트 하나만 열어주는 경우도 있습니다.
예를 들어 111.111.111.111 서버의 ssh만 열어주고 같은 네트워크상에 있는 DB서버장비(111.111.111.112)는 막아놓는 경우도 있습니다.
이럴때 필요한 것이 터널링인데, 터널링이란 한 네트워크에서 다른 네트워크의 접속을 거쳐 통신을 할 수 있도록 하는 것을 말합니다.

쉽게 생각하면 문이 두개인 집이 있고 집 안에는 두개의 현관이 있다고 가정합니다.
밖에서 봤을때 각 문을 열고 들어가면 각각의 현관으로 들어갈 수 있습니다.
그러나 A문만 열려져 있고 B문은 닫혀 있을 때 B 현관에 들어가려면 어떻게 해야 할까요?
그렇습니다 A문을 통해 들어가서 안에서 다시 B현관으로 이동하면 됩니다.
이러한 개념이 터널링입니다.

 

 

 

 

터널링은 언제 사용하는가?
예를 들어보겠습니다.
신규 개발 프로젝트에 착수하여 개발을 진행하기 위해 고객이 열어준 ssh(22) 포트를 통해 서버에 접속했습니다.
앞으로 개발을 진행할 서버 주소는 1.1.1.1입니다.

그리고 이번에는 dbms 접속을 위해 db 클라이언트 프로그램으로 1.1.1.1:3306으로 접속을 시도했는데 3306는 고객이 보안상 열어줄 수 없다며 막아놓았고
터널링으로 접속할 것을 요구했습니다.

또한 이번 프로젝트에는 메일 시스템이 연동되는데 메일서버의 경우 서버 장비가 별도의 장비이고 아이피는 1.1.1.2입니다.
메일 서버장비는 1.1.1.1 서버와 동일한 네트워크에 있고 내부주소는 192.168.0.2입니다.

역시 테스트를 위해 1.1.1.2:25로 접근했지만 접속이 막혀있습니다.

이런 경우 개발자 입장에서는 접근도 안되는 시스템들을 가지고 테스트 없이 개발을 해야하는 상황입니다.

종합해보면 다음과 같습니다.
1. 개발 할 어플리케이션 서버는 1.1.1.1 서버에 띄워야 한다.
2. 1.1.1.1서버의 경우 22번 포트는 열어져 있어 putty는 문제없이 사용 가능하지만 db(3306)의 경우 외부에서 접근이 안된다.
3. 어플리케이션 개발을 위해서는 1.1.1.2서버의 메일서버 1.1.1.2:25 도 접근이 가능해야 하는데 1.1.1.2 리눅스 서버 자체에 접근이 불가능하다.
4. 1.1.1.1 서버와 1.1.1.2는 고객사의 같은 네트워크에 있다.
5. 결론은 1.1.1.1의 22번 포트가 유일하게 접근할 수 있는 통로이다.
6. 나머지 포트와 IP는 접근이 안되므로 JDBC DB 연결 테스트 및 메일 연결 테스트가 안되어 개발 진행이 어렵다.


현업에서 개발하다보면 정말 흔한 일이고 VPN같은 프로그램도 이용해야 할 일이 많다는 것을 아실겁니다.

그러나 우리에게는 22번이라는 통로가 있기때문에 이 통로를 경유해 다른 통로들도 들어갈 수 있습니다.
그리고 이것을 바로 터널링이라고 합니다.

ssh 포트 22번이 열려있는 경우를 예로 들자면 22번 포트를 통로로 두고 내부의 다른 포트들과 통로를 연결해주는 터널 역할을 해주는 것입니다.

 


putty로 터널링 하기
putty 이외에 다른 리눅스 원격 클라이언트들이 많은데 터널링의 개념만 알면 설정방법이 달라도 개념은 같으니 별 다른 어려움이 없을 것입니다.


1. 먼저 터널링을 하기 위해서는 외부(나) 와 서버를 연결해주기 위한 통로를 하나 만들어야 하므로 해당 서버에 접속 후 로그인 합니다.
여기서는 1.1.1.1을 22번 SSH로 접속 한 후 root로 로그인하는 것입니다.
(포트가 열려있다고 해도 그 문에 들어가야 합니다. 즉 root로 로그인이 필요합니다.)

2. 접속 후 putty 윈도우 창에서 마우스 우클릭 - Change Settings.. -  Connection - SSH - Tunnels 항목을 클릭

 

 

3. 터널링 설정을 해줍니다(중계 터널을 만들어 주기 위해 설정하는 것).

 

 

Destination에 터널링할 서버:연결하고 싶은 대상 포트 번호
Source port에 내가 로컬에서 사용할 포트번호

예를들어 db 서버를 터널링 해주고 싶은 경우 1.1.1.1:3306을 Destination에 입력하고 로컬에서 사용할 포트(Source port)로 3307 입력합니다. 

 

3307을 입력하는 이유는 내 컴퓨터에 개발용 mysql 서비스가 띄어져 있을 경우 포트가 겹칠 수 있기 때문입니다.
1.1.1.2의 메일서버로 연결하고 싶은 경우에도 똑같습니다.모두 입력했으면 Add를 눌러 등록 후 Apply 를 눌러 적용해줍니다.

 

이렇게 되면 터널을 통해 마치 내 1.1.1.1의 3306 db가 내 로컬 pc에 연결되어있는것처럼 사용할 수 있습니다.
이제 로컬에서 고객사 db에 jdbc를 테스트 하거나 db 클라이언트로 원격 접속할 때에는 localhost:3307을 사용하면 됩니다.

 

 

블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,