1. sshd_config
    AllowTCPForwarding yes 를 확인
2. putty
    접속 -> SSH -> 터널링
     포워드될 포트 추가
      원 포트 {s}    [App에서 접근할 포트]
      대상 {i}         [localhost]
     동적(Y),자동 체크후 추가
   후 SSH 서버 접속
3. Browser
    IE
     도구 -> 인터넷옵션 -> 연결 -> LAN 설정 -> 프록시서버
     사용자 LAN에 프록시 서버 사용  체크 후 고급
      Socks(C) [localhost] [App에서 접근할 포트]
    Firefox
     도구 -> 설정 -> 고급 -> 네트워크 -> 설정
      SOCKS 호스트 [localhost] [App에서 접근할 포트]

참고
http://www.ibm.com/developerworks/kr/library/au-tunnelingssh/index.html
http://achiven.tistory.com/archive/20071010
http://nongauss.tistory.com/12
http://swbae.egloos.com/1137243
http://www.superuser.co.kr/home/superuserboard/view.html?code=q_net&id=607&start=0&position=

구글캐시
http://72.14.235.104/search?q=cache:dnyXS-7TuUgJ:stania.pe.kr/wiki/Linux/PuttyTunneling+ssh+%ED%84%B0%EB%84%90%EB%A7%81&hl=ko&ct=clnk&cd=31&gl=kr&inlang=ko


PuTTY 를 사용하여, 특정 사설 네트워크의 네트웍 자원에 쉽게 접근할 수 있는 방법을 소개한다. 전제조건으로, 당연히, 그 사설 네트워크 안의 리눅스 서버에 SSH 를 통해 접근할 수 있어야한다.

좀 더 실무적인 예를 들어보자.

S 대학 U 모 컴퓨터 관련 동아리에서는 U 모 서버가 동아리의 메인 리눅스 서버이자, 동아리 내 사설 네트웍의 방화벽/게이트웨이 역할을 한다. 나는 이 동아리의 일원으로서, U 모 서버의 ID 를 가지고 있다고 하자. U 모 동아리의 사설 네트워크 안의 V 모 서버에는 윈도우즈가 깔려 있으며, 이 컴퓨터를 터미널 서버로 (mstsc) 사용할 수 있도록 설정되어있다. U 모 서버에서, 포트 포워딩을 지원(?)하지 않는다고 가정하고, 집에서 V 모 서버로 mstsc 접속을 해보자.

아래의 설정은, 0.58 버전에서는 접속 후에도 언제든지 설정할 수 있지만, 0.56 에서는 초기 접속시에만 설정할 수 있었다.
  1. Connection - SSH - Tunnels 섹션의 Port Forwarding 에 적절한 값을 입력해야한다.
  2. Add new forwarded port: 부분을 잘 살펴본다. Source port 는 현재 내 시스템에 생길 입구 포트를 의미하며, Destination 이 앞서 지정한 포트로 접속했을 때의 출구를 의미한다. Source port 에 51234 정도를 입력해주고 (잘 안 쓰는 포트), Destination port 에 192.168.57.3:3389 를 입력해주자(여기서 사용된 IP 는 V 모 서버의 사설 네트워크용 아이피이다). 설정 후 Add 버튼을 눌러 리스트에 추가하는 걸 잊지 말자.
  3. 평소대로 U 모 서버에 접속, 로그인한다. PuTTY 는 계속 켜져있어야한다.
  4. mstsc 프로그램을 켜고 localhost:51234 포트로 접속한다. V 모 서버의 3389 포트로 접근한 것과 같은 효과가 난다.

이 방법의 장점은 다음과 같다.
  • 관리자 권한이 필요한 거창한 방화벽 설정 없이도 손쉽게 포트를 포워딩 할 수 있다.
  • 네트웍을 흐르는 정보가 SSH 위에서 돌아다니므로, 안전하게 데이터를 주고받을 수 있다.
단점도 있다.
  • SSH 암호화를 거치는 과정에서 속도가 약간 떨어질 수 있다.
  • 그래도 조금은 귀찮다.

때때로 매우 유용한 기능이라고 할 수 있다. 사용 방법이 무궁무진할 듯.

그 밖의 활용방법 #

방화벽 뚫기 삽질기 #

PuTTY 의 터널링중 Remote 기능을 사용해, 방화벽 안의 사용자가 돌리는 서버에, 다른 서버를 경유하여 접속할 수 있다.

요약 #

임의의 사용자는, 리눅스 서버인 서버 T를 통해, 실제로 윈도우 기반 웹서버 프로그램이 작동중인 컴퓨터 A 로 접속하게 된다. 컴퓨터 A 와 서버 T 사이엔 SSH 를 사용한 터널이 구축된다.

사전 요구사항 #

  • 서버 T 의 sshd 에서 GatewayPorts 설정이 yes 로 되어 있어야한다. (즉 서버 T 의 root 권한으로 sshd 의 설정을 바꿔줄 필요가 있다. 자세한 방법은 아래에서.)

터널링 설정 #

  • Source port : 서버 T 에서 연결을 받아들일(Listening) 포트를 설정한다. 여기서는 58080 으로 설정한다고 하자.
  • Destination port : Source Port 로 들어온 연결이 어느 쪽으로 흐를지 출구를 설정한다. SSH Client 가 동작하는 컴퓨터에서 접근 가능한 컴퓨터라면 어디든지 OK. 여기서는 컴퓨터 A 에서 웹서버가 돈다고 가정하고 있으므로, 127.0.0.1:80 이 되겠다.
  • Local/Remote/Dynamic 중 Remote 를 설정한다.

    위의 설정을 잘 끝낸 후 접속을 성공시키고 netstat 등을 실행시켜보면, 58080 포트(Source Port 에서 지정한 포트) 에서 연결을 받아들이고 있음을 확인할 수 있다. telnet 이나 웹브라우저(w3m, lynx)등을 사용하여 localhost:58080 으로 접속해보면 성공적으로 컴퓨터 A 의 웹서버에 접속할 수 있을 것이다.

    여기서 문제는, 대부분의 서버에서는 이 58080 포트를 통해 다른 컴퓨터들은 접속할 수 없다는 것이다. netstat -an 등을 수행해본 결과를 유심히 보면 알겠지만, listening 포트가 127.0.0.1:58080 등으로, localhost 에서만 접속할 수 있는 포트로 binding 되어있기 때문이다. 다른 컴퓨터들이 서버 T 의 58080 포트를 통해 컴퓨터 A 에 접근하기 위해선, 0.0.0.0:58080 에 bind 되어있어야한다. 이는 sshd 의 설정을 바꿔서 해결할 수 있다.

sshd 설정을 변경하여 다른 컴퓨터로부터의 접속 받아들이기 #

sshd 설정중 GatewayPorts 옵션은 기본값이 'no' 이다. 따라서 SSH 터널링을 사용해 만들어진 포트는, 기본적으로 다른 컴퓨터에서 접근할 수 없다. 하지만 저 옵션을 'yes' 로 만들어주면, SSH 터널링을 통해 만들어진 포트가 0.0.0.0:58080 에 bind 되면서 임의의 다른 호스트로부터의 접속을 받아들일 수 있게 된다. 이를 위해서는 sshd 의 설정을 변경해야 하므로, root 권한이 필요하다.
Posted by efrit
,