OS/LINUX2008. 3. 3. 20:01
반응형

1. 개요

   얼마 전에 누가 OpenVPN을 사용해 보라고 해서, 셋팅을 해서 사용해 해본 결과 쓸만 하고 또

   GPL 라이센스라 무료로 사용할 수 있고 한번도 뚤리적이 없을 정도로 안전하다고 합니다.

   사용법도 간단하여 원격 작업을 위한 터널을 만들어도 좋을 것 같아 여러분들과 공유 하고 싶어

   간단하게 사용법을 정리 하였습니다.

   원론적인 것 보다 실제로 사용 하는데 필요한 부분만 간단하게 정리 하였구요, 많이 활용하시기

   바랍니다.

 

   OpenVPN 사이트 ( http://openvpn.net )

 

 

 2. 설치

   1) FreeBSD

      -  커널 빌드 할때 아래의 옵션을 넣어 주세요. (Generic 커널에는 들어 있을 것 같음)

         ------------------

         device          tun
         device          tap

         ------------------

      - Ports를 이용 하여 설치

         /usr/ports/security/openvpn 에서 make install

      - 설치후 생성 되는 디렉토리/파일

        /usr/local/bin/openvpn  --> 실행파일

        /usr/local/share/doc/openvpn/easy-rsa  --> 키 생성을 하기 위한 디렉토리

        /usr/local/etc/rc.d/openvpn.sh  --> openvpn 구동을 위한 파일

 

   2) Linux (Fedora Core 3 에서 테스트)

     - 다운로드

        http://dag.wieers.com/packages/openvpn/
        --> openvpn-2.0.2-1.1.fc3.rf.i386.rpm (버전에 맞는 것을 다운 받음)

     - 설치

        rpm -Uvh openvpn-2.0.2-1.1.fc3.rf.i386.rpm

     - 설치후 생성 되는 디렉토리/파일

       /usr/sbin/openvpn

       /usr/share/doc/openvpn/easy-rsa

 

   3) Windows

      - 다운로드

        http://openvpn.net  에서  openvpn-2.0.5-install.exe 다운로드

        윈도우에서 사용 할 때는 그냥 openvpn 을 사용 하는 것 보다 OpenVPN-GUI 를 사용

        하면 구동 하기가 더 편리 합니다.

        (홈페이지에 Graphical User Interface 에 들어가면 다양한 종료가 있습니다.)

      - 설치

        일반적인 위도우 응용프로그램과 같이 설치 하면 됩니다.

      - 설치후 생성 되는 것

        TAP-Win32 Adapter 가 생깁니다. (바탕화면의 "내 네트워크 환경" 에서 속성 보면 됨)

        C:\Program Files\OpenVPN --> OpenVPN관련 파일 생성됨

     

 

   4) 기타

       디렉토리 구조만 조금씩 다른 뿐이지 어떤 OS 이던 똑 같은 구조로 동작 합니다.

       기타 다른 OS에서도 특별한 문제 없이 사용 할 수 있을 것입니다.

       http://openvpn.net/install.html   (여기를 참조 하시기 바랍니다.)

 

    *  특별히 다른 것은 없지만 이해를 돕기 위해 다음의 환경 셋팅 등에서도 3개의

       OS 위주로 설명을 합니다.

      

 

