Ubuntu上のDockerでOpenVPNを実行する基本

あなたはインターネットへの制限やデータの不安定性など、さまざまな関連する制約なしにインターネットに自由にアクセスできる方法について心配していますか?もう心配する必要はありません!OpenVPNをDockerでホスティングして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 ConnectアプリがインストールされたAndroidデバイス – このチュートリアルではAndroid v11およびOpenVPN Connect v3.2.7を使用しています。

OpenVPNのためのDockerコンテナの作成

コンテナ化は、コードとその依存関係を標準のソフトウェアユニットとしてパッケージ化し、アプリケーションを迅速かつ信頼性の高い方法で実行することです。OpenVPN Dockerコンテナを作成する方法はいくつかあります。コンテナをゼロからビルドするか、Docker Hubから既製のコンテナを取得することができます。

ただし、このチュートリアルでは、既存のOpenVPN Dockerイメージファイルを使用します。既製のコンテナには、さまざまな脆弱性に対して徹底的にテストされ、大規模な開発者コミュニティのサポートを受けているという利点があります。さらに、これらのコンテナは時間を節約し、車輪の再発明の必要性を排除するのに役立ちます。

OpenVPN Dockerコンテナを作成するには、以下の手順を実行します:

1. ターミナルを開き、以下のOVPN_DATAコマンドを実行します。このコマンドは出力を提供しませんが、データボリュームの名前をovpn-data-testに設定します。

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ディレクトリに保存されます。
  • 実行中のコンテナやサービス情報を保持するロギングメカニズム(--log-driver)を指定します(none)。
  • 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. 以下のdocker runコマンドを実行して、CAおよびクライアント証明書を生成し取得します。このコマンドは、メインコンテナ内に指定されたイメージからOpenVPNコンテナを実行します(–it)。

ほとんどの場合、CAサーバー証明書の生成には時間がかかります。使用しているマシンのリソースに依存します。

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

以下に示すように、OpenVPN PKIシステムを開始するために、yesと入力しEnterキーを押してください。

Initiating the OpenVPN PKI system

2. 次に、新しいCA証明書のパスワードを入力し、確認してEnterキーを押してください。後でクライアント証明書の設定と生成に必要なため、パスワードを安全な場所にメモしておいてください。

Setting a new CA certificate password

3. CA証明書に一意の名前を設定し、Enterキーを押してください。

Naming the new CA certificate

4. 2番目のステップで設定した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コマンドを実行して、以下の操作を実行します。

  • クライアント証明書を生成し、Dockerコンテナからホストサーバーにクライアント設定ファイル(.ovpn)をダウンロードします。生成された証明書は、コマンドのno-pass引数で指定されたようにパスワードなしです。
  • OpenVPN証明書およびクライアント識別子のファイル名をCLIENTAPPに設定します。証明書はホストのユーザーディレクトリに保存され、Dockerコンテナではないことに注意してください。
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マシン)のuser/homeディレクトリに移動し、.ovpnファイル(CLIENTAPP.ovpn)をAndroidデバイスに転送します。

10. 最後に、AndroidデバイスでOpenVPN Connectクライアントアプリを起動します。

FILEタブの下でBROWSEをタップし、Androidデバイスに転送した.ovpnファイル(CLIENTAPP.ovpn)を選択します。これにより、OpenVPN Connectクライアントに新しいプロファイルが追加されます。

Importing the .ovpn file to the OpenVPN Connect client

接続が成功すると、以下の結果が表示されます。

Verifying successful connection to the VPN server

OpenVPN Web UIへのアクセス

VPNサーバーへのアクセスに必要なコマンドの数に心配していますか?シンプルなWebベースのUIを試してみてはいかがでしょうか?

OpenVPNは、迅速なVPNリモートアクセスソリューションの展開を可能にするWebベースのインストールおよび構成ツールセットを提供しています。このツールキットは、OpenVPNアクセスサーバーと呼ばれる単一のパッケージで提供されます。

OpenVPN Web UIにアクセスするには、以下の手順でパッケージをインストールする必要があります:

1. 最新のOpenVPN Dockerコンテナ(openvpn-as)をLinux Server Docker Hub(linuxserver)からダウンロードしてインストールするには、次のdocker pullコマンドを実行します。

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を設定します。
  • -e TZ=Africa/Nairobi – タイムゾーン情報を指定します。
  • –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コマンドを実行して、ステップ2で作成したOpenVPN Access Server Dockerコンテナーを介してOpenVPN Web UIにアクセスします。

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

4. 最後に、お気に入りのウェブブラウザを開き、ローカルIPアドレス(例:https://YourIP:943/admin)に移動します。YourIPを実際のサーバーのIPアドレスで置き換えます。

すべてがうまくいけば、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サーバーのWeb UIにアクセスし、DNS設定をGoogleまたはお好みのDNSアドレスで更新する必要があります。 Googleは利用可能な中で最速のDNSサーバーを提供しており、これをOpenVPN Access Serverで使用します。

1. OpenVPN Access ServerダッシュボードのCONFIGURATIONタブの左パネルでVPN設定をクリックします。

DNS設定セクションにスクロールして、下に示すようにクライアントが特定のDNSサーバーを使用するオプションを有効にしてください。

Enabling custom OpenVPN DNS addresses

2. 次に、以下のようにGoogle DNSアドレスでプライマリ(8.8.8.8)およびセカンダリDNSサーバー(8.8.8.4)を更新し、設定を保存するために[設定を保存]をクリックしてください。

Setting custom OpenVPN DNS addresses

3. 変更を保存した後、変更が有効になるようにサーバーを再起動するには、[実行中のサーバーを更新]をクリックしてください。

Updating the server settings

4. 今、Linuxマシン上のOpenVPN Access Server(例:https://YourIP:943/admin)に移動してください。YourIPをサーバーのIPアドレスに置き換えてください。構成が正しく機能している場合、以下のように同じページが表示されます。

デフォルトの資格情報(ユーザー名とパスワードの admin と password)を使用してログインしてください。

Logging in to OpenVPN Access Server

5. 任意のプラットフォームアイコンをクリックしてクライアントアプリケーションをダウンロードし、[Yourself(ユーザーロックされたプロファイル)]をクリックしてクライアント.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のWeb UIを使用して視覚的にアクセスする方法があります。OpenVPNクライアントアプリ用のクライアント設定ファイルを生成することにより、迅速なVPN展開を実現しました。

なぜWireGuard VPNを使用して、アプリケーション用のVPNトンネルサービスを作成するというこの新たな知識をさらに活用しないでしょうか?セルフホスト型のVPNサービスを使用して、無限の可能性の世界を探索しましょう!

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