OpenVPN 을 통한 VPN 구현
OpenVPN 을 통한 VPN 구현
0. 내가 원한는 것.
1) 내가 어디에 있든 사설망에 접속할 수 있어야 한다.
– 사설망 모든 자원 활용(사설의 모든 IP, 모든 PORT)
– 요즘 ISP에서는 특정 포트를 막는다(예) samba, MS-SQL 포트)
2) 사설망은 인터넷을 통해도 안전해야 한다. (SSL 암호화 제공)
3) 사설망의 다른 PC(클라이언트)들과 통신이 가능해야 한다.
4) 접속에 있어 ID/PASS인증을 거친다. (인증서 뿐만 아니라)
5) 어디에 있든 사설망의 게이트웨이를 통해 인터넷에 접속한다.
(외부에 알려지는건 내부 게이트웨이 IP가 보인다.)
1. 시스템 구성
한대의 VPN서버에 여러대의 VPN 클라이언트들이 붙는 형태
각 VPN클라이언트 끼리 통신 또한 가능해야 한다.
-서버 : 리눅스 (SULinux 1.0)
-클라이언트 : Windows XP, Linux (RedHat 9.0)
-네트웍 : 10.1.1.0 (10.1.1.1 ~ 10.1.1.255)
-사용포트 : 1194/UDP
2. OpenVPN설치(서버)
## lzo설치 ( 실시간 압축 전송 라이브러리)
#http://dag.wieers.com/packages/lzo/ 에서 적당한 버전의 rpm을 받는다.
# 난 SULinux 1.0 이니 , RHEL4 버전을 받는다.
wget http://dag.wieers.com/packages/lzo/lzo-1.08-4.2.el4.rf.i386.rpm
wget http://dag.wieers.com/packages/lzo/lzo-devel-1.08-4.2.el4.rf.i386.rpm
rpm -Uvh lzo*
## open vpn 받아서 rpm 만들고 설치
wget http://openvpn.net/release/openvpn-2.0.7.tar.gz
rpmbuild -tb openvpn-2.0.7.tar.gz
rpm -Uvh /usr/src/redhat/RPMS/i386/openvpn-2.0.7-1.i386.rpm
### 설치되는 파일 및 디렉토리들
/etc/openvpn
/etc/rc.d/init.d/openvpn
/usr/sbin/openvpn
/usr/share/doc/openvpn-2.0.7/*
/usr/share/man/man8/openvpn.8.gz
/usr/share/openvpn
/usr/share/openvpn/plugin/*
###############################
3. 인증서 생성 – 서버
인증성 생성은 필수이다. 다음과 같이 생성한다.
1) CA 생성 (상위 인증기관)
cd /usr/share/doc/openvpn-2.0.7/easy-rsa/
#vars 파일을 열어서 맨 마지막 줄을 수정한다.!!
export KEY_COUNTRY=KR
export KEY_PROVINCE=NA
export KEY_CITY=BUSAN
export KEY_ORG=”superuser.co.kr”
export KEY_EMAIL=”doly@suidc.com”
####################################
#인증서 생성시 마다 넣는게 귀찮아서 이렇게 정의 하는 것이니 하지 않아도 무관^^;
. ./vars
## 위 명령은 , vars내용을 include한다는 명령이다.
./clean-all
## 기존에 생성된 것이 있으면 모두 삭제한다.
./build-ca
## CA 인증서를 생성한다.
## 이렇게하면 keys라는 폴더에 ca.key(개인키), ca.crt(공개인증서)가 생성된것을 확인한다.
## ca.crt파일은 모든 클라이언트에 배포. ca.key는 서버만 가지고 있음.
2) 서버키 생성 (서버에 사용될 인증서 및 개인키)
./build-key-server server
## 뭐 많이 물어보는데 대충 대답하고 , y를 누른다.
# keys 디렉토리에 server.crt server.key 등이 생긴것을 확인할수 있다.
# 이 키들은 CA에 의해 사인된 인증서이다.
# server.crt, server.key 모두 서버에만 사용
3) 클라이언트키 생성 (클라이언트에 사용될 인증서)
./build-key client
## 뭐 많이 물어보는데 대충 대답하고 , y를 누른다.
# keys 디렉토리에 server.csr server.crt server.key 등이 생긴것을 확인할수 있다.
# 중요한건. Common Name은 client여야 한다.!!
# keys 디렉토리에 client.crt client.key 를 볼 수 있다.
# 이 키들은 CA에 의해 사인된 인증서이다.
# client.key, client.crt 모두 클라이언트에만 사용됨.
4) Diffie Hellman 파라메터 생성(암호화에 필요한 놈)
./build-dh
# keys디렉토리에 dh1024.pem 파일이 생긴것을 확인할 수 있다.
# dh1024.pem은 서버에만 가지고 있는다.
5) 클라이 언트용 파일 복사 및 보관
mkdir -p /root/client-keys
cp keys/ca.crt keys/client.* /root/client-keys
cd /root
zip client-keys.zip client-keys/*
4. 설정파일(server.conf)파일 복사 및 편집 – 서버
1) 설정파일 및 키 복사
cd /usr/share/doc/openvpn-2.0.7/
cp sample-config-files/server.conf /etc/openvpn/
cp easy-rsa/keys/server.* /etc/openvpn/
cp easy-rsa/keys/dh1024.pem /etc/openvpn/
cp easy-rsa/keys/ca.* /etc/openvpn/
2) 설정파일 편집.(/etc/openvpn/server.conf)
server 10.1.1.0 255.255.255.0
client-to-client
duplicate-cn
max-clients 100
plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so login
## 설명
# sever 네트웍 설정은 10.1.1.0으로 한다.
# client-to-client : 클라이언트 끼리 통신 가능하게
# duplicate-cn : client인증서 하나로 여러대의 PC에서 사용할 수 있게한다.
# max-clients 100 : 연결수를 100으로 제한한다.
# plugin …. : user/pass인증을 받는다. (시스템 계정)
3) G/W로 VPN서버를 쓰기 때문에 인터넷 공유 설정.
echo ‘iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth0 -j MASQUERADE’ >> /etc/rc.d/rc.local
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -L
5. 클라이언트 설치 및 설정(Linux RH9)
# lzo 설치
wget http://dag.wieers.com/packages/lzo/lzo-1.08-4.0.rh9.rf.i386.rpm
wget http://dag.wieers.com/packages/lzo/lzo-devel-1.08-4.0.rh9.rf.i386.rpm
rpm -Uvh lzo-*
# openvpn 받아서 설치
wget http://openvpn.net/release/openvpn-2.0.7.tar.gz
rpmbuild -tb openvpn-2.0.7.tar.gz
rpm -Uvh /usr/src/redhat/RPMS/i386/openvpn-2.0.7-1.i386.rpm
# 설정파일 복사 및 설정
cp /usr/share/doc/openvpn-2.0.7/sample-config-files/client.conf /etc/openvpn/
cd /etc/openvpn
wget http://su021.suidc.com/~mons/client-keys.zip
unzip client-keys.zip
mv client-keys/* .
rm -rf client-keys*
## 설정파일 편집
remote 222.97.189.21 1194
auth-user-pass
# 위 두줄 추가!!
/etc/rc.d/init.d/openvpn start
이렇게 시작하면, user/ pass 를 묻는다.!!
예의상ㅇ!! ping 10.1.1.1 을 해 본다.!!! — OK!
6. Windows XP에 설치!!
http://www.openvpn.se/files/install_packages/openvpn-2.0.7-gui-1.0.3-install.exe
위 파일을 받아서 설치!
http://su021.suidc.com/~mons/vpn-client-win.zip
이 키를 받아서.
시작 -> 프로그램 -> OpenVPN -> Open VPN configuration file directory
을 열고 거기에 복사한다.!