라즈베리 파이를 이용한 OpenVPN 환경 구축하기
이제 VPN 기술은 일부 IT 종사자들의 전유물이 아니게 되었다. 당장 국내에서 가장 대중적으로 판매되는 대부분의 공유기에도 기본적으로 이 기능이 탑재되고 있고, 인터넷 검열국가 대한민국에서 ‘국민에게 해로운 자료를 거른다’ 라는 말 아래에 뭉텅뭉텅 잘려나가는 콘텐츠들을 보기 위해 선택하는 길이기도 하다. 이렇게 겉으로 보기에는 우리 삶에 깊숙히 다가운 VPN이지만, 과연 그 속은 어떨까?
VPN 터널을 구성해주는 프로토콜은 여러가지가 있지만, 현재 세계에서 가장 대중적인 것은 PPTP다. VPN에 대해 평소 잘 모르는 분들도 이 이름은 한번쯤 들어봤을 거다. 당장 위에서 언급한 대부분의 공유기에 내장된 VPN 서버 기능이 바로 이 프로토콜만을 지원하기도 하고 말이다. 대중화된 만큼 설정법도 간단하고, 정보도 많다. 더 이상의 장점은… 언급하기 어렵다. 다른 문제는 일단 다 내려놓고, VPN의 생명인 보안 문제가 너무너무 크기 때문이다. 개인적으로 암호보안 쪽의 전문가는 아니지만, PPTP의 키 교환 알고리즘이 지금 시점에서는 너무나 간단해서 슝 뚫려버린다 라고 알고 있다. 심지어 애플의 최신 iOS와 macOS에서는 연결 지원 자체를 끊어버렸을 정도. 그러니 아직까지 PPTP를 사용 중인 분들, 또는 앞으로 개인 VPN 서버를 구성하고 싶으신 분들은 한시빨리 대체제를 찾아야 한다.
L2TP/IPSEC이라는 좋은 선택지도 있고, 다른 훌륭한 프로토콜도 많이 존재하지만 이번에 필자가 꺼낼 것은 OpenVPN이다. 오픈소스에, 안전하고, 대부분의 현대 운영체제를 지원하며, 보안 인증도 상당히 간편하다. 필요할 때 작동시킬 수 있는 컴퓨터만 있다면 다른 준비물은 필요 없다. 다만 필자는 아무래도 설치되는 컴퓨터는 언제나 접속이 가능해야 하는 서버 역할을 해야 하고, 전력과 공간 부분에서 이득을 볼 수 있는 라즈베리 파이를 선택했다. 아래에 후술할 메뉴얼도 라즈베리 파이를 위해 설계된 자동화 도구를 사용할 것이다. 다른 OS나 장비를 사용하시는 분들은 개념 참고만 해주시면 감사하겠다.
탈바꿈
반복적인 단순 작업은 지루하고 재미없다. 중간에 정신 놓고 실수를 벌릴 확률도 커진다. 처음 라즈베리 파이에 VPN 서버를 구성하려 할 때 이런 걱정부터 앞섰는데, 다행히 누군가 PiVPN 이라는 자동화 프로젝트를 완성시켜 두었다. 아래 명령어를 통해 바로 내 라즈베리 파이에 다운로드받아 보자.
curl -L https://install.pivpn.io | bash
미리 PiVPN 측에서 인스톨 스크립트를 잘 만들어둔 덕에, 손가락 빨며 기다리면 된다.
설치 과정 중 따로 스크린샷을 찍지 못해 이 문서의 자료를 일부 가져왔습니다.
아마 조금 기다리면 위와 같은 설정 인터페이스가 출력될 것인데, 시키는데로만 하면 된다. 더 이상의 스크린샷은 첨부하지 않겠다. 사용할 네트워크 인터페이스 (유선의 경우 기본 eth0
)을 선택하고, 연결에 사용될 네트워크 프로토콜 (UDP 권장)을 고르고, 연결 포트와 암호화 수준, 기본 DNS 서버 정도만 딸깍딸깍 선택해주면 순식간에 끝난다. 아 정확히 말하면 완전 순식간은 아니고, 라즈베리 파이의 불쌍한 연산처리 능력으로 키 암호화를 하느라 조금 걸릴 수는 있다.
인스톨러를 따라 모든 설정 후 리부팅까지 마쳤다면, sudo apt-get upgrade
를 통해 새로 설치된 패키지들이 제대로 최신 버전으로 설치되었는지 확인해 주자.
이제 정말로 남은 것은 내 OpenVPN 서버에 연결할 수 있는 계정을 추가해주는 일이다. pivpn add
명령어를 통해 간단히 ID와 비밀번호를 집어넣고 계정이름.ovpn
으로 끝나는 접속 암호화 키를 받을 수 있다. 이 과정까지 완료되었다면 생성된 ovpn 파일을 내가 사용하는 기기로 옮겨주자. (scp 파일전송을 가장 권장하고, 전통적인 ftp 등 선호하는 방법으로 옮기면 된다.) 만약 라즈베리 자체의 소프트웨어 방화벽 & 상단에 공유기가 존재한다면, 꼭 포트를 열어주는 작업도 잊지 말기 바란다.
라즈비안의 기본 소프트웨어 방화벽 (iptables) 기준으로, 아래 명령어를 통해 방화벽 룰 포워딩이 가능하다.
sudo /sbin/iptables -P FORWARD ACCEPT
sudo /sbin/iptables --table nat -A POSTROUTING -o eth0 -j MASQUERADE
작업을 마쳤다면, root 계정으로 전환 후 아래 명령어로 영구 저장하자. (저장하지 않으면 재부팅 시 방화벽 룰이 기본값으로 복구된다.)
iptables-save > /etc/iptables/rules.v4
연결
OpenVPN이라는 이름답게 정말 다양한 플랫폼의 다양한 연결 클라이언트를 선택할 수 있다. 필자의 경우 iOS에서는 공식 OpenVPN 클라이언트 (앱스토어에서 내려받을 수 있다), macOS에서는 Tunnelblick를 애용하고 있다. 클라이언트는 이것 외에도 정말 다양하게 많이 존재하지만, 모두 공통적으로 준비한 ovpn 파일을 선택하고, 설정한 비밀번호만 입력해주면 된다. 본인 취향에 맞추어 원하는 클라이언트를 사용할 것.