3. 환경 셋팅

  1) 설정 파일

     a. FreeBSD

        - 설정파일과 키값이 저장될 디렉토리 생성 

          # mkdir /usr/local/etc/openvpn

          # mkdir /usr/local/etc/openvpn/keys

        - /usr/local/etc/openvpn/openvpn.conf   (설정파일)

           다른 OS도 동일하게 생성 하므로 아래의 키생성에서 같이 설명함

           서버와 클라이언트에 따라서 다르게 설정함

      

        - 구동을 위한 환경 설정

          /etc/rc.conf 에 다음을 추가

           ----------------------------------------------------------

            openvpn_enable="YES"
            openvpn_if="tap"
            openvpn_configfile="/usr/local/etc/openvpn/openvpn.conf"
            openvpn_dir="/usr/local/etc/openvpn"

           ----------------------------------------------------------

 

        -  실행방법

           # cd /usr/loal/etc/rc.d

           # ./openvpn.sh start

 

    b. Linux

        - 설정파일과 키값이 저장될 디렉토리 생성 

          # mkdir /etc/openvpn

          # mkdir /etc/openvpn/keys

 

        - 구동을 위한 환경 설정

          # chkconfig --list | grep openvpn  --> 확인한 후

          # chkconfig --level 3 openvpn on

 

        - 실행

          # /etc/init.d/openvpn start

 

    c. Windows

       - 디렉토리 생성

         C:\Program Files\OpenVPN\config

         C:\Program Files\OpenVPN\config\keys

 

      -  실행 (cmd  쉘에서 실행)

         cmd> openvpn --config openvpn.conf

         * OpenVPN-GNU 를 설치 하면 트레이에서 시작하고 종료 할 수 있습니다.

            (OpenVPN 홈페이지에서 좌측에 "Graphical User Interface" 로 들어가서 받으세요.)

 

  2) 설정 파일 생성

     - 서버용 (openvpn.conf)

       ----------------------------------------------------------------------------------

       dev tap
       proto tcp-server
       ifconfig 192.168.0.1 255.255.255.0   --> 서버의 vpn  주소
       verb 1
       mode server
       tls-server
      ca              keys/ca.crt
      cert            keys/server.crt
      key             keys/server.key
      dh              keys/dh1024.pem
      ifconfig-pool   192.168.0.101   192.168.0.200   --> 클라언트로 DHCP로 받을때 IP범위
      user    root
      group   wheel
      #inactive       600
      client-to-client

     ------------------------------------------------------------------------------------

 

 

    - 클라이언트용 (openvpn.conf)

      -----------------------------------------------------------------------------------

       remote 100.100.100.1     --> openvpn 서버 주소
       dev tap                       --> 사용 장치명
       proto tcp-client
       ifconfig 192.168.0.10 255.255.255.0     --> IP를 고정 할때 사용,

       verb 2                                                 없으면 DHCP방식으로 서버에서 받음
       tls-client
       ca      keys/ca.crt        --> 아래의 3개는 서버에서 생성 된 것을 받아와야
       cert    keys/client.crt
       key     keys/client.key    

     ------------------------------------------------------------------------------------

 

 

  3) 키 생성

     - 아래의 디렉토리로 이동

        # cd /usr/local/share/doc/openvpn/easy-rsa  (FreeBSD)

        # cd /usr/share/doc/openvpn/easy-rsa (Linux)

 

     - vars 수정 (아래와 같이 적당히 수정, 중요한 것은 동일한 값을 가져야 한다는 것임)

       ----------------------------------------------------------------------------

        export KEY_DIR=/usr/local/etc/openvpn/keys
        export KEY_COUNTRY=KO
        export KEY_PROVINCE=NA
        export KEY_CITY=SEOUL
        export KEY_ORG="VPN-TEST"
        export KEY_EMAIL="vpn-admin@vpn-test.com"

       -----------------------------------------------------------------------------

 

     - 서버측의 키 생성 (bash 쉘에서 실행 하기 바람)

       # . vars

       # ./clean-all  --> index 생성을 위해서 함
       # ./build-ca   --> 변경 되면 모든 인증서가 파기되어야 함으로 최초 한 번만 실행
       # ./build-dh   --> 랜덤암호화를 위해 생성
       # ./build-key-server server     


      - 클라이언트 용 key 생성

        # . vars
        # ./build-req <사용자ID>   --> 키 생성
        # ./sign-req <사용자ID>    --> 키에 대하여 서명

 

      - build-req 실행 예

        -----------------------------------------------------------------------------------

         # ./build-req client

        Country Name (2 letter code) [KO]:
        State or Province Name (full name) [NA]:
        Locality Name (eg, city) [SEOUL]:
        Organization Name (eg, company) [VPN-TEST]:
        Organizational Unit Name (eg, section) []:
        Common Name (eg, your name or your server's hostname) []:client-test
        Email Address [vpn-admin@vpn-test.com]:

        Please enter the following 'extra' attributes
        to be sent with your certificate request
        A challenge password []:
        An optional company name []:

       -----------------------------------------------------------------------------------

      주의 사항 : 

          Common Name 은 로그 분석시 구별 되는 값 임으로 알 수 있는 이름으로 설정함

          Organizational Unit Name 까지 동일한 값으로 해야 인증키가 먹음

          challenge password 는 PPP인증등에서 사용 됨으로 설정 하지 않음

       

      -  키를 클라이언트로 복사 (client 라는 이름으로 생성 했을때)

        /usr/local/etc/openvpn/key 아래에 생성된 3개의 파일을 복사

        ca.crt ,      client.crt ,      client.key 

        * 사용자 키는 서버에서 생성해서 클라이언트로 복사해야 함, 따라서 모든 키생성은

           서버에서 해야 함.

 

 

4. 전체 구성

 

                   

 

 

  - 서버로 접속을 하여 키 인증등을 거쳐서 상호 VPN 터널을 완성 시킴

  - VPN서버가 방화벽 내부에 있다면 TCP1194로의 연결 만큼을 허용해 주어야 함

 

 

5. 기타 참고 사항

   - 물리적인 서버를 바꾸려면

     /usr/local/etc/openvpn/keys 키가 들어 있는 디렉토리를 통체로 옮겨서 사용 하면

     클라이언트의 키를 다시 발급 하지 않고 사용 할 수 있음

   - 기타 다양한 활용에 대해서는 openvpn.net 을 보면 많이 도움이 됩니다.

 

작성 : 마그마(필명) putter@naver

반응형

'OS > LINUX' 카테고리의 다른 글

rpm으로 커널 업그레이드 하기  (0) 2008.03.12
[linux] CentOS4 XManager 연결 가능하게 하기  (0) 2008.03.10
REDHAT 9 설치후 기본 셋팅  (0) 2008.02.27
redhat 9.0 에서 한글이 깨질때..조치  (0) 2008.02.27
[LINUX] rpmbuild  (0) 2008.02.11
Posted by [PineTree]