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 클라이언트 설치
- Linux or Windows : https://openvpn.net/index.php/open-source/downloads.html
- Mac OS : https://tunnelblick.net/downloads.html
ovpn 파일 복사
- ovpn 파일을 해당 경로에 복사
- 파일 : {USER_NAME}.ovpn
- 경로 : C:\Program Files\OpenVPN\config
끝으로
이 방식은 유저하나당 하나의 ovpn 파일이 생성되는 방식이며, ovpn 파일을 하나로 관리하고 linux os user로 접근을 관리 할 수도 있습니다만 해당 도커로는 이 방식을 어떻게 구현해야할지는 고민을 좀더 해봐야 할 것 같습니다.
참고로 CIDR에 대한 설명을 아래 블로그를 참고 바랍니다.
'IT > 네트워크및보안' 카테고리의 다른 글
[네트워크] NAT(Network Address Translator)란?? (0) | 2024.10.25 |
---|---|
[Network] VXLAN 이란? (0) | 2022.08.25 |
[네트워크] 커버로스(kerberos)란? (0) | 2021.12.14 |
[네트워크]Azure와 AWS 가상 사설 네트워크 연결하기 (0) | 2021.11.23 |
[네트워크] VXLAN이란? (feat. Network Overlay) (0) | 2021.10.18 |