はじめに

仮想プライベートネットワーク(VPN)を使用すると、プライベートネットワークにいるかのように、安全でないネットワークを通過できます。ホテルやカフェのWiFiなどで、安全でないネットワークに接続した際、スマートフォンやノートからインターネットに確実かつ安全にアクセスできます。

HTTPS接続と組み合わせると、このセットアップによりワイヤレスログインとトランザクションを保護できます。地理的な制限と検閲を回避し、あなたのいる場所と暗号化されていないHTTPトラフィックを安全でないネットワークから保護できます。

OpenVPNは、は、幅広い設定に対応するフル機能のオープンソースのトランスポート層セキュリティ(Transport Layer Security: TLS)VPNソリューションです。 このチュートリアルでは、Ubuntu 20.04サーバーでOpenVPNをセットアップし、クライアントマシンからアクセスできるように設定します。

注: the cloud provider DropletにOpenVPNサーバーをセットアップする場合は、多くのホストプロバイダー同様、帯域超過分が請求されることにご注意ください。 こうした理由から、サーバーが処理するトラフィックの量にご注意ください。

詳しくは、このページをご覧ください。

前提条件

openvpn illustration for: 前提条件

このチュートリアルを実行するには、次が必要です。

  • sudo権限を持つroot以外のユーザーおよびファイアウォールを有効にしたUbuntu 20.04サーバー1台。これをセットアップするには、Ubuntu 20.04初期サーバーセットアップチュートリアルを参照します。このガイドでは、OpenVPNサーバーと呼びます。

注: OpenVPNサーバーやローカルマシンをCAとして使用することは技術的に可能ですが、VPNをいくつかのセキュリティの脆弱性にさらすため、これは推奨されません。 OpenVPNの公式ドキュメントに従って、証明書要求のインポートと署名専用のスタンドアロンマシンにCAを配置する必要があります。このため、このガイドでは、CAが、sudo権限を持つroot以外のユーザーと基本的なファイアウォールが有効な別個のUbuntu 20.04サーバーにあると想定します。

OpenVPNサーバーへの接続に使用するクライアントマシン。このガイドでは、OpenVPNクライアントと呼びます。このチュートリアルの目的上、ローカルマシンをOpenVPNクライアントとして使用することをお勧めします。

これらの前提条件が整ったところで、Ubuntu 20.04でOpenVPNサーバーのセットアップと設定を開始します。

注: これらのサーバーの設定中にパスワード認証を無効にすると、このガイドの後半、サーバー間でファイル転送するときに問題が発生する可能性があることに注意してください。この問題を解決するには、各サーバーでパスワード認証を有効に戻します。代わりに、各サーバーのSSHの鍵ペアを生成し、OpenVPNサーバーの公開SSH鍵をCAマシンのauthorized_keysに追加し、またその逆も行う、という方法もあります。  これらのソリューションの実施方法については、Ubuntu 20.04でSSHの鍵を設定する方法をご覧ください。

ステップ1 — OpenVPNとEasyRSAのインストール

最初にOpenVPNとEasy-RSAをにインストールします。Easy-RSAは公開鍵基盤(Pubulic Key Infrastructure: PKI)管理ツールです。これを使用して、OpenVPNサーバーで認証要求を生成し、その認証要求をCAサーバーで検証・署名します。

まず、OpenVPNサーバーのパッケージインデックスを更新し、OpenVPNとEasy-RSAをインストールします。どちらのパッケージもUbuntuのデフォルトリポジトリにあるので、aptを使用してインストールします。

				
					
[environment second]

sudo apt update

sudo apt install openvpn easy-rsa

				
			

次に、root以外のユーザーとしてOpenVPNサーバーに新しいディレクトリ ~/easy-rsaを作成します。

				
					
[environment second]

mkdir ~/easy-rsa

				
			

作成したばかりの ~/easy-rsaディレクトリにインストールされたeasyrsaスクリプトからシンボリック・リンクを作成します。

				
					
[environment second]

