이전 글에서는 OpenVPN 패키지를 Linux Server에 설치하고 Server Configuration, 인증키 발급/배포, Client Configuration 및 인증키 복사를 통한 수작업에 의한 VPN 설정과 사용에 대해 정리하였다.

이번 Post에서는 OpenVPN-AS 솔루션을 활용해서 지난 시간에 언급하였던 Site-to-Site 접속까지 구현하고 테스트해 본다. 헷갈리지 말 것은 OpenVPN을 서버에서 운영하는 방법은 크게
 - OpenVPN Server
 - OpenVPN Access Server
의 2가지가 있으며, OpenVPN 환경으로 접속할 수 있는 Client측의 접속방법은
 - OpenVPN Community Client(for Windows/Linux)
 - OpenVPN Access Server Client
 - TunnelBlick(for Mac)
의 3가지 있다는 것(다시 강조하지만 Windows나 Linux 에서 자체 제공하는 PPTP, L2TP등의 VPN client는 적용이 되지 않으며, 동일 클라이언트 내에서는 2개의 OpenVPN Client 중에서 한가지만 설치하여 사용한다)

OpenVPN-AS는 OpenVPN을 운영자가 쉽게 설치하고 운영하도록 다음의 4가지 기능을 동시에 모두 제공하는 솔루션이다.
 - OpenVPN Server
 - Admin Web interface
 - Client Web interface
 - OpenVPN Client Downloads(from Client Web interface, pam 인증키, 서버 접속정보, 로그인 계정 자동 포함)

설치 운영 방법은 설치 대상 장비의 종류나 성격에 따라
Linux Distro(RHEL, Ubuntu, Fedora, CentOS, Debian)로 Bare-metal 또는 VM에 직접 설치 또는
Virtual Alliance(VMware, Hyper-V, Windows WHD) 로 OpenVPN.org에서 제공되는 VM image를 생성하여 사용하는 방법이 있다.

* 이 대목에서 질문하신 분이 있었다. 회사내에 OpenVPN-AS를 깔았지만 사무실 전체가 비공인IP를 쓰기때문에 이 방식을 사용할 수가 없는데 방법이 없느냐고...약간 귀찮지만 방법이 없지는 않다. 회사내에 전산실이나 네트워크관리자가 따로 있다면 커피 한잔에 해결해 주실지도 모르겠다.

 방법은, 외부에서 들어오는 인터넨 회선이 요즘은 거의 IP공유기일테니, 여기서 port forwarding을 설정하면 되겠다. 단, Firewall이 내부네트웍을 보호하고 있다면 사용하는 port를 Exception에 추가해 주어야 할 것이다. Port forwarding을 2개를 등록해야 할 텐데, 하나는 AS Client용 Web 접속을 위한 것(예: 외부port 44444->내부   vpnip:943)과, OpenVPN접속을 위한 것(예: 외부port 44445->내부 vpnip:443)을 공유기 설정을 통해 등록하면 된다.

 이 경우 반드시 접속 전에 OpenVPNTech\config 로 찾아들어 가서 ovpn 파일을 열고 remote a.b.c.d 부분의 ip를  공유기의 공인 ip주소로 고쳐놓아야 한다.

본 테스트에서는 실제 Network 환경을 에뮬레이션하기 위해
1대의 서버(A)와 1대의 클라이언트(B) 컴퓨터와 각각에 VMware(VMware7 on Windows7)를 설치한다.
A에는
 - VM1: Ubuntu 9.10(Ram 512, Cpu1, HDD 10G), 2개의 가상 NIC을 만들고, 모두 Bridging 으로 설정
 - VM2.VM3: VM1과 동일한 설정으로 하되 NIC은 한 개만 생성(Bridging)

B에는
 - Remote 테스트용 클라이언트를 설치할 VM을 대충(Windows XP) 만들고 NIC은 한 개(Bridging)를 생성, 클라이언트측 Local 접속 IP 1개를 할당한다.


전체적인 개념을 도식화 하면 위의 그림과 같다.

