티스토리 뷰
[Google Cloud Platform/GCP] 구글 클라우드 플랫폼에서 Docker로 OpenVPN 서버 운영하기(VPN 서버 구축)
KIBBOMI 2021. 7. 7. 12:03무료 VPN은 상당히 보안상 위험하기 때문에 직접 VPN 서버를 띄우기로 마음먹었다. 예전 일본에 있을 때, 네이버에서 서비스하는 야구 등 스포츠 관련 영상을 못 본 게 정말 슬펐다 ㅠㅠ.. 요즘은 해외 드라마를 보고 싶은데 한국에선 볼 수 없어서 VPN을 한 번 사용해보자는 생각.
훌륭하신 분들이 블로그에 몇몇 글을 올려주셨지만 실행결과 등 까지는 올려주시지 않아서 그 부분까지 공유를 해보고자 합니다.
0. 들어가기에 앞서
사용할 프로그램은
1) Docker
2) OpenVPN image : kylemanna/openvpn
입니다.
서버는
1) Google Cloud
입니다.
앞서 Nginx 서버를 docker를 사용해서 구글 클라우드에 띄우고 접속이 되는지까지 연습을 했습니다. 이 개념 그~~~대로 가지고 갈 예정입니다.
https://kibbomi.tistory.com/241
위 글에서
1) 인스턴스(instance, Virtual Machine) 만들기 (Ubuntu, f1-micro)
2) Ubuntu에서 Docker 설치하기
3) Docker Image다운로드 후 container 생성
4) 방화벽 설정 후 container에 접근
을 해보았다.
1, 2단계까지는 위 링크를 보고 따라해 주시면 됩니다!
이 순서 그대로 진행하되, OpenVPN 설정 등 다른 부분은 3번 단계에 해당하겠다. 물론 docker로 배포하는 경우는 1,2,3,4 순서 중 3번의 내용만 변경하면 되니..
순서대로 진행해 보겠습니다.
1. OpenVPN 설정 하기
docker에서 OpenVPN을 쉽게 사용할 수 있도록 Image를 docker hub에 올려놓으신 분이 계신다.
https://github.com/kylemanna/docker-openvpn
위 링크에 kylemanna/openvpn 이미지 관련해서 명령어들을 README.md파일에 잘 적어놓으셨다.
이미지를 다운로드 받기전 volume 등 몇 설정을 해주자. 이미지는 run명령어로 사용과 동시에 바로 설치가 될 테니 신경 안 써도 된다.
간단히 쓰기위해 변수를 선언해주고..
OVPN_DATA="ovpn-data-example"
참고로 그냥 docker화면에 입력하면 된다. " " 안에 들어오는 이름은 원하는 이름을 적어주면 된다.
SSH로 그냥 입력하면 됨.
출력해보고 싶으면 echo $OVPN_DATA 입력해보시면 됩니다.
다음으로 docker가 사용할 volume을 만들어주자
docker volume create --name $OVPN_DATA
docker volume ls를 입력해보면 해당 volume이 추가된 것을 알 수 있다.
다음으로 서버의 설정을 하는 명령어
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://VPN.SERVERNAME.COM
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki
VPN.SERVERNAME.COM부분은 자신의 VPN 서버의 IP주소로 입력해주자. 예를 들어 서버의 IP가 1.2.3.4라면,
-u udp://1.2.3.4 이렇게 써주면 된다.
만약 다음에 서버의 IP가 변경되는 경우 Client의 .ovpn (config) 파일을 수정해주면 된다. 마지막에 살펴보고..
그다음 두번째 명령어는 서버의 pki관련 정보를 결정한다.
ca.key를 먼저 설정할 텐데, 비밀번호 같은 개념이라고 생각하면 된다. 꼭 기억해두자. (한번 더 입력하라고 출력이 나오는데 그런 건 다 읽고 이해하실 거라고 생각합니다!) 다음에 Client를 만들 때 이 Key가 필요하다.
그리고 Common Name이라고 또 설정할 텐데 이건 그냥 이름같이 간단한 걸로 설정해도 된다.
그럼 막 ----+-------+++------- 이런 게 여러줄 출력이 되고 키 생성이 마무리된다.
이제 서버의 설정은 끝났으니 Client의 정보를 만들어 볼 차례이다.
docker run -v $OVPN_DATA:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME nopass
CLIENTNAME부분에 원하는 client의 이름을 적어주면 된다.
nopass를 제거하게 되면 아이디, 비밀번호 입력 방식으로 변경된다.
이 명령어로 CLIENTNAME이름을 갖는 client를 1개 만들었다.
이 client configuration 파일을 내 컴퓨터(local)에 옮겨주어야 한다. 서버는 docker로 손쉽게 openvpn image를 통해 사용하고, VPN 서비스를 받을 나는 OpenVPN client 프로그램을 설치하고 사용해야 한다. 이때 OpenVPN 클라이언트 프로그램은 어떤 서버에 어떤 포트, 어떤 Key를 사용해서 연결할 것인지 나타내는 config파일이 필요하게 된다.
docker run -v $OVPN_DATA:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient CLIENTNAME > CLIENTNAME.ovpn
CLIENTNAME 은 앞선 명령어에서 썼던 그 이름을 써주면 된다.
그러면 /home/GoogleID경로에 CLIENTNAME.ovpn이 생성되었을 것이다.
ls -al 명령어로 보면 생성되어있을 것이다.
다른 클라우드는 모르겠지만 google은 이렇게 파일을 다운로드할 수 있다.
파일을 다운로드 받으려면 절대 경로를 써주어야 하는데
pwd 명령어를 입력하면 기본적으로는 /home/GoogleID 와 같은 경로가 나올 것이다(기본). 사용하시는 분들마다 파일의 위치는 다를 테니 pwd를 한번 입력하고 해당 경로를 앞에 붙여주자.
/home/GoogleID/CLIENTNAME.ovpn을 입력해주고 파일을 다운로드 받자. 받으면 내 컴퓨터의 다운로드 폴더에 저장된다.
이거를 내 local 컴퓨터의 user/OpenVPN/config에 넣어주자. 여기서 user는 home을 의미한다.
.openvpn파일을 열어보면 앞쪽에 remote VPN.SERVERNAME.COM 1194 udp라고 적혀있을 것이다. SERVERNAME은 아까 설정해줄 때 적은 IP주소가 적혀있을 것이고 다음에 서버 IP가 변경되었을 때 이 부분을 변경해주면 된다.
아, 그리고 만약 client정보를 삭제하고 싶으면 다음 명령어를 입력하면 된다.
docker run --rm -it -v $OVPN_DATA:/etc/openvpn kylemanna/openvpn ovpn_revokeclient <client-user-name> remove
<client-user-name>은 이전에 만들었던 CLIENTNAME을 의미
이제 설정은 다 마쳤으니 Container를 실행할 차례
2. OpenVPN 실행
docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --name myvpn --cap-add=NET_ADMIN kylemanna/openvpn
--name myvpn 부분은 마음대로 바꾸면 된다. 없어도 됨.
이제 서버는 1194번 포트로 들어오는 요청을 내부의 1194번으로 보내준다.
Client PC에서 1194번 포트로 요청만 하면 사용할 수 있음을 의미한다.
클라우드 인스턴스에서 방화벽 열어주는 거 잊지않기!(1194 udp로)
3. 실행 결과
실행에 앞서 IP주소를 살펴보자.
내 외부 IP주소가 나오고 현재 한국이다.
이제 다운로드한 OpenVPN프로그램을 실행한다.
실행할 때 아까 서버에서 만들었던 Client정보를 OpenVPN config파일에 넣어 두어야 한다는 점 잊지 말자!
위 아이콘을 더블클릭하던지, 작업표시줄에서 우클릭하고 연결 버튼을 누르면 알아서 연결해 준다.
날짜 시간 등등 ARP, MTU 여러 설정들을 마치고 Initialization Sequence Completed라고 연결을 마무리한다.
이렇게 IP가 바뀐 걸 볼 수 있다.
일본(JP)인 이유는 인스턴스를 만들 때 도쿄(Tokyo)리전 서버를 선택했다.
이렇게 VPN 연결을 간단하게 할 수 있다.
VPN 서버를 만들어 보았습니다. 실제로 잘 만들어진 image를 사용한 거라 만들었다고 말하긴 그렇지만.. 잘 사용해 보았습니다.
주어진 문서를 잘 분석하여 실행까지 했다는 것이 큰 의미가 있다고 생각합니다. 정말 간단한 웹서버 하나 띄우는 것에서 시작해서 응용한다면, 클라이언트-서버 구조 프로그램은 손쉽게 배포할 수 있는 실력(?)을 가질 수 있습니다.
일본 드라마 스트리밍 사이트 유료회원으로 드라마를 보려고 하는데, 해외 IP는 접속 불가능이라 저만 사용할 VPN을 직접 운영하게 됐습니다. Nord VPN인가 다른 믿을만한 유료 VPN은 12달에 7~9만 원인가..? 내야 했던 것 같고, 무료 vpn은.... NO!
그냥 7~9만 원 내고 좋은 서비스받는 것도 좋지만 그냥 한번 만들어보면 어떨까 싶어서 만들어봤습니다.
충격적인 부분은....
일본 IP를 얻어서 접속했는데도 해외 IP는 접속을 할 수 없다고 뜹니다....
꽤나 고단수라 당황.
조금 더 연구해봐야겠습니다 ㅋㅋ
아이디어 있으신가요..? 댓글 부탁드려요~ ㅋㅋ
'개발 > Docker' 카테고리의 다른 글
[Google Cloud Platform/GCP] 구글 클라우드 플랫폼에 Docker로 웹서버 띄우기 (0) | 2021.07.06 |
---|---|
[Docker/Web server] Docker에서 웹 서버 띄우고 접속하기(Docker toolbox, Win7, Win10 home) (1) | 2021.03.30 |