ln -s /usr/share/easy-rsa/* ~/easy-rsa/

				
			

注: 他のガイドでは、easyrsaパッケージファイルをPKIディレクトリにコピーするよう指示しているものもありますが、このチュートリアルでは、シンボリック・リンクを採用します。その結果、easy-rsaパッケージの更新は、自動的にPKIのスクリプトに反映されます。

最後に、ディレクトリの所有者はsudok権限を持つroot以外のユーザーであることを確認し、chmodを使用してこのユーザーへのアクセスを制限します。

				
					
[environment second]

sudo chown <^>sammy<^> ~/easy-rsa

chmod 700 ~/easy-rsa

				
			

これらのプログラムがインストールされ、システムの正しい場所に移動したら、次のステップは、OpenVPNサーバーにPublic Key Infrastructure (PKI)を作成し、VPNに接続するクライアントやその他のサーバーのTLS証明書を要求・管理することです。

ステップ2 — OpenVPNのPKIの作成

OpenVPNサーバーの秘密の鍵と証明書を作成する前に、OpenVPNサーバーのローカルにPKIディレクトリを作成します。 このディレクトリを使用して、CAサーバーで直接証明書を作成する代わりに、サーバーとクライアントの証明書要求を管理します。

OpenVPNサーバーにPKIディレクトリを作成するには、varsというファイルにデフォルト値をいくつか入力します。まず、cdeasy-rsaディレクトリに移動し、nanoか好みのテキストエディターを使用してvarsファイルを作成・編集します。

				
					
[environment second]

cd ~/easy-rsa

nano vars

				
			

ファイルを開いたら、次の2行を貼り付けします。

				
					
[environment second]

[label ~/easy-rsa/vars]

set_var EASYRSA_ALGO "ec"

set_var EASYRSA_DIGEST "sha512"

				
			

varsファイルを認証局として使用しないため、OpenVPNサーバーにあるこのvarファイルに必要なのはこの2行だけです。これにより、秘密の鍵と証明書要求が、今日の楕円曲線暗号(Elliptic Curve Cryptography: ECC)を使用するように設定され、ECCはクライアントとOpenVPNサーバーの鍵と安全な署名を生成します。

OpenVPNとCAサーバーを ECCを使用するように設定すると、クライアントとサーバーが共有対称の鍵の確立を試みる際に、楕円曲線アルゴリズムを使用してやり取りできるようになります。  ECCは、古典的なRSAアルゴリズムのプレーンなDiffie-Hellmanよりも数字がはるかに小さく、計算が早くできるため、ECCを使用すれば鍵の交換時間がかなり短縮できます。

背景: クライアントがOpenVPNに接続するときは、非対称暗号化方式(または公開鍵/秘密の鍵)により、TLSハンドシェイクを行います。ただし、暗号化されたVPNトラフィックを送信する際、サーバーとクライアントは、共有鍵暗号化方式として知られる対称暗号化方式を使用します。

対称暗号化方式は非対称暗号化方式に比べて演算のオーバーヘッドがはるかに小さく、使用する数字も小さいため、今日のCPUは命令を統合して最適な対称暗号化演算を実施します。OpenVPNサーバーとクライアントは、非対称暗号化から対称暗号化への切り替えを行う際、Ellipic Curve Diffie-Hellman (ECDH) アルゴリズムを使用して、共有秘密の鍵に可能な限り速やかに同意します。

varsファイルへの入力が終わったら、PKIディレクトリの作成に進みます。それにはinit-pkiオプションを指定して、easyrsaスクリプト実行します。すでに前提条件の中で、CAサーバーでこのコマンドを実行していますが、OpenVPNサーバーとCAサーバーには個別のPKIディレクトリがあるため、ここで実行する必要があります。

				
					
[environment second]

./easyrsa init-pki

				
			

OpenVPNサーバーに認証局を作成する必要はありません。CAサーバーが担うのは、証明書の検証と署名だけです。 VPNサーバーのPKIは、証明書要求と公開証明書を保管する、便利な場所としてのみ使用されます。

OpenVPNサーバーでPKIを初期化した後、次のステップに進み、OpenVPNサーバーの証明書要求と秘密の鍵を生成します。

ステップ3 — OpenVPNサーバーの証明書要求と公開鍵の作成

OpenVPNサーバーに前提条件がすべてインストールされているので、次のステップでは、OpenVPNサーバーに秘密の鍵と証明書署名要求(Certificate Signing Request: CSR)を生成します。その後、署名要求をCAに転送して、必要な証明書を作成します。署名証明書が登録されると、OpenVPNサーバーに返送して、インストールして使えるようにします。

起動するには、root以外のユーザーとしてOpenVPNサーバーの~/easyrsaディレクトリに移動します。

				
					
[environment second]

cd ~/easy-rsa

				
			

次に、gen-reqオプションとマシンのコモンネーム(Common Name: CN)を指定してeasyrsaを呼び出します。 CNはどんな名前でも構いませんが、説明的なものがよいでしょう。 このチュートリアルでは、OpenVPNサーバーのCNをserverとします。nopassオプションも加えましょう。これをしておかないと、要求ファイルがパスワード保護され、今後権限の問題につながる可能性があります。

注:CNをserver以外にした場合、以下の指示を多少調整する必要があります。たとえば、生成ファイルを/etc/openvpnディレクトリにコピーする際、正しい名前に読み換える必要があります。また、/etc/openvpn/server.confファイルが正確に.crtファイル、.keyファイルをポイントするように後で修正する必要があります。

				
					
[environment second]

./easyrsa gen-req <^>server<^> nopass

				
			
				
					
[environment second]

[secondary_label Output]

Common Name (eg: your user, host, or server name) [server]:



Keypair and certificate request completed. Your files are:

req: /home/sammy/easy-rsa/pki/reqs/server.req

key: /home/sammy/easy-rsa/pki/private/server.key

				
			

これにより、サーバーの秘密の鍵と、server.reqという証明書要求ファイルが作成されます。サーバー鍵を/etc/openvpn/serverディレクトリにコピーします。

				
					
[environment second]

sudo cp /home/sammy/easy-rsa/pki/private/server.key /etc/openvpn/server/

				
			

これらのステップを完了して、OpenVPNサーバーの秘密の鍵が作成されました。また、OpenVPNサーバーのCSRも生成されました。これで、CAにCSRへの署名を要求する準備が整いました。このチュートリアルの次のセクションでは、CAサーバーの秘密の鍵でCSRに署名する方法を学びます。

ステップ4 — OpenVPNサーバーの証明書要求に署名する

前のステップでは、OpenVPNサーバーの証明書署名要求(CSR)と秘密の鍵を作成しました。次に、CAサーバーはserver証明書を把握し、それを認証する必要があります。 CAが証明書を認証してOpenVPNサーバーに戻せば、CAを信頼するクライアントもOpenVPNサーバーを信頼できるようになります。

OpenVPNサーバーで、root以外のユーザーとして、SCPなどの転送方式でserver.req証明書要求をCAサーバーにコピーします。CAサーバーはそれを署名に使用します。

				
					
[environment second]

scp /home/sammy/easy-rsa/pki/reqs/server.req <^>sammy<^>@<^>your_ca_server_ip<^>:/tmp

				
			

前提条件 Ubuntu 20.04に認証局(CA)をセットアップして設定する方法チュートリアルに従った場合、次のステップで、CA管理用に作成したroot以外のユーザーとしてCAサーバーにログインします。  PKを作成した~/easy-rsaディレクトリにcdで移動し、easyrsaスクリプトを使用して証明書要求をインポートします。

				
					
[environment third]

cd ~/easy-rsa

./easyrsa import-req /tmp/server.req server

				
			
				
					
[environment third]

[secondary_label Output]

. . .

The request has been successfully imported with a short name of: server

You may now use this name to perform signing operations on this request.

				
			

次に、easyrsaスクリプトを sign-reqオプションを指定して実行し、要求に署名し、続けて要求タイプとコモンネームを入力します。要求タイプは、clientserverかのどちらかです。OpenVPNサーバーの証明書要求を使用しているので、server要求タイプは必ず入力してください。

				
					
[environment third]

./easyrsa sign-req server <^>server<^>

				
			

出力では、要求が信頼できるソースから来たものかどうか確認を求められます。yesと入力後、ENTERキーを押して確認します。

				
					
[environment third]

[secondary_label Output]

You are about to sign the following certificate.

Please check over the details shown below for accuracy. Note that this request

has not been cryptographically verified. Please be sure it came from a trusted

source or that you have verified the request checksum with the sender.



Request subject, to be signed as a server certificate for 3650 days:



subject=

commonName = <^>server<^>





Type the word 'yes' to continue, or any other input to abort.

Confirm request details: yes

. . .

Certificate created at: /home/sammy/easy-rsa/pki/issued/server.crt

				
			

CA秘密の鍵を暗号化すると、この時点でパスワードを求められます。

これらの手順が完了し、CAサーバーの秘密の鍵を使用して、OpenVPNサーバーの証明書要求に署名しました。結果として生じるserver.crtファイルには、OpenVPNサーバーの公開暗号化鍵と、CAサーバーからの署名が含まれます。 署名の意図は、CAサーバーを信頼するすべての人に、OpenVPNサーバーも信頼して接続できると伝えることです。

証明書の設定を完了するには、CAサーバーから<g id="1" ctype="x-CODE" equiv-text="">server.crt</g>ファイルと<g id="2" ctype="x-CODE" equiv-text="">ca.crt</g>ファイルを、OpenVPNサーバー にコピーします。 ““

				
					
[environment third]

scp pki/issued/server.crt &lt;^&gt;sammy&lt;^&gt;@&lt;^&gt;your_vpn_server_ip&lt;^&gt;:/tmp

scp pki/ca.crt &lt;^&gt;sammy&lt;^&gt;@&lt;^&gt;your_vpn_server_ip&lt;^&gt;:/tmp

				
			

OpenVPNサーバーに戻ったので、/tmpから/etc/openvpn/serverにファイルをコピーします。

				
					
[environment second]

sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server

				
			

これでOpenVPNサーバーは、接続を受け入れる準備がほぼできました。次のステップでは、サーバーのセキュリティを強化するために、追加の手順をいくつか行います。

ステップ5 — OpenVPN暗号データの設定

セキュリティレイヤーを強化するため、サーバーと全クライアントがOpenVPNのtls-cryptディレクティブで使用する、共有する秘密の鍵を追加します。このオプションを使用すると、サーバーとクライアント間が接続を確立する際に使用されるTLS証明書を難読化できます。また、OpenVPNサーバーはこれを使用して受信パケットを手早くチェックします。パケットが事前共有鍵を使用して署名されていればサーバーはこれを処理し、署名されていなければサーバーは信頼されていないソースからのパケットであると理解し、復号の手間をかけずに破棄できます。

このオプションはOpenVPNサーバーが、サーバーリソースと連携しながら、認証されていないトラフィック、ポートスキャン、DOS攻撃に対応できるようにします。また、OpenVPNネットワークトラフィックの識別が難しくなります。

tls-crypt 事前共有鍵を生成するには、OpenVPNサーバーの~/easy-rsaディレクトリで次を実行します。

				
					
[environment second]

cd ~/easy-rsa

openvpn --genkey --secret ta.key

				
			

ta.keyというファイルが生成されます。このファイルを/etc/openvpn/server/ディレクトリにコピーします。

				
					
[environment second]

sudo cp ta.key /etc/openvpn/server

				
			

OpenVPNサーバーにこれらのファイルを配置し、VPN接続に使用するユーザーのクライアント証明書と鍵ファイルを作成する準備が整いました。

ステップ6 — クライアント証明書と鍵のペアを生成

クライアントマシンで秘密の鍵と証明書要求を生成し、それをCAに送信して署名させることもできますが、このガイドでは、OpenVPNサーバーで証明書要求を生成するプロセスの概要を説明します。この利点は、必要なすべての鍵と証明書を含むクライアント設定ファイルを自動的に生成するスクリプトが作成できることです。これにより、鍵、証明書、および設定ファイルをクライアントに転送する必要がなくなり、VPNへの参加プロセスが合理化されます。

このガイドでは、単一のクライアント鍵と証明書のペアを生成します。 クライアントが複数ある場合、クライアントごとにこのプロセスを繰り返すことができます。ただし、クライアントごとに一意の名前の値をスクリプトに渡す必要があることに注意してください。このチュートリアルでは、最初の証明書/鍵ペアをclient1と呼びます。

まず、ホームディレクトリ内にディレクトリ構造を作成して、クライアント証明書と鍵ファイルを保存します。

				
					
[environment second]

mkdir -p ~/client-configs/keys

				
			

クライアントの証明書/鍵ペアと設定ファイルをこのディレクトリに保存するので、セキュリティ対策としてその権限をすぐにロックダウンする必要があります。

				
					
[environment second]

chmod -R 700 ~/client-configs

				
			

次に、EasyRSAディレクトリに戻り、 クライアントのコモンネームとともに、gen-reqnopassオプションを指定してeasyrsaスクリプトを実行します。

				
					
[environment second]

cd ~/easy-rsa

./easyrsa gen-req &lt;^&gt;client1&lt;^&gt; nopass

				
			

ENTERキーを押して、コモンネームを確認します。それから、client1.keyファイルを先ほど作成した ~/client-configs/keys/ディレクトリにコピーします。

				
					
[environment second]

cp pki/private/client1.key ~/client-configs/keys/

				
			

次に、安全な方法を使用して、client1.reqファイルをCAマシンに転送します。

				
					
[environment second]

scp pki/reqs/client1.req &lt;^&gt;sammy&lt;^&gt;@&lt;^&gt;your_ca_server_ip&lt;^&gt;:/tmp

				
			

CAサーバーにログインします。EasyRSAディレクトリに移動して、証明書要求をインポートします。

				
					
[environment third]

cd ~/easy-rsa

./easyrsa import-req /tmp/client1.req client1

				
			

次に、前のステップでサーバーに対して行ったように要求に署名します。ただし、今回は、必ずリクエストタイプをclientに指定してください。

				
					
[environment third]

./easyrsa sign-req client &lt;^&gt;client1&lt;^&gt;

				
			

プロンプトで、yesと入力して、証明書要求に署名する意図があり、信頼できるソースからのものであることを確認します。

				
					
[environment third]

[secondary_label Output]

Type the word 'yes' to continue, or any other input to abort.

Confirm request details: &lt;^&gt;yes&lt;^&gt;

				
			

ここでも、CA鍵を暗号化した場合、パスワードの入力を求められます。

これにより、client1.crtという名前のクライアント証明書ファイルが作成されます。このファイルをサーバーに転送して戻します。

				
					
[environment third]

scp pki/issued/client1.crt &lt;^&gt;sammy&lt;^&gt;@&lt;^&gt;your_server_ip&lt;^&gt;:/tmp

				
			

OpenVPNサーバーに戻り、クライアント証明書を ~/client-configs/keys/ディレクトリにコピーします。

				
					
[environment second]

cp /tmp/client1.crt ~/client-configs/keys/

				
			

次に、ca.crtta.keyファイルを ~/client-configs/keys/ディレクトリにもコピーし、sudoユーザーに適切な権限を設定します。

				
					
[environment second]

cp ~/easy-rsa/ta.key ~/client-configs/keys/

sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/

sudo chown &lt;^&gt;sammy&lt;^&gt;.&lt;^&gt;sammy&lt;^&gt; ~/client-configs/keys/*

				
			

これにより、サーバーとクライアントの証明書と鍵がすべて生成され、OpenVPNサーバー上の適切なディレクトリに保存されます。これらのファイルを使用して実行する必要のあるアクションがまだいくつかありますが、それらについては後のステップで説明します。今は、OpenVPNの設定に進みます。

ステップ7 — OpenVPNの設定

OpenVPNには、広く使用されている他の多くのオープンソースツールと同様に、利用可能な設定オプションが多数あります。このセクションでは、このソフトウェアのドキュメントに含まれるサンプル設定ファイルの一つに基づいて、基本的なOpenVPNサーバー設定のセットアップ方法について説明します。

最初に、独自の設定ファイルの開始点としてサンプルのserver.confファイルをコピーします。

				
					
[environment second]

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/

sudo gunzip /etc/openvpn/server/server.conf.gz

				
			

お好みのテキストエディタで編集する新しいファイルを開きます。この例ではnanoを使用します。

				
					
[environment second]

sudo nano /etc/openvpn/server/server.conf

				
			

このファイルの数行を変更します。まず、tls-authディレクティブを検索して、設定のHMACセクションを見つけます。この行は、コメントを解除します。行頭に;を付けてコメントアウトします。その下に新しい行を追加し、その行にはtls-crypt ta.keyのみ入力します。

				
					
[environment second]

[label /etc/openvpn/server/server.conf]

&lt;^&gt;;&lt;^&gt;tls-auth ta.key 0 # This file is secret

&lt;^&gt;tls-crypt ta.key&lt;^&gt;

				
			

次に、cipher行を検索し、暗号に関係のセクションを見つけます。デフォルト値はAES-256-CBCに設定されていますが、AES-256-GCM暗号の方が暗号強度・性能に優れ、最新のOpenVPNクライアントで十分にサポートされています。   行頭に;を追記してこのデフォルト値の行をコメントアウトします。その下に1行追加し、最新の値AES-256-GCMを入力します。

				
					
[environment second]

[label /etc/openvpn/server/server.conf]

&lt;^&gt;;&lt;^&gt;cipher AES-256-CBC

&lt;^&gt;cipher AES-256-GCM&lt;^&gt;

				
			

この下に、authディレクティブを追加して、HMACメッセージダイジェストアルゴリズムを選択します。このため、SHA256は、よい選択です。

				
					
[environment second]

[label /etc/openvpn/server/server.conf]

&lt;^&gt;auth SHA256&lt;^&gt;

				
			

次に、Diffie-Hellmanパラメーターを定義するdhディレクティブを含む行を見つけます。すべての証明書をEllipic Curve Cryptographyに設定したので、Diffie-Hellmanのシードファイルは不要です。dh dh2048.pemdh dh.pemのような見た目の既存の行をコメントアウトします。Diffie-Hellman鍵のファイル名は、サンプルのサーバー設定ファイルの一覧表示と異なる場合があります。その下にdh noneの行を追加します。

				
					
[environment second]

[label /etc/openvpn/server/server.conf]

&lt;^&gt;;&lt;^&gt;dh dh2048.pem

&lt;^&gt;dh none&lt;^&gt;

				
			

次に、OpenVPNが起動したら権限なしで稼働させるため、ユーザーnobody、グループnogroupとして稼働するように指示します。これを有効にするには、user nobody行とgroup nogroup行それぞれの行頭にある;を削除してコメントを解除します。

				
					
[environment second]

[label /etc/openvpn/server/server.conf]

user nobody

group nogroup

				
			

(オプション)DNSの変更をプッシュして、VPNを介してすべてのトラフィックをリダイレクトする

上記の設定により、2台のマシン間にVPN接続が作成されますが、トンネルを使用する接続は強制されません。VPNを使用してすべてのトラフィックをルーティングする場合は、追加設定をクライアントコンピューターにプッシュします。

まず、push "redirect-gateway def1 bypass-dhcp"を含む行を検索し、コメントを解除します。これにより、クライアントにOpenVPNサーバーを介してトラフィックをリダイレクトするよう指示します。この機能を有効にすると、SSHのような他のネットワークサービスとの接続に問題が生じる可能性があることに注意してください。

				
					
[environment second]

[label /etc/openvpn/server/server.conf]

push "redirect-gateway def1 bypass-dhcp"

				
			

すぐ下の行に、dhcp-optionセクションがあります。ここでも、2行とも行頭の;を削除してコメントを解除します。

				
					
[environment second]

[label /etc/openvpn/server/server.conf]

push "dhcp-option DNS &lt;^&gt;208.67.222.222&lt;^&gt;"

push "dhcp-option DNS &lt;^&gt;208.67.220.220&lt;^&gt;"

				
			

これらの行は、クライアントに、一覧表のIPアドレスで無料のOpenDNSリゾルバを使用するように指示するものです。他のDNSリゾルバがよければ、ハイライトされたIPの部分を置き換えます。

これにより、クライアントはDNS設定を再設定し、VPNトンネルをデフォルトのゲートウェイとして使用します。

(オプション)ポートとプロトコルの調整

デフォルトでは、OpenVPNサーバーはポート1194とUDPプロトコルを使用してクライアント接続を受け入れます。制限されたネットワーク環境にいるかもしれないクライアントのために別のポートを使用する必要がある場合、portオプションを変更できます。OpenVPNサーバーでWebコンテンツをホストしていない場合は、 ファイアウォールで通常許可されているポート443が一般的な選択肢です。

OpenVPNがポート443でlistenするように変更するには、server.confファイルを開き、次のような行を検索します。

				
					
[environment second]

[label /etc/openvpn/server/server.conf]

port 1194

				
			

ファイルを編集してポートを443にします。

				
					
[environment second]

[label /etc/openvpn/server/server.conf]

# Optional!

port &lt;^&gt;443&lt;^&gt;

				
			

多くの場合、プロトコルもそのポートに限定されています。その場合、port行の下のproto行を検索し、プロトコルをUDPからTCPに変更します。

				
					
[environment second]

[label /etc/openvpn/server/server.conf]

# Optional!

proto &lt;^&gt;tcp&lt;^&gt;

				
			

プロトコルをTCPに切り替えた場合、このディレクティブはUDPのみで使用されるため、explicit-exit-notifyディレクティブの値を1から0に変更する必要があります。これを行わずにTCPを使用すると、OpenVPNサービスを開始するときにエラーが発生します。

ファイルの最後のexplicit-exit-notify行を検索し、値を0に変更します。

				
					
[environment second]

[label /etc/openvpn/server/server.conf]

# Optional!

explicit-exit-notify &lt;^&gt;0&lt;^&gt;

				
			

別のポートとプロトコルを使用する必要がない場合は、これら2つの設定をデフォルトのままにしておくことをお勧めします。

(オプション)デフォルト以外の資格情報をポイントする

先ほど./easyrsa gen-req serverコマンドで別の名前を選択した場合は、server.conf設定ファイルのcertkey行を変更して、適切な.crtファイルと.keyファイルをポイントするようにします。デフォルト名serverを使用した場合、資格情報はすでに正しく設定されています。

				
					
[environment second]

[label /etc/openvpn/server/server.conf]

cert &lt;^&gt;server&lt;^&gt;.crt

key &lt;^&gt;server&lt;^&gt;.key

				
			

完了したら、ファイルを保存して閉じます。

これで、OpenVPNの一般的な設定を完了しました。次のステップでは、サーバーのネットワークオプションをカスタマイズします。

ステップ8 — OpenVPNサーバーネットワーク設定の調整

サーバーのネットワーク設定を部分的に調整して、OpenVPNがトラフィックをVPN経由で正しくルーティングできるようにする必要があります。その一つ目である*IP転送*は、IPトラフィックの経路を決定する方法です。これは、サーバーが提供するVPN機能に必要不可欠です。

OpenVPNサーバーのデフォルトIP転送設定を調整するには、nanoまたは好みのエディタを使用して/etc/sysctl.confファイルを開きます。

				
					
[environment second]

sudo nano /etc/sysctl.conf

				
			

次に、ファイルの最下行に次の行を追加します。

				
					
[environment second]

[label /etc/sysctl.conf]

net.ipv4.ip_forward = 1

				
			

完了したら、ファイルを保存して閉じます。

ファイルを読み取り、現在のセッションの新しい値を読み込むには、次のように入力します。

				
					
[environment second]

sudo sysctl -p

				
			
				
					
[environment second]

[secondary_label Output]

net.ipv4.ip_forward = 1

				
			

OpenVPNサーバーは、あるイーサネットデバイスから別のデバイスへ、受信したトラフィックを転送できるようになりました。この設定により、サーバーは、仮想VPNインタフェースで接続するクライアントから他の物理的イーサネットデバイスへトラフィックを向かわせることができるようになります。この設定により、すべてのWebトラフィックはクライアントからサーバーのIPアドレスを介してルーティングされ、クライアントのパブリックIPアドレスが効果的に隠されます。

次のステップでは、ファイアウォールールをいくつか設定して、OpenVPNサーバーへ/からトラフィックが適切に流れるようにします。

ステップ9 — ファイアウォールの設定

これまでのところ、OpenVPNをサーバーにインストールし、設定し、クライアントがVPNにアクセスするために必要な鍵と証明書を生成しました。ただし、OpenVPNには、クライアントから受信するWebトラフィックの送り先についての指示が与えられていません。いくつかのファイアウォールルールとルーティング設定を確立することにより、サーバーがクライアントトラフィックをどのように処理するかを規定できます。

このチュートリアルの冒頭の前提条件に従ったなら、すでにufwがインストールされ、サーバーで実行されていることでしょう。ファイアウォールを介してOpenVPNを許可するには、マスカレードを有効にする必要があります。マスカレードはクライアント接続を正しくルーティングするための動的NAT(network address translation)をオンザフライで提供する、iptables の概念です。

ファイアウォール設定ファイルを開いてマスカレードルールを追加する前に、マシンのパブリックネットワークインターフェースを見つける必要があります。  これを行うには、次を入力します。

				
					
[environment second]

ip route list default

				
			

パブリックインターフェイスは、このコマンドの出力で表示される、「dev」という単語に続く文字列です。たとえば、この結果は、以下で強調表示されているeth0というインターフェースを示します。

				
					
[environment second]

[secondary_label Output]

default via 159.65.160.1 dev &lt;^&gt;eth0&lt;^&gt; proto static

				
			

デフォルトルートに関連付けられたインターフェースがある場合、/etc/ufw/before.rulesファイルを開いて関連する設定を追加します。

				
					
[environment second]

sudo nano /etc/ufw/before.rules

				
			

UFWルールは、通常、ufwコマンドを使用して追加されます。ただし、before.rulesファイルに記載されているルールは、現行のUFWルールがロードされる前に読み込まれ、配置されます。ファイルの上部に向かって、強調表示された行を下に追加します。 これにより、natテーブル内のPOSTROUTING チェーンのデフォルトポリシーが設定され、VPNからのトラフィックがマスカレードされます。下の -A POSTROUTING行の <^>eth0<^>を、上記のコマンドで確認したインターフェースと置換してください。

				
					
[label /etc/ufw/before.rules]

#

# rules.before

#

# Rules that should be run before the ufw command line added rules. Custom

# rules should be added to one of these chains:

# ufw-before-input

# ufw-before-output

# ufw-before-forward

#



&lt;^&gt;# START OPENVPN RULES&lt;^&gt;

&lt;^&gt;# NAT table rules&lt;^&gt;

&lt;^&gt;*nat&lt;^&gt;

&lt;^&gt;:POSTROUTING ACCEPT [0:0]&lt;^&gt;

&lt;^&gt;# Allow traffic from OpenVPN client to &lt;^&gt;eth0&lt;^&gt; (change to the interface you discovered!)&lt;^&gt;

&lt;^&gt;-A POSTROUTING -s 10.8.0.0/8 -o &lt;^&gt;eth0&lt;^&gt; -j MASQUERADE&lt;^&gt;

&lt;^&gt;COMMIT&lt;^&gt;

&lt;^&gt;# END OPENVPN RULES&lt;^&gt;



# Don't delete these required lines, otherwise there will be errors

*filter

. . .

				
			

完了したら、ファイルを保存して閉じます。

デフォルトで転送パケットも許可するようにUFWに指示する必要があります。これを実行するには、/etc/default/ufwファイルを開きます。

				
					
sudo nano /etc/default/ufw

				
			

ファイル内で、DEFAULT_FORWARD_POLICYディレクティブを検索して、値をDROPからACCEPTに変更します。

				
					
[label /etc/default/ufw]

DEFAULT_FORWARD_POLICY="&lt;^&gt;ACCEPT&lt;^&gt;"

				
			

完了したら、ファイルを保存して閉じます。

次に、ファイアウォール自体を設定して、OpenVPNへのトラフィックを許可します。/etc/openvpn/server.confファイルで、ポートとプロトコルを変更しなかった場合、ポート1194へのUDPトラフィックを開く必要があります。ポートやプロトコルを変更した場合は、ここで選択した値に置き換えてください。

前提条件のチュートリアルに従って追加するのを忘れた場合に備えて、SSHポートも追加します。

				
					
sudo ufw allow &lt;^&gt;1194&lt;^&gt;/&lt;^&gt;udp&lt;^&gt;

sudo ufw allow OpenSSH

				
			

これらのルールを追加した後、UFWを無効化・再有効化して再起動し、変更したすべてのファイルから変更を読み込みます。

				
					
sudo ufw disable

sudo ufw enable

				
			

サーバーは、OpenVPNトラフィックを正しく処理するように設定されました。ファイアウォールルールが整い、サーバーでOpenVPNサービスを開始できるようになりました。

ステップ10 — OpenVPNの起動

OpenVPNはsystemdサービスとして起動するので、systemctl を使用して管理できます。 サーバー稼働中はいつでもVPNに接続できるように、サーバー起動時にOpenVPNも起動するように設定します。これを行うには、OpenVPNサーバーをsystemctlに追加して有効にします。

				
					
[environment second]

sudo systemctl -f enable openvpn-server@server.service

				
			

次に、OpenVPNサービスを開始します。

				
					
[environment second]

sudo systemctl start openvpn-server@server.service

				
			

次のコマンドを使用して、OpenVPNサービスがアクティブであることを再確認してください。出力に active(running)が表示されます。

				
					
[environment second]

sudo systemctl status openvpn-server@server.service

				
			
				
					
[environment second]

[secondary_label Output]

● openvpn-server@server.service - OpenVPN service for server

 Loaded: loaded (/lib/systemd/system/openvpn-server@.service; enabled; vendor preset: enabled)

 Active: active (running) since Wed 2020-04-29 15:39:59 UTC; 6s ago

 Docs: man:openvpn(8)

 https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage

 https://community.openvpn.net/openvpn/wiki/HOWTO

 Main PID: 16872 (openvpn)

 Status: "Initialization Sequence Completed"

 Tasks: 1 (limit: 1137)

 Memory: 1.0M

 CGroup: /system.slice/system-openvpn\x2dserver.slice/openvpn-server@server.service

 └─16872 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --c&gt;

. . .

. . .

Apr 29 15:39:59 ubuntu-20 openvpn[16872]: Initialization Sequence Completed

				
			

これで、OpenVPNのサーバー側の設定が完了しました。次に、クライアントマシンを設定し、OpenVPNサーバーに接続します。

ステップ11 — クライアント設定基盤の作成

OpenVPNクライアント用の設定ファイルの作成は、すべてのクライアントが独自の設定を持たなければならず、それぞれがサーバーの設定ファイルで概説されている設定と整合する必要があるため、やや複雑になります。このステップでは、1つのクライアントでのみ使用できる単一の設定ファイルを作成するのではなく、設定ファイルをその場で生成するために使用できるクライアント設定基盤を構築するプロセスの概要を説明します。最初に「ベース」設定ファイルを作成してから、必要に応じて一意のクライアント設定ファイル、証明書、および鍵を生成できるスクリプトを作成します。

先に作成した client-configsディレクトリ内にクライアント設定ファイルを保存する新しいディレクトリを作成することから始めます。

				
					
[environment second]

mkdir -p ~/client-configs/files

				
			

次に、サンプルのクライアント設定ファイルを client-configsディレクトリにコピーして、基本設定として使用します。

				
					
[environment second]

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

				
			

nanoまたは好みのテキストエディタでこの新しいファイルを開きます。

				
					
[environment second]

nano ~/client-configs/base.conf

				
			

内部で、remoteディレクティブを検索します。これにより、クライアントはOpenVPNサーバーアドレス(OpenVPNサーバーのパブリックIPアドレス)をポイントします。OpenVPNサーバーがlistenしているポートを変更することにした場合は、選択したポートに1194も変更する必要があります。

				
					
[environment second]

[label ~/client-configs/base.conf]

. . .

# The hostname/IP and port of the server.

# You can have multiple remote entries

# to load balance between the servers.

remote &lt;^&gt;your_server_ip&lt;^&gt; &lt;^&gt;1194&lt;^&gt;

. . .

				
			

プロトコルがサーバー設定で使用している値と一致していることを確認してください。

				
					
[environment second]

[label ~/client-configs/base.conf]

proto &lt;^&gt;udp&lt;^&gt;

				
			

次に、各行の先頭にある;を削除して、 userおよびgroupディレクティブのコメントを解除します。

				
					
[environment second]

[label ~/client-configs/base.conf]

# Downgrade privileges after initialization (non-Windows only)

user nobody

group nogroup

				
			

cacertkeyを設定したディレクティブを検索します。ファイル自体に証明書と鍵をすぐに追加するので、これらのディレクティブをコメントアウトします。

				
					
[environment second]

[label ~/client-configs/base.conf]

# SSL/TLS parms.

# See the server config file for more

# description. It's best to use

# a separate .crt/.key file pair

# for each client. A single ca

# file can be used for all clients.

&lt;^&gt;;&lt;^&gt;ca ca.crt

&lt;^&gt;;&lt;^&gt;cert client.crt

&lt;^&gt;;&lt;^&gt;key client.key

				
			

同様に、 ta.keyをクライアント設定ファイルに直接追加する(そしてサーバーはtls-cryptを使用するように設定してある)ため、tls-authディレクティブをコメントアウトします。

				
					
[environment second]

[label ~/client-configs/base.conf]

# If a tls-auth key is used on the server

# then every client must also have the key.

&lt;^&gt;;&lt;^&gt;tls-auth ta.key 1

				
			

/etc/openvpn/server/server.conf ファイルで設定した cipher およびauth設定をミラーリングします。

				
					
[environment second]

[label ~/client-configs/base.conf]

&lt;^&gt;cipher AES-256-GCM&lt;^&gt;

&lt;^&gt;auth SHA256&lt;^&gt;

				
			

次に、ファイルのどこかにkey-directionを追加します。 クライアントマシンでVPNが正しく機能するように、必ずこれを「1」に設定してください。

				
					
[environment second]

[label ~/client-configs/base.conf]

&lt;^&gt;key-direction 1&lt;^&gt;

				
			

最後に、LinuxベースのVPNクライアントがDNS解決に使用するさまざまなメソッドを処理するように、数行をコメントアウトします。   さらに、類似しながら別個の2行をコメントアウトします。      1つめは、DNSの管理にsystemd-resolvedを使用*しない*クライアント向けの行です。これらのクライアントは、resolvconfユーティリティを参照してLinuxクライアントのDNS情報を更新ます。

				
					
[environment second]

[label ~/client-configs/base.conf]

&lt;^&gt;; script-security 2&lt;^&gt;

&lt;^&gt;; up /etc/openvpn/update-resolv-conf&lt;^&gt;

&lt;^&gt;; down /etc/openvpn/update-resolv-conf&lt;^&gt;

				
			

ここでsystemd-resolvedを使用してDNS解決をするクライアントについてもう一行追加します。

				
					
[environment second]

[label ~/client-configs/base.conf]

&lt;^&gt;; script-security 2&lt;^&gt;

&lt;^&gt;; up /etc/openvpn/update-systemd-resolved&lt;^&gt;

&lt;^&gt;; down /etc/openvpn/update-systemd-resolved&lt;^&gt;

&lt;^&gt;; down-pre&lt;^&gt;

&lt;^&gt;; dhcp-option DOMAIN-ROUTE .&lt;^&gt;

				
			

完了したら、ファイルを保存して閉じます。

後ほど、このチュートリアルの[ステップ13 – クライアント設定のインストール](#step-13-—-installing-the-client-configuration)で、LinuxクライアントでのDNS解決方法とコメント解除するセクションを決定する方法を学びます。

次に、関連する証明書、鍵、暗号化ファイルを使用して基本設定をコンパイルし、生成された設定を~/client-configs/files ディレクトリに配置するスクリプトを作成します。~/client-configsディレクトリ内でmake_config.shという新しいファイルを開きます。

				
					
[environment second]

nano ~/client-configs/make_config.sh

				
			

内部に、次のコンテンツを追加します。

				
					
[environment second]

[label ~/client-configs/make_config.sh]

#!/bin/bash



# First argument: Client identifier



KEY_DIR=~/client-configs/keys

OUTPUT_DIR=~/client-configs/files

BASE_CONFIG=~/client-configs/base.conf



cat ${BASE_CONFIG} \

 &lt;(echo -e '&lt;ca&gt;') \

 ${KEY_DIR}/ca.crt \

 &lt;(echo -e '&lt;/ca&gt;\n&lt;cert&gt;') \

 ${KEY_DIR}/${1}.crt \

 &lt;(echo -e '&lt;/cert&gt;\n&lt;key&gt;') \

 ${KEY_DIR}/${1}.key \

 &lt;(echo -e '&lt;/key&gt;\n&lt;tls-crypt&gt;') \

 ${KEY_DIR}/ta.key \

 &lt;(echo -e '&lt;/tls-crypt&gt;') \

 &gt; ${OUTPUT_DIR}/${1}.ovpn

				
			

完了したら、ファイルを保存して閉じます。

次に進む前に、次のように入力して、このファイルのパーミッションを実行可能にします。

				
					
[environment second]

chmod 700 ~/client-configs/make_config.sh

				
			

このスクリプトは、作成したbase.confファイルのコピーを作成し、クライアント用に作成したすべての証明書と鍵ファイルを収集し、それらの内容を抽出し、それらを基本設定ファイルのコピーに追加し、このすべてのコンテンツを新しいクライアント設定ファイルにエクスポートします。つまり、クライアントの設定、証明書、および鍵ファイルを個別に管理する必要はなく、必要な情報はすべて1か所に保存されます。この利点は、将来クライアントを追加する必要がある場合、このスクリプトを実行するだけで設定ファイルをすばやく作成し、すべての重要な情報がアクセスしやすい単一の場所に保存されるようにできることです。

新しいクライアントを追加するときはいつでも、このスクリプトを実行してその設定ファイルを生成する前に、新しいクライアント用の新しい鍵と証明書を生成する必要があることに注意してください。次のステップで、このスクリプトを使用した練習を行います。

ステップ12 — クライアント設定の生成

ガイドに従って進めた場合、ステップ6で、client1.crt という名前のクライアント証明書とclient1.keyという名前の鍵を作成しました。~/client-configs ディレクトリに移動して、前のステップの最後に作成したスクリプトを実行すると、これらの資格情報の設定ファイルを生成できます。

				
					
[environment second]

cd ~/client-configs

./make_config.sh &lt;^&gt;client1&lt;^&gt;

				
			

これにより、~/client-configs/filesディレクトリにclient1.ovpnという名前のファイルが作成されます。

				
					
[environment second]

ls ~/client-configs/files

				
			
				
					
[environment second]

[secondary_label Output]

client1.ovpn

				
			

このファイルをクライアントとして使用する予定のデバイスに転送する必要があります。それはローカルコンピューターかモバイルデバイスかもしれません。

この転送に使用される正確なアプリケーションケーションは、デバイスのオペレーティングシステムと個人の好みによって異なりますが、信頼できる安全な方法は、バックエンドでSFTP(SSHファイル転送プロトコル)またはSCP(セキュアコピー)を使用することです。これにより、クライアントのVPN認証ファイルが暗号化された接続を介して転送されます。

ローカルコンピュータ(macOSまたはLinux)から実行できる SFTPコマンドの例を次に示します。これにより、前のステップで作成した<^>client1.ovpn<^>ファイルがホームディレクトリにコピーされます。

				
					
[environment local]

sftp &lt;^&gt;sammy&lt;^&gt;@&lt;^&gt;openvpn_server_ip&lt;^&gt;:client-configs/files/client1.ovpn ~/

				
			

サーバーからローカルコンピュータにファイルを安全に転送するためのツールとチュートリアルをいくつか次に示します。

ステップ13 — クライアント設定のインストール

このセクションでは、Windows、macOS、Linux、iOS、およびAndroidにクライアントVPNプロファイルをインストールする方法について説明します。各説明はどれも互いに依存性がないため、お使いのデバイスに該当するものに直接お進みください。

OpenVPN接続名は、.ovpnファイルと同名になります。 このチュートリアルでは、接続名 client1.ovpnは、最初に生成したクライアントファイル名と一致します。

Windows

インストール

OpenVPNのダウンロードページからOpenVPNクライアントアプリケーションをダウンロードします。Windowsのバージョンに適したインストーラーバージョンを選択します。

:OpenVPNをインストールするには管理者権限が必要です。

OpenVPNのインストール後、.ovpnファイルを次の場所にコピーします。

				
					
[environment local]

C:\Program Files\OpenVPN\config

				
			

OpenVPNを起動すると、プロファイルを自動的に探し出し、使用可能になります。

管理アカウントであっても、使用するたびにOpenVPNを管理者として実行する必要があります。VPNを使用するたびに右クリックしてRun as administratorを選択することなくこれを行うには、管理者権限のアカウントからこれを事前設定する必要があります。同時に、標準ユーザーはOpenVPNを使用するために管理者のパスワードを入力する必要があります。一方、標準ユーザーは、クライアントのOpenVPNアプリケーションケーションに管理者権限がない限り、サーバーに適切に接続できないため、昇格した権限が必要です。

OpenVPNアプリケーションを常に管理者として実行するように設定するには、ショートカットアイコンを右クリックして、Properties に進みます。Compatibilityタブの下部にあるChange settings for all usersボタンをクリックします。新しいウィンドウで、Run this program as an administratorをオンにします。

接続

OpenVPN GUIを起動するたびに、Windowsはプログラムがコンピューターに変更を加えることを許可するかどうかを尋ねます。Yesをクリックします。OpenVPNクライアントアプリケーションケーションを起動すると、アプレットがシステムトレイに配置されるだけなので、必要に応じてVPNを接続および切断できます。実際にはVPN接続を確立しません。

OpenVPNが起動したら、システムトレイアプレットに移動し、OpenVPNアプレットアイコンを右クリックして接続を開始します。これにより、コンテキストメニューが開きます。メニューの上部にあるclient1client1.ovpnプロファイル)を選択し、Connectを選択します。

接続が確立されている間、ステータスウィンドウにログ出力が表示され、クライアントが接続されるとメッセージが表示されます。

同じ方法でVPNから切断します。システムトレイアプレットに移動し、OpenVPNアプレットアイコンを右クリックして、クライアントプロファイルを選択し、Disconnectをクリックします。

macOS

インストール

Tunnelblickは、macOS用の無料のオープンソースOpenVPNクライアントです。Tunnelblick Downloadsページから最新のディスクイメージをダウンロードできます。ダウンロードした.dmgファイルをダブルクリックし、プロンプトに従ってインストールします。

インストールプロセスの終盤に近付くと、Tunnelblickは、設定ファイルがあるかどうかを尋ねます。I have configuration filesと答え、Tunnelblickを終了させます。Finderウィンドウを開き、client1.ovpnをダブルクリックします。Tunnelblickはクライアントプロファイルをインストールします。管理者権限が必要です。

接続

Applications フォルダのTunnelblickアイコンをダブルクリックして、Tunnelblickを起動します。Tunnelblickが起動すると、画面右上のメニューバーにTunnelblickアイコンが表示されます。アイコンをクリックしてから、 Connect client1メニュー項目をクリックして、VPN接続を開始します。

Linux

インストール

Linuxを使用している場合、ディストリビューションに応じて使用できるさまざまなツールがあります。デスクトップ環境またはウィンドウマネージャーが、接続ユーティリティも備えている可能性があります。

OpenVPNソフトウェアを使用するのが、最も一般的な接続方法です。

UbuntuまたはDebianでは、次のように入力して、サーバーにインストールしたのと同じようにインストールできます。

				
					
[environment local]

sudo apt update

sudo apt install openvpn

				
			

CentOSでは、EPELリポジトリを有効にしてから、次のように入力してインストールできます。

				
					
[environment local]

sudo dnf install epel-release

sudo dnf install openvpn

				
			

systemd-resolvedを使用したクライアントの設定

まず/etc/resolv.confファイルをチェックして、DNS解決を処理するのにsystemd-resolvedが使用されているかどうかを判断します。

				
					
[environment local]

cat /etc/resolv.conf

				
			
				
					
[secondary_label Output]

[environment local]

# This file is managed by man:systemd-resolved(8). Do not edit.

. . .



nameserver &lt;^&gt;127.0.0.53&lt;^&gt;

options edns0

				
			

systemd-resolvedを使用したDNS解決が設定されている場合、nameserverオプションの後のIPアドレスは127.0.0.53になります。systemd-resolvedがファイルを管理する方法を説明する出力のようなファイルにもコメントが含まれています。IPアドレスが127.0.0.53ではない場合、systemd-resolvedを使用していない可能性が高いため、update-resolv-confスクリプトのあるLinuxクライアントを設定する次のセクションに進みます。

これらのクライアントをサポートするために、まずopenvpn-systemd-resolvedパッケージをインストールします。このパッケージはsystemd-resolvedがDNS解決にVPNサーバーを使用するように強制するスクリプトです。

				
					
[environment local]

sudo apt install openvpn-systemd-resolved

				
			

パッケージをインストールしたら、クライアントがこれを使用して、すべてのDNSクエリがVPNインターフェースを介して送信されるように設定します。クライアントのVPNファイルを開きます。

				
					
[environment local]

nano &lt;^&gt;client1&lt;^&gt;.ovpn

				
			

先に追加した次の行のコメントを解除します。

				
					
[label client1.ovpn]

[environment local]

script-security 2

up /etc/openvpn/update-systemd-resolved

down /etc/openvpn/update-systemd-resolved

down-pre

dhcp-option DOMAIN-ROUTE .

				
			

update-resolv-confを使用したクライアントの設定

DNSの管理にsystemd-resolvedが使用されていない場合、ディストリビューションに/etc/openvpn/update-resolv-confスクリプトがあるかどうかを確認します。

				
					
[environment local]

ls /etc/openvpn

				
			
				
					
[secondary_label Output]

[environment local]

update-resolv-conf

				
			

クライアントにupdate-resolv-confファイルがある場合は、先に転送したOpenVPNクライアント設定ファイルを編集します。

				
					
[environment local]

nano &lt;^&gt;client1&lt;^&gt;.ovpn

				
			

追加した3行のコメントを解除してDNS設定を調整します。

				
					
[label client1.ovpn]

[environment local]

script-security 2

up /etc/openvpn/update-resolv-conf

down /etc/openvpn/update-resolv-conf

				
			

CentOSを使用している場合、ディストリビューションの利用可能なグループに一致するように、groupディレクティブをnogroupからnobodyに変更します。

				
					
[label client1.ovpn]

[environment local]

group &lt;^&gt;nobody&lt;^&gt;

				
			

ファイルを保存して閉じます。

接続

これで、openvpnコマンドをクライアント設定ファイルにポイントするだけで、VPNに接続できます。

				
					
[environment local]

sudo openvpn --config &lt;^&gt;client1&lt;^&gt;.ovpn

				
			

これでVPNに接続します。

注:クライアントがsystemd-resolvedを使用してDNSを管理している場合、次のようにsystemd-resolve --statusコマンドを実行して、設定が正しく適用されていることを確認してください。

				
					
[environment local]

systemd-resolve --status tun0

				
			

次のような出力が表示されます。

				
					
[secondary_label Output]

[environment local]

Link 22 (&lt;^&gt;tun0&lt;^&gt;)

. . .

 DNS Servers: &lt;^&gt;208.67.222.222&lt;^&gt;

 &lt;^&gt;208.67.220.220&lt;^&gt;

 DNS Domain: &lt;^&gt;~.&lt;^&gt;

				
			

OpenVPNサーバーで設定したDNSサーバーのIPアドレスが、出力にある*DNSドメイン*の~.設定を伴って表示されれば、クライアントはVPNサーバーのDNSリゾルバを使用するように正しく設定されています。また、DNS leak test.comのようなサイトを使用して、DNSクエリがVPNを介して送信されていることが確認できます。

iOS

インストール

iTunes App Storeから、OpenVPN Connect(公式iOS OpenVPNクライアントアプリケーション)を検索してインストールします。iOSクライアント設定をデバイスに転送するには、デバイスをコンピュータに直接接続します。

iTunesで転送を完了するプロセスの概要をここに示します。コンピューターでiTunesを開き、iPhone > appsをクリックします。File Sharingセクションまで下にスクロールして、OpenVPNアプリケーションをクリックします。 右側の空のウィンドウ OpenVPN Documents は、ファイル共有に使用します。.ovpnファイルをOpenVPNドキュメントウィンドウにドラッグします。!iPhoneにVPNプロファイルを読み込む準備ができているiTunes

iPhoneでOpenVPNアプリケーションを起動します。新しいプロファイルをインポートする準備ができたという通知を受け取ります。緑色のプラス記号をタップしてインポートします。

これで、OpenVPNを新しいプロファイルで使用する準備ができました。Connect ボタンを Onの位置にスライドして、接続を開始します。同じボタンをOffにスライドして切断します。

:VPNスイッチはSettingsで設定中、VPN接続に使用できません。接続を試みると、OpenVPNアプリケーションを使用して接続するよう通知を受け取ります。

Android

インストール

Google Playストアを開きます。公式のAndroid OpenVPNクライアントアプリケーションであるAndroid OpenVPN Connectを検索してインストールします。

AndroidデバイスをUSBでコンピュータに接続し、ファイルをコピーすることで、.ovpnプロファイルを転送できます。または、SDカードリーダーをお持ちの場合は、デバイスのSDカードを取り外してプロファイルをコピーし、Androidデバイスにカードを挿入し直すことができます。

OpenVPNアプリケーションを起動し、FILEメニューをタップしてプロファイルをインポートします。

次に、保存されたプロファイルの場所(スクリーンショットは/storage/emulated/0/openvpnを使用)に移動し、.ovpnファイルを選択します。IMPORTボタンをタップして、このプロファイルのインポートを終了します。

接続プロファイルを追加したら、次のような画面が表示されます。

接続するには、使用するプロファイルに近いトグルボタンをタップします。OpenVPNサーバーを通じてルーティングされている接続とトラフィックのステータスをリアルタイム表示します。!VPNに接続したOpenVPN Androidアプリケーション

切断するには、左上部のトグルボタンをもう一度タップします。VPNから切断するかどうか確認を求められます。

ステップ14 — VPN接続テスト(オプション)

注:ステップ7でOpenVPNファイルのserver.confを編集した際、すべてのトラフィックがVPN経由でルーティングされるように選択した場合のみ、このVPN接続テスト方式は有効です。

すべてのインストールが完了したら、簡単なチェックですべてが正常に機能していることを確認します。VPN接続を有効化せずに、ブラウザーを開いてDNSLeakTestにアクセスします。

このサイトは、インターネットサービスプロバイダーによって割り当てられたIPアドレスと、世界中に表示されるIPアドレスを返します。同じWebサイトからDNS設定を確認するには、Extended Testをクリックすると、使用しているDNSサーバーがわかります。

次に、OpenVPNクライアントをDropletのVPNに接続し、ブラウザーを更新します。完全に異なるIPアドレス(VPNサーバーのIPアドレス)が表示され、このように表示されます。繰り返しますが、DNSLeakTestExtended Test は、DNS設定をチェックして、VPNがプッシュしたDNSリゾルバを使用していることを確認します。

ステップ15 — クライアント証明書の取り消し

OpenVPNサーバーへのさらなるアクセスを防ぐために、クライアント証明書を失効させることが必要になる場合があります。

これを行うには、前提条件チュートリアルUbuntu 20.04への認証局のセットアップと設定方法の_証明書の取り消し_セクション内の例を参照してください。

これらの指示に従いクライアント証明書を取り消したら、生成したcrl.pemファイルをOpenVPNサーバーの/etc/openvpn/serverディレクトリにコピーします。

				
					
[environment second]

sudo cp /tmp/crl.pem /etc/openvpn/server/

				
			

次に、OpenVPNサーバー設定ファイルを開きます。

				
					
[environment second]

sudo nano /etc/openvpn/server/server.conf

				
			

ファイルの下部に、 crl-verify オプションを追加します。これは、接続が試行されるたびに作成した証明書失効リストをチェックするようOpenVPNサーバーに指示します。

				
					
[environment second]

[label /etc/openvpn/server/server.conf]

crl-verify crl.pem

				
			

ファイルを保存して閉じます。

最後に、OpenVPNを再起動して証明書失効を実装します。

				
					
[environment second]

sudo systemctl restart openvpn-server@server.service

				
			

クライアントは、古い資格情報を使用してサーバーに正常に接続できなくなりました。

クライアントをさらに取り消す手順は、次の通りです。

  1. ./easyrsa revoke <^>client_name<^>コマンドで証明書を取り消します。
  1. 新しいCRLを生成します。
  1. 新しい crl.pemファイルをOpenVPNサーバーに転送し、それを /etc/openvpn/server/ ディレクトリにコピーして、古いリストを上書きします。
  1. OpenVPNサービスを再起動します。

このプロセスを使用して、サーバーに対して以前に発行した証明書を取り消すことができます。

まとめ

これで完全に稼働する仮想プライベートネットワークがOpenVPNサーバーで作動するようになりました。悪意ある者によるアクティビティの追跡を心配することなく、Webを閲覧したり、コンテンツをダウンロードしたりできます。

OpenVPNインストールをさらにカスタマイズするには、VPNに自動的に接続するようにクライアントを設定したり、クライアント固有のルールとアクセスポリシーを設定するなど、実行できる手順がいくつかあります。その他のOpenVPNのカスタマイズについては、OpenVPNの公式ドキュメントを参照してください。

クライアントをさらに設定するには、追加するデバイスごとにステップ611〜13を参照してください。クライアントのアクセス権を取り消すには、ステップ15を参照してください。