IT/네트워크

[네트워크] OpenVPN Docker로 쉽게 설치하기

반응형

Intro

OpenVPN이란 흔히들 아시는 software VPN 또는 ssl VPN 이라고 부르는 솔루션들 중 하나 입니다. 외부에서 접근할 수 없는 내부 네트워크망으로 접근할 수 있게 해주는 솔루션 이죠. 누구나 자유롭게 사용가능한 오픈소스 솔루션이며, 서버와 클라이언트 방식으로 접근 합니다.

OpenVPN의 치명적인 단점이라면 설치가 매우 복잡하다는 것 입니다. 그 이유는 ssl인증에 대한 이해와 네트워크에 대한 이해가 있어야하고 설치를 위한 설정 파라미터들이 상당히 복잡하기 때문입니다.

오늘은 이 설치가 복잡한 OpenVPN을 도커를 사용하여 최대한 간단하게 할 수 있는 방법을 소개해 드리겠습니다.

(참고로 외국 개발자 kylemanna라는 개발자가 만든 docker image를 사용할 예정입니다. https://hub.docker.com/r/kylemanna/openvpn/)

그 전에 도커 설치하기

  • 서버는 aws 의 ec2를 사용하였으며 os는 amazonlinx 입니다.
sudo yum install docker
sudo service docker start
sudo usermod -a -G docker ec2-user
docker info

도커로 OpenVPN 설치 하기

  • 환경 변수 등록
OVPN_DATA="/home/ec2-user/openvpn-data"
  • 도커 이미지 생성 및 초기화

{HOST_IP} 는 OpenVPN을 설치할 서버의 public IP 또는 도메인명을 입력 하시면 됩니다. (e.g. 32.1.3.9 또는 example.com )

docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://{HOST_IP}
  • openVPN CA와 ServerKey 생성
sudo docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki
  • Openvpn 실행
docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --restart=always --cap-add=NET_ADMIN kylemanna/openvpn
  • 클라이언트 유저생성

{USER_NAME} 유저이름을 입력합니다. nopass 옵션을 주면 비밀번호를 입력하지 않고 openvpn 파일로만 연결 됩니다. 만약 nopass 옵션을 제거하면 패스워드를 입력하는데요. 실제로 제거해서 패스워드 생성해보니 패스워드 규칙이 엄격한지 잘 안만들어집니다. (영문 소문자 8글자 이상으로만 하니 잘만들어집니다.)

docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full {USER_NAME} nopass
  • 클라이언트 ovpn파일 생성

{USER_NAME} 유저이름을 입력합니다.

docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient {USER_NAME}> {USER_NAME}.ovpn 
  • 클라이언트 제거

만약 클라이언트를 잘못 생성했다면 삭제도 가능합니다. {USER_NAME} 유저이름을 입력합니다.

docker run --rm -it -v $OVPN_DATA:/etc/openvpn kylemanna/openvpn ovpn_revokeclient {USER_NAME} remove
  • openvpn.conf 파일 오픈
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn vi /etc/openvpn/openvpn.conf
  • 환경 설정 수정

{VPC_IP} 에는 VPC IP를 입력합니다. 만약 VPC CIDR을 10.10.0.0/16 으로 설정하였으면 10.10.0.0 까지 입력합니다. {VPC_SUBNETMASK} VPC Subnet Mask를 입력합니다. 10.10.0.0/16 이라면 255.255.0.0 을 입력합니다.

...
### Route Configurations Below
route 192.168.254.0 255.255.255.0

### Push Configurations Below
#push "block-outside-dns"
#push "dhcp-option DNS 8.8.8.8"
#push "dhcp-option DNS 8.8.4.4"
push "comp-lzo no"
push "route {VPC_IP} {VPC_SUBNETMASK}"

OpenVPN 클라이언트 프로그램 설치하기

OpenVPN Clien 설치

아래 URL에 접속하여 openvpn 클라이언트 설치

ovpn 파일 복사

  • ovpn 파일을 해당 경로에 복사
  • 파일 : {USER_NAME}.ovpn
  • 경로 : C:\Program Files\OpenVPN\config

끝으로

이 방식은 유저하나당 하나의 ovpn 파일이 생성되는 방식이며, ovpn 파일을 하나로 관리하고 linux os user로 접근을 관리 할 수도 있습니다만 해당 도커로는 이 방식을 어떻게 구현해야할지는 고민을 좀더 해봐야 할 것 같습니다.

참고로 CIDR에 대한 설명을 아래 블로그를 참고 바랍니다.

https://kim-dragon.tistory.com/9

반응형