안녕하세요! 이번 포스팅에서는 OpenVPN을 활용하여 VPN 서버를 설치하고 설정하는 방법에 대해 자세히 알아보겠습니다. OpenVPN은 강력한 보안성과 유연성을 제공하는 오픈 소스 VPN 솔루션으로, 다양한 운영체제에서 활용할 수 있습니다.
목차
1. OpenVPN 개요
- 터널링 기능: 하나의 UDP 또는 TCP 포트를 통해 IP 서브넷이나 가상의 이더넷을 터널링할 수 있습니다.
- 강력한 보안성: OpenSSL이 지원하는 다양한 암호화 및 인증 기능을 활용하여 안전한 VPN을 구축할 수 있습니다.
- 간편한 설치 및 설정: 복잡한 커널 패치나 모듈이 필요하지 않으며, 설치 방법이 매우 쉽습니다.
- 다양한 운영체제 지원: Linux, Solaris, FreeBSD, macOS X, Windows 등 여러 OS에서 이용할 수 있습니다.
- 높은 성능: 모든 패킷이 VPN을 통과함에도 시스템 부하를 최소화하여 높은 속도를 제공합니다.
- 유연한 구성: 브리지형, NAT형 등 여러 형태를 지원하며 원하는 만큼 여러 개의 터널을 생성할 수 있습니다.
- 대역폭 제어: 실시간 압축 및 트래픽 쉐이핑(shaping)을 이용하여 링크의 대역폭을 제어할 수 있습니다.
- 안정성: 특별한 보안 취약성이 발견되지 않아 그 자체로 매우 안정적입니다.
OpenVPN 공식 홈페이지: http://www.openvpn.net
2. VPN 서버 설치 및 설정
OpenVPN은 서버와 클라이언트 간의 인증을 위해 세 가지 방식을 제공합니다:
- 공유 키(Pre-shared Static Key) 방식
- RSA 키를 이용한 SSL/TLS 방식
- 아이디/패스워드 방식
첫 번째 방식은 사용이 간단하지만 동시 접속에 제한이 있고, 두 번째 방식은 안전하지만 설정이 복잡합니다. 이번 포스팅에서는 첫 번째와 두 번째 방법에 대해 알아보겠습니다.
공유 키(Pre-shared Static Key) 방식
1) 커널 설정
- OpenVPN은 TUN 또는 TAP 드라이버를 통해 VPN 통신을 수행하므로, 커널에서 해당 드라이버를 지원해야 합니다.
- 커널 메뉴에서 다음 옵션을 선택합니다:lua코드 복사
Network Device support --> <*> Universal TUN/TAP device driver support
- 커널 컴파일 후, 다음 명령어로 디바이스를 설정합니다:bash코드 복사
# mkdir /dev/net # mknod /dev/net/tun c 10 200
- 모듈로 설정한 경우,
modprobe tun
을 실행합니다.
2) 관련 프로그램 설치
- OpenSSL: 암호화에 필요하며, 최신 버전을 사용하는 것이 좋습니다.bash코드 복사
# openssl version OpenSSL 1.1.1k 25 Mar 2021
- 홈페이지: http://www.openssl.org
- LZO: 실시간 압축 라이브러리입니다.
- 설치 방법:bash코드 복사
# ./configure # make # make install
- OpenVPN 설치:bash코드 복사
# ./configure --enable-password-save # make # make install
- 실행 파일이
/usr/local/sbin/openvpn
에 설치됩니다. - 시작 스크립트는
sample-scripts/openvpn.init
를 참고하고, 설정 파일은sample-config-files/server.conf
를 참고합니다. - 설치 시 문제 발생 시, 헤더나 라이브러리 경로를 직접 지정해 볼 수 있습니다:bash코드 복사
# ./configure --with-ssl-headers=/usr/local/ssl/include/openssl/ --with-ssl-lib=/usr/local/ssl/lib
- 실행 파일이
3) VPN 서버 설정
server.conf
파일을 다음과 같이 설정합니다:conf코드 복사port 5000 dev tap0 secret static.key # 공유 키 사용 시 ifconfig 10.1.0.1 255.255.255.0 keepalive 10 60 comp-lzo user nobody group nobody persist-key persist-tun status openvpn-status.log log openvpn.log log-append openvpn.log verb 4
- OpenVPN 실행:bash코드 복사
# openvpn --config server.conf --daemon
netstat
명령어로 프로세스가 리슨 중인지 확인합니다.- 에러 발생 시
openvpn.log
파일을 확인합니다.
4) VPN 클라이언트 설치 및 설정
- Windows PC에 OpenVPN 클라이언트 설치: http://openvpn.net에서 다운로드합니다.
- 설치 후, **”Add a new TAP virtual ethernet adapter”**를 실행합니다.
- **’네트워크 연결’**에서 새로운 인터페이스가 추가된 것을 확인합니다.
- IP 설정:
- DHCP가 작동 중이면 자동 할당되고, 그렇지 않으면 수동으로 설정합니다.
- IP 주소:
10.1.0.2
- 서브넷 마스크:
255.255.255.0
- 클라이언트 설정 파일 (
config.ovpn
) 수정:conf코드 복사remote 서버_아이피_주소 port 5000 proto udp dev tap0 ifconfig 10.1.0.2 255.255.255.0 dev-node "로컬 영역 연결 3" secret static.key # 서버와 동일한 키 ping 10 verb 4 comp-lzo
- OpenVPN 실행:bash코드 복사
# openvpn --config config.ovpn
- 서버와의 연결 및 통신 확인을 위해
ping
및tcpdump
로 확인합니다.
인증서를 활용한 공개 키(PKI) 방식
1) OpenSSL 설정 파일 수정
/usr/share/ssl/openssl.conf
파일에서 다음을 수정합니다:conf코드 복사dir = /usr/share/ssl certificate = $dir/my-ca.crt private_key = $dir/private/my-ca.key
2) Root CA 생성
serial
과index.txt
파일 생성:bash코드 복사# echo "01" > serial # touch index.txt
- Root CA 인증서 및 키 생성:bash코드 복사
# openssl req -nodes -new -x509 -keyout my-ca.key -out my-ca.crt -days 3650
3) 서버 및 클라이언트 키 생성
- 서버 키 생성 및 서명:bash코드 복사
# openssl req -nodes -new -keyout server.key -out server.csr # openssl ca -out server.crt -in server.csr
- 클라이언트 키 생성 및 서명:bash코드 복사
# openssl req -nodes -new -keyout client.key -out client.csr # openssl ca -out client.crt -in client.csr
4) Diffie-Hellman 파라미터 생성
- DH 파라미터 생성 (약 2~3분 소요):bash코드 복사
# openssl dhparam -out dh1024.pem 1024
- 클라이언트로 파일 복사:
client.crt
,client.key
,my-ca.crt
5) 서버 설정 파일 수정
server.conf
파일 수정:conf코드 복사port 5000 proto udp dev tun0 tls-server dh dh1024.pem ca my-ca.crt cert server.crt key server.key ifconfig 10.1.0.1 10.1.0.2 route 10.1.0.0 255.255.255.0 ifconfig-pool 10.1.0.4 10.1.0.251 duplicate-cn client-to-client max-clients 100 comp-lzo persist-key persist-tun status openvpn-status.log log openvpn.log verb 4
- OpenVPN 실행:bash코드 복사
# openvpn --config server.conf --daemon --mode server
6) 클라이언트 설정 파일 수정
config.ovpn
파일 수정:conf코드 복사client dev tun0 proto udp remote 서버_아이피_주소 5000 nobind ca my-ca.crt cert client.crt key client.key comp-lzo verb 4 dev-node "로컬 영역 연결 3"
- OpenVPN 실행:bash코드 복사
# openvpn --config config.ovpn
마무리
이번 포스팅에서는 OpenVPN을 활용한 VPN 서버의 설치 및 설정 방법에 대해 알아보았습니다. 공유 키 방식과 인증서 기반의 공개 키 방식을 모두 살펴보았으니, 필요에 따라 적절한 방식을 선택하여 적용해 보시기 바랍니다. 안전하고 효율적인 VPN 환경을 구축하시길 바랍니다!
참고 자료
- OpenVPN 공식 홈페이지: http://www.openvpn.net
- OpenSSL 공식 홈페이지: http://www.openssl.org
- LZO 압축 라이브러리: http://www.oberhumer.com/opensource/lzo