1. OpenVPN-AS download & 설치
 http://www.openvpn.net/index.php/access-server/download-openvpn-as.html 에서 download
 dpkg -i openvpn-as-1.3.5-Ubuntu9.amd_64.deb
 * Admin web 접속계정은 편의를 위해 root 로 하자
 * 설치시 License Key를 물어오는데 Skip하고 나중에 등록하자

2. 설치 완료 후 https://localhost:943/admin 으로 Firefox 등을 통해 접속한다. 서버인증키 때문에 경고가 뜨는데 무시하고 접속한다(Firefox에서는 Exception으로 등록). 로그인 화면에서 root와 암호를 입력하면, 이후의 모든 설정은 Web을 통하여 관리가 가능하다.



3. OpenVPN 설정
OpenVPN AS 다운로드시 Sign-in을 하였을 것이다. http://www.openvpn.org 에서 로그인하면 License 를 조회 또는 이메일로 받을 수 있다. 여기서 License Key(2 User용 무료 License)를 복사하고, Configuration 메뉴의 License 를 클릭하여 New License Key에 Paste하고 버튼 클릭

서버측 네트워크를 맨 위의 그림을 참조하여 사용 환경에 맞게 설정한 후, User Permissions 메뉴를 선택하여 Client 접속을 위한 계정을 지정한다. 필요하면 Linux 시스템의 account를 추가하고 vpn 전용의 계정을 생성해 두고, Username 에 등록한 후, Allow Auto-login을 적당히 지정해 준다.

VPN Mode는 내부 Routing을 해야 하므로 Layer 3(routing/NAT) 을 선택하고 저장, VPN Setting 메뉴에서는 위의 그림에서 처럼 OpenVPN서버측의 Local network은 10.5.5.0/24 로 설정하고, Client에 제공할 IP 대역은 10.8.0.0/24로 설정한다(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 범위의 RFC1918 비공인IP대역중에서 네트워크 설계시에 적당히 선정해서 사용하자).

Routing 부분에서 VPN 서버측 Local network에 접속가능하게 설정한다.
 - Should VPN client have access to ....  => Yes, using NAT
 - Specify the private subnets to which... => 10.5.5.0/24
 - Should client internet traffic be routed...=> Yes를 선택하면 Client의 모든 인터넷 접속을 VPN 서버측 네트워크로
                                                               포워딩하므로 Client측 보안성이 최대화된다.
 - Should client be allowed to access...  => Yes

Save Setting 하고, Status Overview 메뉴를 클릭하여 OpenVPN을 Start 한다.

4. 클라이언트 PC에서 https://openvpn설치서버의공인ip:943 로 접속한다. 역시 서버인증키 경고가 뜨는데
무시하고 접속한다.


Default 또는 AutoLogin 중에서 하나를 선택하고, OpenVPN_Installer.exe 를 다운로드하여 설치한다(기존에 OpenVPN Server 용 Client가 설치되어 있다면 uninstall 후 진행하여야 한다).

다음, client.ovpn 파일을 다운로드 받는다. OpenVPN Server 버전과 달리 이 ovpn 파일에는 모든 인증키와 접속 정보가 자동으로 저장되어 여러 모로 사용이 편리하다.

이제 OpenVPN Client가 자동으로 접속을 시도하고 아래 그림처럼 접속아이콘이 바뀌면 성공적으로 OpenVPN AS 서버에 접속이 성공한 것이다.


이제 맨위의 그림대로 OpenVPN 서버측에 ping으로 접속 가능 여부를 확인해보자


<End>



저작자 표시 비영리 변경 금지
신고
블로그 이미지

Barracuda

Bryan의 MemoLog. 쉽게 익혀 보는 IT 실습과 개념원리, 코딩 세계의 얕은 맛보기들, 평범한 삶 주변의 현상 그리고 進上, 眞想, 진상들


대표적 Open source VPN인 OpenVPN은 point-to-point 접속을 구현하는 SSL VPN 솔루션이다. VPN은 일반적으로 PPTP, L2TP, SSL VPN, IPSec VPN, MPLS VPN 등이 있고, 유명 벤더의 VPN Router 제품도 시중에 나와 있다. 일반적인 상용장비들은 모든 표준들을 준수하며, 100, 1000 user 이상의 접속을 고속으로 처리하도록 VPN전용 OS와 하드웨어를 개발하여 제품화하고 있는 것이다.


