OpenVPN 설치

OpenVPN 설치

요약: Odroid (armv7)에 OpenVPN을 docker로 설치 방법 정리

Odroid-HC2를 rsync 백업 서버로 설정하고 시놀로지 나스를 백업하는 용도로 사용하고 있다. 마침 집에 개발 및 Pi-HoleHome Assistant 실행 목적으로 홈 서버가 필요했고, 저전력이고 24시간 돌아가고 있는 Odroid-HC2는 매우 좋은 기기였다. 필요한 서비스를 도커 기반으로 올리고 실행하고 보니, 외부에서 핸드폰으로 실행 상황을 확인하고 싶었다. 그래서 이를위해 VPN 서비스를 자연스럽게 살펴보았다.

요즘은 VPN 서비스를 위해 OpenVPN 보다 더 안전하고 빠른 WireGuard로 전환되고 있었다. 하지만 WireGuard는 커널 버전 5.6 이상을 요구하기에 아직 예전 커널을 사용하는, 이제는 단종된 Odroid-HC2에서는 WireGuard를 사용할 수 없었다. 찾아보니 커널을 직접 빌드하려는 시도가 있지만 이건 다른 능력자가 대신 해주는 것으로...

그래서 아쉽지만 Odroid-HC2에 OpenVPN을 설치하였다. 하지만 Odroid-HC2가 armv7 기반이여서 설치 방법이 조금 다르기에 여기에 기록을 남겨본다.

설치 방법

OpenVPN의 도커 버전으로는 linuxserver 버전과 kylemanna 버전이 있다. 이중 kylemanna 버전이 설정하기 쉽기에 추천되고 있었고, 실제로 docker hub의 pull 숫자를 보니 더 많이 사용되고 있었다. 하지만 둘다 armv7은 지원하지 않는다. 처음에는 이것을 모르고 고생했다. 참고로 VPN 서비스가 WireGuard로 대체되는 추세이기에 OpenVPN 도커 버전은 더이상 업데이트가 이루어지지 않고 있다.

다행히 kylemanna 버전의 armv7 포팅 버전이 있기에 이버전을 사용하였다.

포트 포워딩

OpenVPN에서 사용하는 포트를 서버로, 즉 Odroid로, 라우터에서 포트 포워딩을 해준다.

  • 1192/udp 포트포워딩

도커 설정

OpenVPN 실행 및 관리를 위해 다음과 같이 docker-compose.yml를 작성한다.

version: "2.1"
services:
  openvpn:
    # image: kylemanna/openvpn
    image: giggio/openvpn-arm
    container_name: openvpn
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Seoul
    volumes:
      - ./data:/etc/openvpn
    ports:
      - 1194:1194/udp

그리고 다음과 같이 서버에서 실행한다.

  1. config, certificate 디렉토리를 생성
  2. docker 안에 들어가서 config와 certificate 생성. 이때 서버의 도메인주소가 필요하다.
  3. 서버에서 OpenVPN 실행
  4. docker 안에 들어가서 client에서 사용할 key를 생성
  5. 생성된 key, 여기서는 ryanc.ovpn을 연결하고자 하는 client, 즉 핸드폰에 복사

위 스텝을 요약하면 다음과 같다.

# 1. Create directories
$ mdkir -p config certificate

# 2.1 Go inside the docker image
$ docker run -it --rm -v ${PWD}/data:/etc/openvpn kylemanna/openvpn bash

# 2.2. Generate configs and certificates. Use your domain here
$ ovpn_genconfig -u udp://vpn.rhchoi.com
$ ovpn_initpki nopass
$ exit

# 3. Run OpenVPN
$ docker compose up -d

# 4. Go into the docker again, and type the following. Use your user ID here
$ easyrsa build-client-full ryanc nopass
$ ovpn_getclient ryanc > /etc/openvpn/ryanc.ovpn
$ exit

참고로 키 생성은 Odroid에서는 상당히 많은 시간 걸렸는데, 나중에 x86_64 PC에서해보니 순식간에 생성되었다.

안드로이드

안드로이드에서 OpenVPN 앱을 받고, 생성한 key를 사용하여 Odroid에 연결하면 VPN connection이 생성 된다.