openvpn 및 openvpn-easy-rsa 설치

아래와 같이 두 패키지를 설치한다.

root@OpenWrt:/etc# opkg install openvpn openvpn-easy-rsa
Installing openvpn (2.2.2-2) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/openvpn_2.2.2-2_ar71xx.ipk.
Installing kmod-tun (3.3.8-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/kmod-tun_3.3.8-1_ar71xx.ipk.
Installing libopenssl (1.0.1c-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/libopenssl_1.0.1c-1_ar71xx.ipk.
Installing zlib (1.2.7-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/zlib_1.2.7-1_ar71xx.ipk.
Installing liblzo (2.05-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/liblzo_2.05-1_ar71xx.ipk.
Installing openvpn-easy-rsa (2.2.2-2) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/openvpn-easy-rsa_2.2.2-2_ar71xx.ipk.
Installing openssl-util (1.0.1c-1) to root...
Downloading http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/openssl-util_1.0.1c-1_ar71xx.ipk.
Configuring kmod-tun.
Configuring zlib.
Configuring libopenssl.
Configuring openssl-util.
Configuring liblzo.
Configuring openvpn.
Configuring openvpn-easy-rsa.
root@OpenWrt:/etc#


키생성 설정파일 수정

키 파일을 생성하기 전에 필요한 정보를 수정한다. 파일을 열어 국가 및 기타 정보를 수정한다.

root@OpenWrt:/etc# vi /etc/easy-rsa/vars


인증서 및 키 파일 생성

1. 키 파일을 생성하기 전에 키파일이 저장되는 폴더를 정리한다.

root@OpenWrt:~# clean-all
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/easy-rsa/keys
root@OpenWrt:~# 


2. Root CA (Certificatie Authority) 생성

root@OpenWrt:~# build-ca
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/easy-rsa/keys
Generating a 1024 bit RSA private key
...........++++++
..................................................................++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [KR]:
State or Province Name (full name) [YS]:
Locality Name (eg, city) [Seoul]:
Organization Name (eg, company) [OpenWrt Org.]:
Organizational Unit Name (eg, section) [OpenWrt]:
Common Name (eg, your name or your server's hostname) [OpenWrt]:Root CA
Name [OpenWrt]:Root CA
Email Address [xxxxxxxx@naver.com]:
root@OpenWrt:~#


3. DH Parameter 생성

root@OpenWrt:~# build-dh
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/easy-rsa/keys
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.........+........................+............................................................+.......................................+..............................................................+....................................................................................+.............................................................................................................+...........................................................+..................................................................................................+....................................+.........................++*++*++*
root@OpenWrt:~#


4. 서버 키 생성

root@OpenWrt:~# build-key-server server
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/easy-rsa/keys
Generating a 1024 bit RSA private key
..++++++
..............++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [KR]:
State or Province Name (full name) [YS]:
Locality Name (eg, city) [Seoul]:
Organization Name (eg, company) [OpenWrt Org.]:
Organizational Unit Name (eg, section) [OpenWrt]:
Common Name (eg, your name or your server's hostname) [server]:Server
Name [OpenWrt]:Server
Email Address [xxxxxxxxxxx@naver.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:xxxxxxxxxx
An optional company name []:
Using configuration from /etc/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'KR'
stateOrProvinceName   :PRINTABLE:'YS'
localityName          :PRINTABLE:'Seoul'
organizationName      :PRINTABLE:'OpenWrt Org.'
organizationalUnitName:PRINTABLE:'OpenWrt'
commonName            :PRINTABLE:'Server'
name                  :PRINTABLE:'Server'
emailAddress          :IA5STRING:'xxxxxxxx@naver.com'
Certificate is to be certified until Jul  5 13:35:32 2022 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
root@OpenWrt:~#


5. 클라이언트 키 생성

root@OpenWrt:~# build-key Client1
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/easy-rsa/keys
Generating a 1024 bit RSA private key
.....++++++
.......++++++
writing new private key to 'Client1.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [KR]:
State or Province Name (full name) [YS]:
Locality Name (eg, city) [Seoul]:
Organization Name (eg, company) [OpenWrt Org.]:
Organizational Unit Name (eg, section) [OpenWrt]:
Common Name (eg, your name or your server's hostname) [Client1]:
Name [OpenWrt]:Client1
Email Address [xxxxxxxx@naver.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:xxxxxxxx
An optional company name []:
Using configuration from /etc/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'KR'
stateOrProvinceName   :PRINTABLE:'YS'
localityName          :PRINTABLE:'Seoul'
organizationName      :PRINTABLE:'OpenWrt Org.'
organizationalUnitName:PRINTABLE:'OpenWrt'
commonName            :PRINTABLE:'Client1'
name                  :PRINTABLE:'Client1'
emailAddress          :IA5STRING:'xxxxxxxx@naver.com'
Certificate is to be certified until Jul  5 13:52:00 2022 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
root@OpenWrt:~#


6. 인증서와 키 파일 복사

root@OpenWrt:~# cd /etc/easy-rsa/keys
root@OpenWrt:/etc/easy-rsa/keys# cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn/
root@OpenWrt:/etc/easy-rsa/keys#


방화벽 설정

아래와 같이 방화벽 설정 파일을 편집한다.

root@OpenWrt:/# vi /etc/firewall.user


아래와 같이 추가하여 외부에서 1194포트로 접속할 수 있도록 방화벽을 열어준다.

# OpenVPN service
iptables -I INPUT 1 -i eth0.2 -p udp --dport 1194 -j ACCEPT


그리고 방화벽 서비스를 재시작한다.

root@OpenWrt:/# /etc/init.d/firewall restart


공유기의 DHCP 설정 변경

dhcp 설정파일을 열어 편집한다.

root@OpenWrt:/# vi /etc/config/dhcp


설정이 아래와 같이 설정하도록 한다. 그러면 공유기에 물리는 장비의 아이피는 192.168.1.50 에서 192.168.199까지의 주소를 할당받는다. 이렇게 하는 이유는 openvpn 서비스도 dhcp기능을 제공하는데, 두 기능이 서로 간섭일 일어날 수도 있기 때문이다.

config dhcp lan
        option interface        lan
        option start            50
        option limit            150
        option leasetime        12h


dnsmasq를 재시작한다.

root@OpenWrt:/# /etc/init.d/dnsmasq restart


서버 설정

이미 존재하는 설정파일을 템플릿 파일로 백업한다. 이 파일에는 옵션에 대한 여러 정보가 있는데 나중에 참고하고 옵션을 수정할 필요가 있을 수도 있기 때문에 보존하도록 한다.

root@OpenWrt:/# mv /etc/config/openvpn /etc/config/openvpn.template


아래와 같이 openvpn 설정파일을 편집한다. 그러면 아무것도 없는 빈 파일을 편집하는 에디터가 열린다. 참고로 수정하게 될 이 파일은 openvpn에서 직접 사용될 수 없고 /etc/init.d/openvpn 스크립트에서 사용된다.

root@OpenWrt:/# vi /etc/config/openvpn


아래의 내용을 추가한다. 그러면 맨 아래 설정한 아이피대역 (192.168.1.200 ~ 219)으로 OpenVpn 클라이언트에게 자동 할당된다.

config 'openvpn' 'MyOpenVPN'
        option 'enable'                 '1'
        option 'port'                   '1194'
        option 'proto'                  'udp'
        option 'dev'                    'tap0'
        option 'ca'                     '/etc/openvpn/ca.crt'
        option 'cert'                   '/etc/openvpn/server.crt'
        option 'key'                    '/etc/openvpn/server.key'
        option 'dh'                     '/etc/openvpn/dh1024.pem'
        option 'ifconfig_pool_persist'  '/tmp/ipp.txt'
        option 'keepalive'              '10 120'
        option 'comp_lzo'               '1'
        option 'persist_key'            '1'
        option 'persist_tun'            '1'
        option 'log'                    '/tmp/openvpn-status.log'
        option 'verb'                   '3'
        option 'server_bridge'          '192.168.1.1 255.255.255.0 192.168.1.200 192.168.1.219'


OpenVPN 서버를 기동한다. 그리고 서비스로 등록한다.

root@OpenWrt:/# /etc/init.d/openvpn start
root@OpenWrt:/# /etc/init.d/openvpn enable


OpenVPN 서버가 기동되었는지 확인해본다. 아래와 같이 프로세스가 보인다면 우선 성공이다.

root@OpenWrt:/etc/config# ps | grep openvpn
 3057 root      3672 S    /usr/sbin/openvpn --syslog openvpn(MyOpenVPN) --writepid /var/run/openvpn-MyOpenVPN.pid --comp-lzo --persist-
 3394 root      1492 S    grep openvpn
root@OpenWrt:/etc/config#


다음으로 아래와 같이 입력하여 OpenVPN이 시작되면서 오류는 없는지 확인해본다.

root@OpenWrt:/# cat /tmp/openvpn-status.log
Mon Jul  9 11:38:50 2012 OpenVPN 2.2.2 mips-openwrt-linux [SSL] [LZO2] [EPOLL] built on Jul  5 2012
Mon Jul  9 11:38:50 2012 NOTE: when bridging your LAN adapter with the TAP adapter, note that the new bridge adapter will often take on its own IP address that is different from what the LAN adapter was previously set to
Mon Jul  9 11:38:50 2012 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Mon Jul  9 11:38:50 2012 Diffie-Hellman initialized with 1024 bit key
.
.
.
.
.
.
.


VPN으로 접속하여 공유기의 네트워크를 이용하기 위해서 다음과 같이 network 설정파일을 vi 편집기로 연다.

root@OpenWrt:/# vi /etc/config/network


아래와 같은 설정이 되도록 해야 네트워크가 브릿지되어 외부망이 사용가능하다.

config interface 'lan'
        option ifname 'eth0.1 tap0'     <-------- 랜 인터페이스에 "tap0"를 추가한다.
        option type 'bridge'
        option proto 'static'
        option ipaddr '192.168.1.1'
        option netmask '255.255.255.0'


네트워크를 재기동한다.

root@OpenWrt:/# /etc/init.d/network restart


클라이언트 설정

서버 설정을 하였으니 접속하는 클라이언트도 세팅해 주어야 한다. 우선 접속하고자 하는 PC에 OpenVPN을 설치하도록 한다.

1. 윈도우의 경우 이 페이지를 참조하여 OpenVPN을 설치하도록 한다.

2. 그리고 위 과정중 키파일을 생성할 때 클라이언트 키도 생성을 했는데, 아래 파일들을 C:/Program Files/OpenVPN/config 폴더에 복사한다.
    - ca.crt
    - Client1.crt
    - Client1.key

3. C:/Program Files/OpenVPN/sample-config 폴더에서 client.ovpn 파일을 config 폴더로 복사한다.

4. client.ovpn 파일을 편집기로 열어서 다음 항목을 찾아(Ctrl+F) 필요한 값을 변경한다.
    - proto : TCP 또는 UDP를 선택(서버의 설정에 맞춘다)
    - remote : 서버의 IP. 형식은 [IP Port] 의 형식임(콜론이 없음에 주의).
    - cert : 인증서 파일. Client1.crt로 변경
    - key : 키 파일. Client1.key로 변경
    - dhcp-option DNS 168.126.63.1 추가
    - redirect-gateway 추가 (클라이언트의 모든 트래픽을 VPN서버로 보내려면 추가함, 필수는 아님)
    - route xxx.0.0.0 255.0.0.0 xxx.xxx.xxx.xxx 추가 (특정 IP대역의 라우팅 경로를 지정. 필수는 아님)


VPN서버에 접속

모든 설정을 마쳤으니 서버에 접속해 보도록 한다. 클라이언트 PC에서 OpenVPN GUI를 실행하여 우측 하단의 트레이에서 'Connect'를 클릭하면 바로 연결된다. 이상이 없으면 녹색 불이 켜진다.

본 포스팅의 설정대로 하였다면 아마도 IP는 192.168.1.200 을 할당받고 192.168.1.1 로 핑도 이상없이 나갈 것이다.


마치면서....

상당히 긴 포스팅이었다. 나중에 잊어버리지 않게 기록으로 남겨둔다. 혹시라도 도움이 되셨으면 덧글 부탁드린다. 그리고 대단한건 없지만, 무단 펌은 삼가해 주시기 바란다. 본인도 시간을 쪼개어 포스팅 한 것이기 때문에 많은 노력이 들어간 포스팅이다. 그러니 퍼갈 경우 출처를 꼭 남겨주시길 바란다.


참고사이트
  1. http://wiki.openwrt.org/doc/howto/vpn.openvpn


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Life 스토리


티스토리 툴바