Ubuntu의 Docker에서 OpenVPN 실행 기초

인터넷에 자유롭게 액세스하고 많은 제약과 데이터 보안 문제없이 걱정되시나요? 더 이상 걱정하지 마세요! Docker에서 OpenVPN을 사용하여 VPN 서버를 호스팅하기 시작하세요.

Docker 및 OpenVPN 기술을 사용하여 VPN 서버를 신속하게 설정하고 실행할 수 있습니다. 이 튜토리얼에서는 Docker 컨테이너에 호스팅된 OpenVPN 서버를 실행하는 기본 기초를 배우게 됩니다.

계속해서 OpenVPN Docker로 VPN 서버를 안전하게 유지하세요!

선행 조건

이 튜토리얼은 실습을 기반으로 합니다. 따라오면 다음이 필요합니다:

  • A Linux-based operating system (OS) – This tutorial uses Ubuntu v22.04, but other Linux distributions will work.
  • Docker가 설치되어 실행 중이어야 합니다. 이 튜토리얼은 Docker v20.10.17을 사용합니다.

OpenVPN을 위한 Docker 컨테이너 생성

컨테이너화는 코드와 해당 종속성을 표준 소프트웨어 단위로 패키징하여 애플리케이션을 빠르고 신뢰성 있게 실행하는 것과 같습니다. OpenVPN Docker 컨테이너를 생성하는 여러 가지 방법이 있습니다. 컨테이너를 처음부터 빌드하거나 Docker Hub에서 준비된 컨테이너를 가져올 수 있습니다.

하지만 이 튜토리얼에서는 기존의 OpenVPN Docker 이미지 파일을 사용합니다. 준비된 컨테이너는 다양한 취약점에 대해 철저히 테스트되었으며 광범위한 개발자 커뮤니티의 지원을 받습니다. 또한 이러한 컨테이너는 시간을 절약하고 휠을 다시 발명할 필요를 없애줍니다.

OpenVPN Docker 컨테이너를 생성하려면 다음 단계를 따르세요:

1. 터미널을 열고 다음 OVPN_DATA 명령을 실행하세요. 이 명령은 출력을 제공하지 않지만 데이터 볼륨 이름을 ovpn-data-test로 설정하여 OVPN_DATA 변수에 할당합니다.

OVPN_DATA="ovpn-data-test"

2. 그다음 다음 docker volume create 명령을 실행하여 $OVPN_DATA 변수에 설정한 이름으로 데이터 볼륨을 생성하세요.

이 명령은 출력을 제공하지 않지만 OpenVPN의 모든 데이터, 구성 파일 및 인증서를 저장하는 데이터 볼륨 컨테이너를 생성합니다.

docker volume create --name $OVPN_DATA

3. 마지막으로 다음 docker run 명령을 실행하여 다음과 같이 OpenVPN Docker 이미지를 다운로드하고 설치하세요:

  • 컨테이너 내의 파일 시스템과 별도로 저장 공간(-v)을 지정하십시오. 이 경우, OpenVPN Docker 이미지는 /etc/openvpn 디렉토리에 저장됩니다.
  • 실행 중인 컨테이너 및 서비스 정보(none)를 유지하는 로깅 메커니즘(--log-driver)을 지정하십시오.
  • 컨테이너가 이미 존재할 경우 Docker에게 컨테이너를 자동으로 제거하도록 지시하십시오(–rm).

UDP 프로토콜을 통해 서버의(호스트) 공용 IP 또는 도메인 이름(있는 경우)으로 (YourPublicIP.com)을 대체하십시오. 그러나 TCP 프로토콜도 사용할 수 있습니다.

TCP는 연결 지향 프로토콜이고, UDP는 비연결 지향 프로토콜입니다.

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp://YourPublicIP.com
Installing OpenVPN on Docker container

자체 호스팅 또는 공용 IP를 사용할 경우 라우터/모뎀에서 포트 포워딩을 수행해야 함을 유의하십시오.

인증서로 OpenVPN 클라이언트 보호

머신에 OpenVPN Docker 클라이언트를 성공적으로 설치했으므로 축하합니다! 그러나 OpenVPN을 사용하기 전에 OpenVPN 클라이언트의 구성을 먼저 설정해야 합니다.

OpenVPN 작업 중이라고 해서 VPN 서버를 전 세계에 공개해야 하는 것은 아닙니다. OpenVPN 클라이언트를 보호하기 위해 인증서가 필요합니다.

1. 아래의 도커 실행 명령어를 실행하여 CA와 클라이언트 인증서를 생성하고 검색하세요. 이 명령은 주요 컨테이너 내에서 지정된 이미지로 OpenVPN 컨테이너를 실행합니다.

대부분의 경우, CA 서버 인증서 생성에는 사용하는 기기의 리소스에 따라 시간이 걸립니다.

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn ovpn_initpki

아래와 같이 yes를 입력하고 Enter를 눌러 OpenVPN PKI 시스템을 시작하세요.

