예를 들어 SSH, FTP 클라이언트 등을 막아놓아서 불편한 경우입니다.
경유지를 이용하여 해결할 수 있습니다. 아... 참고로 게임도 할 수 있습니다. (ㅋㅋ?!)
하지만, OpenVPN은 이런 용도를 위해서 만들어진 S/W는 아닙니다.
원래는 보안성이 높은 가상 사설망을 만들기 위해서, 생산적인 목적을 위해서 만들어진 S/W 임을 밝혀둡니다.
-----------------------------------------------------------------------------------
서버 설정
OpenVPN을 설치합니다.
# cd /usr/ports/security/openvpn
# make install clean
# make install clean
OpenVPN 의 서버와 클라이언트간의 인증을 위한 준비를 합니다.
필요한 예제 파일들을 임의의 위치에 복사하고 스크립트 파일들에게 실행권한을 줍니다.
# cp -r /usr/local/share/doc/openvpn/easy-rsa /root/
# cd /root/easy-rsa
# chmod +x *
# cd /root/easy-rsa
# chmod +x *
아래를 참고하여 국가, 단체명 등등.. 편한대로 수정합니다.
# vi vars
[code]export KEY_COUNTRY=KO
export KEY_PROVINCE="NA"
export KEY_CITY=Seoul
export KEY_ORG="OpenVPN-TEST"
export KEY_EMAIL="me@myhost.mydomain"
[/code]
중간에 틀리면 생성된 keys 디렉토리를 삭제하고 여기서부터 진행하면 됩니다.
# sh
# . vars
# ./clean-all
# ./build-ca
# . vars
# ./clean-all
# ./build-ca
중간에 묻는 메시지 중에서 common name 을 server 로 합니다.
# ./build-key-server server
중간에 묻는 메시지 중에서 common name 을 client1, client2, client3 으로 합니다.
필요한 클라이언트 수에 따라서 여러개 더 만들 수 있습니다.
# ./build-key client1
# ./build-key client2
# ./build-key client3
# ./build-key client2
# ./build-key client3
keys 디렉토리를 복사하거나 심볼릭 링크를 걸어줍니다.
# mkdir /usr/local/etc/openvpn/
# ln -s /root/easy-rsa/keys /usr/local/etc/openvpn/
# ln -s /root/easy-rsa/keys /usr/local/etc/openvpn/
OpenVPN의 설정 예제의 사본을 만들고 아래의 내용을 참고하여 수정합니다.
# cp /usr/local/share/doc/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/openvpn.conf
# vi /usr/local/etc/openvpn/openvpn.conf
# vi /usr/local/etc/openvpn/openvpn.conf
[code]
# 제한을 받지 않는, 사용이 가능한 포트로 변경합니다.
port 8000
# 포트를 제한하는 인터넷 환경이라면 보통 UDP가 사용이 불가능할 수 있으므로 TCP로 변경합니다.
proto tcp
;proto udp
;dev tap
dev tun
# 위에서 만든 인증서 파일들의 위치입니다.
ca /usr/local/etc/openvpn/keys/ca.crt
cert /usr/local/etc/openvpn/keys/server.crt
key /usr/local/etc/openvpn/keys/server.key
dh /usr/local/etc/openvpn/keys/dh1024.pem
# VPN 서버를 게이트웨이로 지정하여, 모든 패킷이 통과하도록 합니다.
push "redirect-gateway"
[/code]
부팅시 OpenVPN이 실행될 수 있도록 rc.conf 파일에 아래의 내용을 추가합니다.
# vi /etc/rc.conf
[code]openvpn_enable="YES"
[/code]
OpenVPN을 실행합니다.
# /usr/local/etc/rc.d/openvpn start
------------------------------------------------------------------------------------
윈도 클라이언트 연결
OpenVPN을 다운로드하고 설치합니다.
http://www.openvpn.net/index.php/open-source/downloads.html
서버에서 만든 ca.crt / client1.crt / client1.key 파일을 C:\Program Files\OpenVPN\config 의 위치에 복사합니다.
C:\Program Files\OpenVPN\sample-config\client.ovpn 파일도 위와 동일한 위치에 복사합니다.

client.ovpn 파일을 메모장이나 기타 텍스트 에디터로 열어서, 아래의 내용을 참고하여 수정합니다.
[code]
# 서버와 동일한 설정 TCP로 변경합니다.
proto tcp
;proto udp
# 서버의 IP 주소 혹은 도메인으로 변경합니다. 포트번호도 서버와 같게 변경합니다.
remote 123.123.123.1 8000
# 위에서 복사한 파일들의 경로를 적습니다.
ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\client0.crt"
key "C:\\Program Files\\OpenVPN\\config\\client0.key"
[/code]
바탕화면의 OpenVPN GUI를 실행하고, 생겨난 트레이 아이콘을 우측 클릭하여 Connect 를 클릭합니다.
연결 시도중에는 아이콘이 노란색으로 표시되며, 연결이 되면 아이콘이 녹색으로 표시됩니다.
만일 연결이 안된다면 아이콘을 우측 클릭하여 View Log 메뉴를 통해 원인을 알 수 있습니다.

-------------------------------------------------------------------------------
PF(Packet Filter) 설치를 통한 인터넷 공유
위에까지 완료했다면 보안성이 우수한 가상사설망으로서의 연결은 가능한 상태가 됩니다.
하지만, 인터넷은 불가능한 상태입니다. 인터넷을 가능하도록 하기 위해서 서버에 PF를 설치합니다.
커널 설정 파일(예제파일: GENERIC)에 아래의 내용을 추가하고, 컴파일합니다.
커널 컴파일 방법은 이곳에 있습니다. http://4444.textcube.com/2
[code]
# Firewall support
device pf
device pflog
device pfsync
options ALTQ
options ALTQ_CBQ
options ALTQ_RED
options ALTQ_RIO
options ALTQ_HFSC
options ALTQ_PRIQ
[/code]
PF를 설정합니다.
# vi /etc/pf.conf
[code]# 외부연결이 되어있는 이더넷 인터페이스 이름을 넣습니다.
ext_if="eth0"
# OpenVPN 의 인터페이스 설정입니다.
vpn_if="tun0"
vpn_network="10.8.0.0/24"
# OpenVPN 을 NAT로 사용할 수 있도록 합니다.
nat on $ext_if from $vpn_network to any -> ($ext_if)
# 8000 포트로 열려있는 OpenVPN 의 접근을 허용합니다. 그 이상은 잘 모릅니다.
# UDP를 사용한다면, tcp를 udp로 수정해야합니다.
pass in on $ext_if proto tcp from any to port 8000 keep state
pass quick on $vpn_if
# 접근을 허용하는 인바운드 포트입니다. 저의 경우 SSH FTP WWW를 열어두었습니다.
pass in on $ext_if proto tcp to ($ext_if) port ssh
pass in on $ext_if proto tcp to ($ext_if) port ftp
pass in on $ext_if proto tcp to ($ext_if) port www
[/code]
뭔지는 모르지만 패킷을 포워딩 시키는 비슷한 뭐시기를 추가합니다.
# vi /etc/sysctl.conf
[code]net.inet.ip.forwarding=1
[/code]
PF를 rc.conf에 추가합니다.
# vi /etc/rc.conf
[code]pf_enable="YES"
[/code]
재부팅하면 완료됩니다.
# reboot
클라이언트에서 접속을 시도해봅니다.
댓글 없음:
댓글 쓰기