RecoPick



안녕하세요. RecoPick팀 blmarket입니다. 오늘은 최소한의 설정으로 SSL 기반 VPN을 사용할 수 있는 방법을 소개해드립니다. EC2를 쓰다보면 이런게 필요해지더라구요.


준비물

1. redsocks라는 프로그램을 설치하셔야 합니다. TCP/UDP 연결을 SOCKS 프로토콜로 감싸주는 역할을 해 줍니다. 리눅스와 맥에서 잘 작동합니다.(윈도우에서는 테스트해보지 않았습니다)

2. ssh 연결 가능한 대상 네트워크 상의 서버(이하 중계 서버로 지칭합니다)


그리고 redsocks.conf 파일을 다음과 같이 생성합니다.

base {
    log_debug = on;
    log_info = on;
    log = stderr;
    daemon = off;
    redirector = generic;
}

redsocks {
    local_ip = 0.0.0.0;
    local_port = 12345;

    ip = 127.0.0.1;
    port = 1080;

    // known types: socks4, socks5, http-connect, http-relay
    type = socks5;
}

위 설정파일은 대략 12345번 포트로 들어오는 패킷을 SOCKS5로 감싸서 1080에 전달하라는 뜻으로 이해하시면 됩니다.

이제 원하는 IP 대역으로 나가는 패킷을 12345번 포트로 포워딩해줘야 합니다. 이는 아래 스크립트를 실행하면 됩니다.

#!/bin/bash

if [ "Darwin" = `uname` ]; then
    echo "OSX => ipfw"
    sudo ipfw add fwd 127.0.0.1,12345 tcp from me to 10.128.0.0/10
else
    echo "Linux? => iptables"
    sudo iptables -t nat -A OUTPUT -p tcp -d 10.128.0.0/10 -j REDIRECT --to-port 12345
fi

위 스크립트는
1. OS가 맥인 경우 ipfw를, 그 외 OS인 경우 iptables을 써서
2. 10.128.0.0/10 대역(즉, 10.128.0.0 이상, 10.192.0.0 미만)의 IP를 목적지로 하는 패킷은
3. 127.0.0.1(로컬이죠)의 12345번 포트로 전달하라는 뜻입니다.


대역을 빡빡하게 잡은건 회사 인트라넷과 대역이 겹치고 있어서 그런거구요, 경우에 따라 더 좁게, 혹은 넓게 적용하셔도 무방합니다.


그리고 이제 127.0.0.1의 1080으로 넘어오고 있을 SOCKS5 패킷을 정상적으로 포워딩해주면 됩니다. 이는 ssh의 -D 옵션으로 해결가능합니다.

ssh -D 1080 target.example.com

와 같이 접속한 후, 해당 터미널은 내버려두시면 됩니다.


마지막으로 redsocks를 실행한 후, private ip로 대상 서버에 접속을 시도해보시면 됩니다. 단, 대상 서버의 방화벽 설정이 중계 서버에서 들어오는 패킷을 받아주도록 설정해야 합니다.

Posted by recopick