Initiating the OpenVPN PKI system

2. 다음으로, 새 CA 인증서 암호를 입력하고 확인한 후 Enter를 누르세요. 나중에 클라이언트 인증서를 설정하고 생성할 때 필요하기 때문에 암호를 안전한 장소에 저장하세요.

Setting a new CA certificate password

3. CA 인증서에 고유한 이름을 지정하고 Enter를 누르세요.

Naming the new CA certificate

4. 이제, 두 번째 단계에서 설정한 CA 암호를 입력하여 요청이 서명과 일치하는지 확인하세요.

Checking \the request matches the signature

5. 개인 키를 생성하기 위해 다시 암호를 입력하세요.

Generate a private key by entering the CA passphrase

6. 다음으로, 아래의 명령을 실행하여 Docker에서 OpenVPN 서버 서비스를 시작하여 OpenVPN 클라이언트를 설정하세요. 여기서:

  • -p 옵션은 서버와 클라이언트 간의 연결을 수립하는 포트(1194)를 설정합니다.

기본 OpenVPN 포트를 사용하기에 편하지 않다면 포트 1194를 원하는 대로 변경할 수 있습니다.

  • –cap-add=NET_ADMIN 인자는 Docker에서 기본적으로 부여하지 않는 네트워크 인터페이스를 수정함으로써 추가적인 Linux 기능을 적용합니다.
docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
Setting the port OpenVPN will listen to

7. 포트가 설정되면, 다음 docker run 명령을 실행하여 다음 작업을 수행하세요.

  • 도커 컨테이너에서 클라이언트 인증서를 생성하고 클라이언트 구성 파일(.ovpn)을 호스트 서버로 다운로드합니다. 생성된 인증서는 명령어의 no-pass 인자에서 지정된 대로 암호 없이입니다.
  • OpenVPN 인증서와 클라이언트 식별 파일의 이름을 CLIENTAPP으로 설정합니다. 인증서는 도커 컨테이너가 아닌 호스트의 사용자 디렉터리에 저장됩니다.
docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTAPP nopass

인증서 생성을 완료하려면 아래에 표시된 대로 암호를 입력하십시오.

Generating the VPN client certificate

8. 다음 명령을 실행하여 컨테이너에서 호스트 서버로 OpenVPN 연결(ovpn_getclient) 구성 파일을 생성하고 다운로드합니다.

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_getclient CLIENTAPP > CLIENTAPP.ovpn

9. 호스트 서버(Linux 머신)의 사용자/홈 디렉터리로 이동하여 .ovpn 파일(CLIENTAPP.ovpn)을 Android 기기로 전송합니다.

10. 마지막으로 Android 기기에서 OpenVPN Connect 클라이언트 앱을 시작합니다.

파일 탭 아래의 BROWSE를 탭하고 Android 기기로 전송한 .ovpn 파일(CLIENTAPP.ovpn)을 선택합니다. 이렇게 하면 OpenVPN Connect 클라이언트에 새 프로필이 추가됩니다.

Importing the .ovpn file to the OpenVPN Connect client

연결에 성공하면 아래 결과가 표시됩니다.

Verifying successful connection to the VPN server

OpenVPN 웹 UI에 액세스하기

VPN 서버에 액세스하기 위해 처리해야 하는 명령어 수에 대해 걱정되나요? 간단한 웹 기반 UI를 시도해 보세요.

OpenVPN은 웹 기반 설치 및 구성 도구 세트를 제공하여 빠른 VPN 원격 액세스 솔루션을 배포할 수 있게 합니다. 이 도구 세트는 OpenVPN 액세스 서버라는 단일 패키지로 제공됩니다.

OpenVPN 웹 UI에 액세스하려면 패키지를 설치해야 합니다:

1. 다음과 같은 docker pull 명령을 실행하여 최신 OpenVPN Docker 컨테이너(openvpn-as)를 Linux Server Docker Hub(linuxserver)에서 다운로드하고 설치합니다.

docker pull linuxserver/openvpn-as
Downloading OpenVPN Access Server Docker container

2. 다운로드 후 다음과 같은 docker create 명령을 실행하여 다음과 같이 새 Docker 컨테이너(openvpn-as)를 생성합니다:

  • -v /home/docker/openvpn-as/config: /config – 구성 파일을 저장할 디렉터리를 설정합니다.
  • --restart=always – 컨테이너가 항상 시스템 부팅 시 시작되도록 합니다. 컨테이너가 다시 시작되길 원치 않으면 이 인수를 추가하지 않을 수 있습니다.
  • -e PGID=1001 -e PUID=1001 – 호스트 서버와 컨테이너 간 권한 문제를 제거하기 위해 사용자 ID를 설정합니다.
  • –net=host –privileged – OpenVPN Access Server가 컨테이너에서 실행되는 방식을 지정합니다.
docker create --name=openvpn-as --restart=always -v /home/docker/openvpn-as/config:/config -e INTERFACE=eth0 -e PGID=1001 -e PUID=1001 -e TZ=Africa/Nairobi --net=host --privileged linuxserver/openvpn-as
Creating a new Docker container (openvpn-as)