요즘 시중의 iptime 기종 같은 인터넷공유기도 pptp VPN 정도는 거의 지원하는데, openvpn이나 windows의 pptp vpn 설정을 통해 VPN을 사용할 수도 있겠다. 한편, 100 user 이내의 Small Office의 경우, 외부에서 방화벽이나 NAT로 차단된 상황에서 사무실 내부로 접속이 필요하다거나, IDC의 특정 서버로 관리를 위한 빈번한 접속이 필요하지만(Point-To-Point), 중/대규모 통신은 그다지 필요하지 않다면, 비용적인 측면에서 OpenVPN을 써 봄이 좋을 듯하다. 나름 단순하면서도 속도도 쓸만 하다고 사람들은 말한다.


Mac OS X 10.3 이상에서는 PPTP, L2TP, IPSec 까지 포함되어 있다고도 하고, Windows 2000 Server 급 이상의 OS에서도 역시 VPN 서버 기능을 제공하고 있다(이건 나중에 알아보기로 하자)

OpenVPN을 설치한 서버에서 iptables로 매스커레이딩을 하거나 라우팅 기능을 이용한다면 상용 장비들이 제공하는 Point-To-Multi 형태의 사용도 가능해지게 된다. 물론 성능면에선...조금 거시기하겠지만 SOHO용이므로 그런대로 쓸만하지 않을까 한다.


개념 정리


개념을 정리해 보자면, VPN solution의 적용 방식은 조합을 해본다면 여러가지가 나오겠지만, 일반적으로 사용목적에 따라 Site-to-site와 Remote Access의 2가지로 나뉘며, 실제 적용 방법은 크게 아래의 4가지 정도로 정리된다.


 - Site-to-site with IPsec
 - Remote Access Using PPTP
 - Remote Access Using L2TP and IPsec
 - Site-to-site and Remote Access Using OpenVPN


주의할 것은, OpenVPN을 SSL VPN으로 오해하는 경우가 간혹 있는데, Open VPN은 OpenSSL의 암호화, 인증방식을 사용하는 것이지, 일반적인 SSL VPN처럼 Web을 통한 VPN 접근/사용 위주의  SSL VPN 솔루션이라는 오해가 없기를 바란다. 또한 OpenVPN 자체는 업계표준의 VPN이 아닌 자체 프로토콜을 적용한, 소위 표준에는 해당되지 않는  별도의 VPN솔루션이라는 점에 유의하자.

여기에서는 OpenVPN의 기본적인 개념과 설치, 설정, 접속을 위한 절차를 정리해 둔다.


1. 요구사항을 요약하면 간단히 아래 그림처럼 표현된다



2. OpenVPN 서버의 설치(Ubuntu 9.10, OpenVPN 2.1.1, openssl 2.0 기준)

OpenVPN Server 다운로드 설치한다. 방법은 

1)  http://www.openvpn.net 에서 타르볼이나 zip으로 된 소스를 다운로드 받고 tar -xvzf...해서 ./configure, make, make install 하여 컴파일해서 빌드하거나 

2) rpm을 다운로드 받아서 dpkg로 설치하거나 

3) apt-get 으로설치한다거나 하는

여러 방법이 있겠지만 ubuntu의 시냅틱관리자에서 간편하게 설치할 수 있으므로 이 방법을 써 보자. 참고로 위의 1번처럼 source를 받아서 자체 빌드를 하기 위해서는 openssl, lzo, pam 과 같은 라이브러리 패키지들이 필요한데, 개발환경에서 서버에 맞게 안정적으로 사용하기 위해서는 이 방법을 쓰는 것이 더 낫다. 자동 provisioning과  발급까지 고려한 솔루션이라면 더욱 더 이 방법을 써야 할 것이다.

여기서는 시냅틱패키관리자를 띄우고 검색에서 openvpn을 치면 패키지가 목록에 뜬다. 체크하고 적용하면 간단히 설치 끝. 예전 버전에서는 설치 후에 tun 또는 tap device를 /dev/net 아래 만들어서 커널에서 지원하도록 별도 설정을 해야 했지만, 지금은 설치하면 자동으로 /dev/net/tun device가 만들어져 있음을 알 수 있다.

