a. lzo 2.0 : http://www.oberhumer.com/opensource/lzo/download/
b. OpenSSL 0.9.7a : http://www.openssl.org/source
c. OpenVPN : http://www.openvpn.net/index.php/downloads.html
2. 패키지 설치
-lzo
cd /usr/local/src
tar xvzf lzo-xxxx.tgz
cd lzo-xxxx
./configure --prefix=/usr/local/lzo
make
make install
-openssl 0.9.7a
cd /usr/local/src
tar xvzf openssl-xxxx.tgz
cd openssl-xxxx.tgz
./config --prefix=/usr/local/openssl
make
make install
-openvpn
./configure --prefix=/usr/local/openvpn --with-lzo-headers=/usr/local/lzo/include --with-lzo-lib=/usr/local/lzo/lib --with-ssl-headers=/usr/local/openssl/include --with-ssl-lib=/usr/local/openssl/lib
make
make install
3.주요 디렉토리 생성
mkdir /usr/local/openvpn/plugin
mkdir /usr/local/openvpn/clientkeys
mkdir /usr/local/openvpn/keys
mkdir /usr/local/openvpn/log
4. plugin컴파일
cd /usr/local/openvpn/plugin/auth-pam
make
-생성된 openvpn-auth-pam.so를 openvpn이 설치된 디렉토리에 plugin 디렉토리로 복사
cp /usr/local/src/openvpn/plugin/auth-pam/openvpn-auth-pam.so /usr/local/openvpn/plugin/openvpn-auth-pam.so
5. openvpn설정파일 조정
샘플 openvpn.conf를 openvpn설치 폴더로 복사
cp /usr/local/src/sample-config-files/server.conf /usr/local/openvpn/openvpn.conf
b. 파일을 열어 수정
vi /usr/local/openvpn/openvpn.conf
--------------------------------------------------------------
local 210.xxx.xxx.xxx
port 1194
proto udp
dev tun
#실제로 서버에서 생성한 key파일 및 certificates에 대한 위치를 지정
ca /usr/local/openvpn/keys/ca.crt
cert /usr/local/openvpn/keys/server.crt
key /usr/local/openvpn/keys/server.key # This file should be kept secret
#key negociation에 필요한 Diffie hellman parameter설정(기본은 1024나 보안을 위하여 2048로 변경)
dh /usr/local/openvpn/keys/dh2048.pem
#vpn 서브넷 마스크 구성
server 10.8.0.0 255.255.255.0
#접속허가된 IP들에 대한 list저장 파일 지정
ifconfig-pool-persist /usr/local/openvpn/ipp.txt
#client의 모든 traffic을 VPN을 통하도록 설정
push "redirect-gateway 10.8.0.1"
push "route 210.xxx.xxx.xxx 255.255.255.255"
push "route 10.8.0.0 255.255.255.0"
push "route 210.xxx.xxx.xxx 255.255.255.255"
push "route 118.xxx.xxx.xxx 255.255.255.255"
#동일한 키로 접속여부가 가능할수 있도록
duplicate-cn
# 10초에 한번씩 핑,120초동안 연락이 없을시 다운 간주
keepalive 10 120
#lzo가 가능하게 한다
comp-lzo
#동접
max-clients 100
#
persist-key
persist-tun
#현재 VPN의 접속상태를 기록하는 log위치 지정
status /usr/local/openvpn/log/openvpn-status.log
#VPN 데몬의 모든 로깅 파일 위치 지정
log /usr/local/openvpn/log/openvpn.log
#
verb 3
plugin /usr/local/openvpn/plugin/openvpn-auth-pam.so login
client-cert-not-required
username-as-common-name
---------------------------------------------------------------------
5. openssl설정 조정 및 필요한 key및 certificate생성
샘플 openssl.cnf를 복사 :
cp /usr/local/src/easy-rsa/openssl.cnf /usr/local/openvpn/
수정
vi /usr/local/openvpn/openvpn.conf
--------------------------------------------------------------
#기본적으론는 소스가 설치된 디렉토리에 작성을 하도록 되어 있었으므로 이를 수정
dir = /usr/local/openvpn/keys # Where everything is kept
--------------------------------------------------------------
6.환경변수 설정
export D=/usr/local/openvpn/
export KEY_CONFIG=$D/openssl.cnf
export KEY_DIR=$D/keys
export KEY_SIZE=2048
export KEY_COUNTRY=KR
export KEY_PROVINCE=NA
export KEY_CITY=SEOUL
export KEY_ORG="abc inc"
export KEY_EMAIL="admin@hanbiro.jp"
7. openssl이 사용하는 중요 파일들 설정
touch /usr/local/openvpn/keys/index.txt -> index.txt파일 생성
echo 01 > /usr/local/openvpn/keys/serial -> serial파일을 만들면서 01로 초기화
8. 서버에서 사용할 key생성(*ca.crt의 경우 client로도 전달이 되어야 함)
/usr/local/openssl/bin/openssl req -days 365 -nodes -new -x509 -keyout /usr/local/openvpn/keys/ca.key -out /usr/local/openvpn/keys/ca.crt -config /usr/local/openvpn/openssl.cnf
/usr/local/openssl/bin/openssl req -days 365 -nodes -new -keyout /usr/local/openvpn/keys/server.key -out /usr/local/openvpn/keys/server.csr -extensions server -config /usr/local/openvpn/openssl.cnf
/usr/local/openssl/bin/openssl ca -days 365 -out /usr/local/openvpn/keys/server.crt -in /usr/local/openvpn/keys/server.csr -extensions server -config /usr/local/openvpn/openssl.cnf
/usr/local/openssl/bin/openssl dhparam -out /usr/local/openvpn/keys/dh2048.pem 2048
9. 서버 실행
/usr/local/openvpn/sbin/openvpn --config /usr/local/openvpn/openvpn.conf --daemon --mode server
라이브러리 에러 발생시
"AUTH-PAM: BACKGROUND: could not load PAM lib libpam.so" 에러가 발생함
ln -s /lib/libpam.so.0.75 /lib/libpam.so
libpam.so로 추가 link
10. VPN을 통한 VPN서버외 다른서버(internet상의 모든 서버 포함)로 접근을 위해 네트웍 세팅 변경
echo 1 > /proc/sys/net/ipv4/ip_forward
vi /etc/sysctl.conf
----------------------------
net.ipv4.ip_forward = 1
----------------------------
/etc/sysctl.conf를 변경한 후 적용
sysctl -p
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
VPN에서 사용하는 tun device에 대해서 ipforward기능 on
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
다른 서버로 접근이 가능하도록 nat설정
iptables설정값을 시스템 재시작 때도 적용이 되도록 영구 저장
/sbin/service iptables save
11. 서버 작동 확인
-OpenVPN log
tail -f /usr/local/openvpn/openvpn.conf
-tcpdump를 통한 해당 port(1194) 패킷 모니터링
tcpdump -n udp port 1194
-실제 traffic이 VPN을 통해서 나가고 있는지 연결된 client의 packet확인
tcpdump -n host XXX.XXX.XXX.XXX
12. 서버 스타트/스톱/재시작 스크립트
vi /etc/init.d/openvpn
------------------------------------------------------------
#!/bin/sh
#
# chkconfig: - 91 35
# description: Starts and stops the Openvpn server.
#
# config: /usr/local/openvpn/openvpn.conf
# Source function library.
if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 0
fi
# Avoid using root's TMPDIR
unset TMPDIR
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
# Check that smb.conf exists.
[ -f /usr/local/openvpn/openvpn.conf ] || exit 0
# Check that we can write to it... so non-root users stop here
#[ -w /user/local/openvpn/openvpn.conf ] || exit 0
RETVAL=0
KIND="OpenVPN"
start() {
echo -n $"Starting $KIND services: "
daemon /usr/local/openvpn/sbin/openvpn --config /usr/local/openvpn/openvpn.conf --daemon --mode server
RETVAL=$?
[ $RETVAL -eq 0 ]
echo ""
return $RETVAL
}
stop() {
echo -n $"Shutting down $KIND services: "
killproc openvpn
RETVAL=$?
[ $RETVAL -eq 0 ]
echo ""
return $RETVAL
}
restart() {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
--------------------------------------------------------------
chmod 700 /etc/init.d/openvpn
13.openvpn 클라이언트(윈도우용gui)
openvpn.ovpn 수정
--------------------------------------------------------------
remote 210.xxx.xxx.xxx
dev tap
port 1194
tls-client
proto udp
comp-lzo
verb 4
nobind
ca ca.crt
cert server.crt
key server.key
pull
persist-local-ip
auth-user-pass
dev tun
--------------------------------------------------------------
config폴더 안에
위에서 수정한 openvpn.ovpn 파일과
서버에서 생성한 ca.crt 파일 server.crt파일 server.key파일을
config폴더 안에 넣고 연결을 시도한다.
기타. 방화벽 혹은 ipwrap등의 설정을 풀어준다.
프로세서의 확인
netstat -nap
udp포트의 확인
[출처] openvpn인스톨|작성자 양상