3. 다음으로, 아래 docker start 명령을 실행하여 두 번째 단계에서 생성한 OpenVPN Access Server Docker 컨테이너를 통해 OpenVPN 웹 UI에 액세스합니다.

docker start openvpn-as
Starting the OpenVPN access server Docker container

4. 마지막으로, 좋아하는 웹 브라우저를 열고 로컬 IP 주소(예: https://YourIP:943/admin)로 이동합니다. 실제 서버의 IP 주소로 YourIP를 대체합니다.

모든 것이 순조롭게 진행된다면 OpenVPN Access Server의 로그인 페이지가 나타납니다. 아래와 같이 표시됩니다.

사용자 이름과 암호를 입력하고 OpenVPN Access Server 대시보드에 액세스하려면 사용자 이름과 암호를 입력하고 로그인을 클릭합니다.

기본 사용자 이름과 암호는 각각 admin과 password입니다. 필요에 따라 자격 증명을 변경할 수 있습니다.

Accessing the OpenVPN Access Server web UI

로그인한 후 아래의 OpenVPN Access Server 대시보드가 표시됩니다.

Accessing the OpenVPN Access Server dashboard

더 빠르고 안전한 연결을 위한 DNS 구성

이 시점에서 OpenVPN Access Server가 올바르게 작동합니다. 하지만 VPN 서버의 성능을 향상시키려면 DNS를 구성해야 합니다.

DNS를 구성하려면 OpenVPN 서버 웹 UI에 액세스하여 Google 또는 선호하는 DNS 주소로 DNS 설정을 업데이트해야 합니다. Google은 사용 가능한 가장 빠른 DNS 서버를 제공하며, 이를 OpenVPN Access Server에서 사용합니다.

1. OpenVPN Access Server 대시보드에서 CONFIGURATION 탭 아래의 VPN Settings(왼쪽 패널)를 클릭합니다.

Scroll down하여 DNS 설정 섹션으로 이동하고 아래에 표시된 대로 “클라이언트가 특정 DNS 서버 사용” 옵션을 활성화하십시오.

Enabling custom OpenVPN DNS addresses

2. 그다음, 기본 DNS 서버(8.8.8.8) 및 보조 DNS 서버(8.8.8.4)를 다음과 같이 Google DNS 주소로 업데이트하고 변경 사항을 저장하려면 “설정 저장”을 클릭하십시오.

Setting custom OpenVPN DNS addresses

3. 변경 사항을 저장한 후 “실행 중인 서버 업데이트”를 클릭하여 변경 사항이 적용되도록 서버를 다시 시작하십시오.

Updating the server settings

4. 이제 Linux 기계에서 OpenVPN 액세스 서버(예: https://YourIP:943/admin)로 이동하십시오. YourIP를 서버의 IP 주소로 대체하십시오. 구성이 올바르게 작동하면 아래와 같은 페이지가 표시됩니다.

기본 자격 증명 (관리자 및 암호)을 사용하여 로그인하십시오.

Logging in to OpenVPN Access Server

5. 클라이언트 응용 프로그램을 다운로드하려면 플랫폼 아이콘 중 하나를 클릭하고 클라이언트 .ovpn 파일을 다운로드하려면 “자신” (사용자 잠금 프로필)을 클릭하십시오.

Downloading the .ovpn config file and client app

6. 마지막 단계에서와 같이 다운로드한 OpenVPN 클라이언트를 시작하고 .ovpn 파일을 가져오십시오.

Connecting to the OpenVPN server

결론

VPN 서버를 호스팅하는 것은 복잡한 작업이 되어서는 안 되며 특히 서버 연결을 안전하게 하는 것은 더욱 그렇습니다. 다행히도 OpenVPN Docker가 바로 옆에 있어 이를 쉽게 해결할 수 있습니다. 이 튜토리얼에서는 Ubuntu에서 Docker를 사용하여 OpenVPN을 설치, 설정 및 구성하는 방법을 학습했습니다. 또한 OpenVPN CA 및 클라이언트 인증서를 사용하여 Docker 컨테이너에서 OpenVPN 액세스에 대한 보안을 다루었습니다.

제외하고 OpenVPN 서버에 명령 줄 인터페이스를 통해 액세스하는 것 외에도, 이제 OpenVPN Access Server 웹 UI를 통해 시각적으로 액세스할 수 있습니다. OpenVPN 클라이언트 앱을 위한 클라이언트 구성 파일을 생성하여 신속한 VPN 배포를 실현했습니다.

WireGuard VPN을 사용하여 응용 프로그램을 위한 VPN 터널 서비스를 만들어 새롭게 얻은 지식을 확장해 보는 것은 어떨까요? 자체 호스팅된 VPN 서비스를 사용하여 무제한 가능성의 세계를 탐색하세요!

Source:
https://adamtheautomator.com/openvpn-in-docker/