AWS LightsailでOpenVPNサーバーを構築してみる(基礎編)
今回は、簡単に再現できるVPNサービス構築の手順を実演します。
使用するサーバーはAWSのLightsail、VPNサーバーはOpenVPNを使用します。
基礎的な実演のため、詳細なセキュリティ設定などは今回の記事では扱いません。
Lightsailとは
Lightsailは、AWSが提供するシンプルなVPS(仮想プライベートサーバー)サービスです。
月額固定料金で利用でき、プランごとに一定のデータ転送量が含まれています。
(含まれた転送量を超えると追加料金が発生します。)
AWS Lightsailのメイン画面
現在、すでに1台のサーバーを利用していますが、それとは別に新しいサーバーを作成していきます。
サーバーの作成
プラットフォームはOperating System、BlueprintはUbuntu 24を選択
画像のように、プラットフォームはOperating Systemをクリックし、BlueprintはUbuntu 24を選択します。
Blueprintとは、AWS内であらかじめ用意されたテンプレートのようなものだと考えてください。
リージョンを選択するよう赤色でマークしたリンクをクリックします。
ここでは、米国リージョンの中からOregonリージョンを選択します。
ネットワークタイプは、IPv4とIPv6の両方を利用できるDual-Stackを選択します。
IPv4アドレスが不要な場合は、IPv6-onlyを選択しても問題ありません。
参考までに、IPv4アドレスとは私たちが普段よく見る 123.123.123.123 のような、4つの数字ブロックで区切られたアドレスです。
一方、IPv6はそれよりもはるかに長く複雑な 2001:0db8:85a3:0000:0000:8a2e:0370:7334 のような形式のアドレスです。
インスタンス(サーバーの呼称単位)の名前は、識別しやすい一意の名前を付けます。
スナップショットは、万が一の障害に備えたバックアップイメージです。
必要に応じてチェックしてください。今回は簡単な実演のため、チェックしません。
タグは、AWSサービス内で作成したサーバーを識別・管理するためのラベルのようなものです。
今回は国を区別する目的だけで使用するため、country タグキーのみを設定します。
インスタンスが作成されると、自動的にパブリックIPv4アドレスとIPv6アドレスが割り当てられます。
また、Amazonのプライベートネットワークで使用されるプライベートIPv4アドレスも1つ生成されます。
(現時点では「こういうものが存在する」程度に理解しておけば十分です。)
本記事は単純な実演用のため公開しても特に問題ありませんが、実際の運用では外部に公開しないことを強く推奨します。
(DDoS攻撃のターゲットになる可能性があるためです。)
IPv4アドレスを固定する(アタッチ)
IPv6アドレスと異なり、IPv4アドレスはサーバーを停止・起動するたびに変わることがあります。
これはIPv4アドレスが枯渇しつつあるアドレス体系のため、AWS内でも体系的に管理されているからです。
IPv4を所有(固定)するには、このIPを固定する必要があります。
Lightsailではこれを 静的IP(Static IP) と呼びます。
NetworkingタブでAttach Static IPを選択
Attach Static IPをクリックし、希望する名前を指定して確認を押します。
ネットワークトラフィックを許可する
AWS(Lightsail) はデフォルトで、80番(HTTPで使用するポート) と 22番(SSHリモート接続) のTCPポート以外は、すべてのポートを遮断します。
一般的に私たちが利用するインターネットトラフィックの多くはUDPを使用しており、今回使用するOpenVPNもデフォルトでUDP経由で通信します(変更は可能です)。
Networkingタブの下部にあるFirewallルール設定画面で、UDPプロトコルとOpenVPNと通信するUDPポートを開放します。
なお、上記は実演用のためすべてを開放しています。
実際のサービスではすべてのポートを開放するのは避け、Firewallルールは最小限の権限を基本に厳格に運用する必要がある点を覚えておいてください。
OpenVPNで使用するデフォルトのUDPポートは1194のため、これを許可します。
また、許可するIPv4およびIPv6のソースIPも、以下のようにすべて開放します。
UDP 1194ポートとすべてのソースIPを許可
サーバーへのリモート接続用SSHキーの発行
上記画像のセクションのように、まずSSHキーをダウンロードします。
(キーの管理は厳重に行ってください!)
サーバーに接続してOpenVPNサーバーをインストール
別途SSH接続プログラムをインストールすることなく、ブラウザ経由でAWSのSSH環境を使用してサーバーに接続します。
Connectタブに戻り、Connect using SSHボタンを押してサーバーにアクセスします。
オープンソース OpenVPN-Install を利用した簡単インストール
本格的にOpenVPNサーバーをインストールしていきます。
OpenVPNをゼロから手動でインストールしようとすると、複雑な環境設定によりトラブルシューティングに時間を取られることになります。
これを最初から避けるため、使いやすいオープンソースを活用しましょう。
今回使用するオープンソースプロジェクトは、angristan氏の openvpn-install です。
https://github.com/angristan/openvpn-install
最近は優れたオープンソースが非常に多く、目的のソリューションがあれば積極的にオープンソースを活用する方が良いと考えています。
パッケージマネージャーを更新する。
$ sudo apt update
ファイルのダウンロードおよび実行権限の付与
$ curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
$ chmod +x openvpn-install.sh
chmod +x コマンドは、該当ファイルに実行権限を付与する意味です。
Linuxでは、curlなどで外部からダウンロードしたファイルはセキュリティ上の理由でデフォルトで実行権限が外されているため、実行権限を付与しましょう。
実行権限がないと実行できません。
openvpn-install.sh インタラクティブ実行
上記の画像のように、実行権限(x)が付与されるとファイルの色が緑色で表示されます。
該当ファイルを以下のコマンドで実行します。
$ sudo ./openvpn-install.sh interactive
上記のコマンドを実行すると、以下のように対話型でインストールが進行します。
順次表示される質問は、ほとんどの場合デフォルト値のままEnterキーを押して進めて問題ありません。
私も基本的にデフォルト値で設定しました。
以下が私の回答内容です。
What IP version should clients use to connect to this server?
> 1 (IPv4)
It seems this server is behind NAT. What is its public IPv4 address or hostname?
> 35.88.182.243
What IP versions should VPN clients use?
> 3 (Dual-stack (IPv4 + IPv6))
IPv4 VPN subnet:
> 1 (Default: 10.8.0.0/24)
IPv6 VPN subnet:
> 1 (Default: fd42:42:42:42::/112)
Route client internet traffic through the VPN? [y/n]
> y
Allow VPN clients to access each other? [y/n]
> n
Allow VPN clients to access the server's local network? [y/n]
> n
What port do you want OpenVPN to listen to?
> 1 (Default: 1194)
What protocol do you want OpenVPN to use?
> 1 (UDP)
What DNS resolvers do you want to use with the VPN?
> 3 (Cloudflare)
Allow multiple devices per client? [y/n]
> n
Do you want to customize the tunnel MTU?
> 1 (Default: 1500)
Choose the authentication mode:
> 1 (PKI)
Do you want to customize encryption settings? [y/n]
> n
Tell me a name for the client.
> tester
How many days should the client certificate be valid for?
> 3650
Do you want to protect the configuration file with a password?
> 2 (Use a password for the client)
ちなみにRoute client internet traffic through the VPN? は、必ず Y を選択してください。
N にすると、すべてのインターネットトラフィックがVPNサーバーを経由しなくなるため、他国のサービス利用に制限が生じる可能性があります。
VPNサーバー接続のための事前準備
対話型モードの回答がすべて終わると、スクリプト内でPKIの生成や必要な一連の処理が自動的に行われます。
最終的に、下記の画像のように.ovpnファイルが生成されます。
このファイルがOpenVPNサーバーに接続するための重要な設定ファイルです。
このファイルを、私たちが使用しているローカルコンピュータにダウンロードする必要があります。
そのためにSCPというプロトコルを利用します。SCPはTCP 22番ポートのSSH通信を活用したファイル転送プロトコルです。
scp -i C:\Users\me\aws\sshkey.pem ubuntu@35.88.182.243:/home/ubuntu/tester.ovpn C:\Users\me\aws\tester.ovpn
Windows 11 では、デフォルトでSSHおよびSCPがインストールされています。
もし入っていない場合は、別途インストールしてください。
上記のコマンドを、自分のPCの PowerShell または コマンドプロンプト(CMD) で実行します。
もちろん、該当する例の サーバーIP、ユーザー名、キー名はすべて私が使用しているサンプルですので、ご自身の情報をご入力ください。
OpenVPNクライアントで接続をテストする
本格的に OpenVPNクライアント をインストールして接続をテストしてみましょう。
OpenVPNクライアントは、OpenVPN公式が提供するクライアントアプリケーションです。
他のサードパーティ製アプリではなく、こちらの公式クライアントの使用を推奨します。
アプリをインストールしたら、先ほどダウンロードした.ovpnファイルをインポートして接続してみましょう。
無事に接続が完了したことを確認できます。
また、mylocation.org で位置情報を確認したところ、無事にOregonリージョンとして表示されることを確認できます。


