설치 후 vpn 기능을 사용하려면 키 파일이 필요한데, 키 생성을 위해서 시냅틱관리자에서 openssl 패키지도 설치해둔다.


3. Root CA 서버 인증키 생성

OpenVPN 용 Root CA 인증서(*.crt)와 키파일(*.key)을 만들기 위해 /usr/share/doc/openvpn/examples/easy-rsa/2.0 으로 간다. 

su - 해서 root 로 수행한다. rpm으로 설치한다면 이 디렉토리가 맞을 것이다.

나중에 패키지 업그레이드 시를 대비한다면
# cp -r /usr/share/doc/openvpn/* /etc/openvpn/ => 원본 디렉토리는 보존하고 복사본으로 설정작업을 한다 여러번 수행할 경우에 대비 vars 파일의 가장 끝 부분을 아래와 같이 수정하자

     export KEY_COUNTRY=KR
     export KEY_PROVINCE=NA
     export KEY_CITY=Seoul
     export KEY_ORG="mydomain.com"
     export KEY_EMAIL=name@mydomain.com

# . ./vars => space 1칸 주의(source ./vars 와 같다)
# source ./clean-all
# ./build-ca => Enter 만 탁탁~

이렇게 하면
./keys 디렉 ca.crt(공개인증서), ca.key(개인키파일), index.txt, serial 파일이 만들어진다


4. 서버키 생성

서버에서 사용할 인증서, 키파일이 위에서 생성한 Root CA를 이용해서 sign되어 아래와 같이 생성한다.
# ./build-key-server server => Enter,... 끝에 Sign the certificate? 부터 2번의 y/n은 y 선택

이렇게 하면 server 라는 common name으로 ./keys 디렉토리에 서버인증서와 키 파일들이 만들어진다.


5. 클라이언트키 생성

클라이언트에서 사용할 인증서, 키파일을 아래와 같이 생성한다.
# ./build-key my-client

이렇게 하면 my-client 라는 common name으로 ./keys 디렉토리에 클라이언트인증서와 키 파일들이 만들어진다.


6. Diffi Hellman 암호화를 위한 pem 파일 생성

# ./build-dh

./keys 디렉토리 내에 dh1024.pem 파일이 생성된다.


7. 키파일 복사 & 보관

나중에 클라이언트에서 사용하기 위해서 방금 생성한 클라이언트 키 파일들을 따로 보관해 둘 필요가 있다.

# mkdir -p /root/client-keys
# cp ./keys/ca.crt ./keys/my-client.* /root/client-keys
# cd /root
# zip my-client-keys.zip client-keys/ca.crt client-keys/my-client.crt client-keys/my-client.key


8. 설정파일, 키파일 복사, 설정 편집, 기동

# cd /usr/share/doc/openvpn/examples/sample-config-files
# gunzip server.conf.gz
# cp server.conf /etc/openvpn
# cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
# cp keys/server.* /etc/openvpn/
# cp keys/dh1024.pem /etc/openvpn/
# cp keys/ca.* /etc/openvpn/

# vi /etc/openvpn/server.conf => 해당 항목을 찾아 수정한다
    server 10.8.0.1 255.255.255.0 => openvpn server subnet 설정
    ; OpenVPN 서버를 gateway로 사용할 경우 10.8.1.0 255.255.255.0 으로 서브넷을 준다
    client-to-client => client 끼리 서로 인식할 수 있게
    duplicate-cn => 동일한 클라이언트 인증서로 여러 클라이언트가 쓰게
    max-clients 100 => 최대 동시 접속자 수
    plugin /usr/lib/openvpn/openvpn-auth-pam.so login => 시스템 계정으로 로그인 되게


* Gateway 설정, 10.8.1.* 대역의 서버들과 외부 클라이언트 사이의 gateway로 설정하고, VPN 클라이언트의 모든 인터넷 접속 요청을 모두 VPN server를 통해서 처리하려면(서버쪽의 보안성을 활용, 클라이언트측 보안성 극대화) 아래와 같이 한다(tun 사용, 즉 routed VPN일 경우)

push "redirect-gateway def1" ==> server.conf 에 추가(또는 un-comment)
다음, linux prompt에서

# echo 1 > /proc/sys/net/ipv4/ip_forward
# echo 'iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 -j MASQUERADE' >> /etc/init.d/rc.local ==> 하지 않으면 1회성
# iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 -j MASQUERADE
# iptables -t nat -L
# push "dhcp-option DNS 10.8.0.1" ==> VPN서버 자체가 DNS 기능을 가진다면 이와 같이 설정하면 된다.

* 만약 단순히 VPN client가 VPN서버측의 네트워크와 동일한 위치의 나머지 서버들에 접속할 수 있도록 하려면
(이 경우도 역시 tun 사용, 즉 routed VPN일 경우)

push "route 211.150.240.0 255.255.255.0"

==> server.conf에 설정(서버 위치의 네트웍이 211.150.240.0/24 라면)

다음, linux prompt에서
# echo 1 > /proc/sys/net/ipv4/ip_forward ==> ip forwarding 가능하게
# iptables -A INPUT -i tun+ -j ACCEPT
# iptables -A FORWARD -i tun+ -j ACCEPT
으로 설정하여 사용


서버의 설정이 끝났으면 아래와 같이 기동/종료/재시작 할 수 있다.
# /etc/init.d/openvpn start
# /etc/init.d/openvpn stop
# /etc/init.d/openvpn restart


9. 클라이언트 설치, 키 복사 & 접속

linux 클라이언트라면 openvpn 설치 후
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn
# cd /etc/openvpn
# 위에서 압축해서 보내준 client-keys.zip 파일을 여기에 해제
# vi client.conf => 설정 파일을 편집, 아래 2줄을 추가 편집
    remote 168.126.189.55 1194
    auth-user-pass => server.conf에서 linux등의 시스템 계정으로 plugin(위 설명 참조)을 지정했다면 반드시 이 줄을 추가

# /etc/init.d/openvpn start => 서버쪽으로 접속 시도

windows 클라이언트라면
openvpn-2.x.x-gui-1.x.x-install.exe 을 다운받아서 설치하고 최근 버전은 여기(http://openvpn.se/download.html) 에서 다운받을 수 있다.

위에서 압축해서 보내준 client-keys.zip 파일을 openvpn configuration directory에 풀고(client-keys 내의 키파일들을 이 디렉토리에 복사해야 한다. 클라이언트측 필수 파일은 ca.crt, my-client.crt, my-client.key)

OpenVPN client 가 설치된 디렉토리를 찾아서 ...x86/openvpn/sample-config/client.ovpn 파일을
...x86/openvpn/config 디렉토리로 복사한 후, client.ovpn 파일을 편집기로 열어서(또는 트레이에서 Edit config)


* 중요한 Client 설정 몇가지...

    dev tun => tun/tap 중에서 server측과 맞춘다
    proto udp => tcp/udp 중에서 역시 server측과 맞춘다
    remote 130.5.120.55 1194 => 부분의 ip를 OpenVPN 서버로 접속되도록 대표ip 또는 openvpn 서버의 ip로 지정
    ca ca.crt => 여기부터 아래 3개 cert 항목은, 필요 없는 항목은 반드시 # 로 comment 처리(중요!)
    cert my-client.crt
    key my-client.key
    ns-cert-type server => server 설정에 따라 켜거나 또는 꺼야 한다
    auth-user-pass => server 계정을 사용하여 인증후에 접속해야 하는 경우에 사용

트레이아이콘에서 접속 시도 -> 접속에 성공하면 OpenVPN 서버와 클라이언트 간의 가상 전용회선이 뚫린 것이므로 마음대로 쓰면 된다.



- Barracuda -




저작자 표시 비영리 변경 금지
신고
블로그 이미지

Barracuda

Bryan의 MemoLog. 쉽게 익혀 보는 IT 실습과 개념원리, 코딩 세계의 얕은 맛보기들, 평범한 삶 주변의 현상 그리고 進上, 眞想, 진상들

Tag openvpn, VPN