AWS LightsailをVPNの出口にして、固定IPで外部AWSへアクセスする方法

自宅からAWS上のサーバーなどへアクセスするとき、IP制限を行っている場合は接続元IPアドレスを固定する必要があります。
接続先のIP制限を行っている場合、自宅のインターネット回線がwifiだったり、外出先のフリーwifiを利用したりすると、接続元IPアドレスが変動し、アクセスできなくなります。
そこで今回は、AWS Lightsail上にVPNサーバーを構築し、MacからVPN経由で接続する構成を作ります。VPNソフトウェアには、オープンソースの「SoftEther VPN Server」を使います。
独自VPNの構成と環境
下の図のように、VPN経由でLightsailから出る構成にします。
これにより、自宅の回線から直接AWSへアクセスするのではなく、Lightsailを経由してアクセスできるようになります。
使用する主な環境
今回使用する主な環境は以下です。AWS LightsailにUbuntuを用意し、その上にSoftEther VPN Serverを構築します。
項目 | 内容 |
VPNサーバー | SoftEther VPN Server |
クラウド | AWS Lightsail |
OS | Ubuntu |
グローバルIP | Lightsail Static IP |
クライアント | Mac |
VPNサーバーの役割 | 自宅からのVPN接続を受け、インターネットへの出口になる |
Static IPを割り当て、このIPアドレスをVPNサーバーの固定されたグローバルIPとして利用します。
続いてUbuntuへSoftEther VPN Serverをインストールし、VPN接続に必要な設定を行います。
最後にMacからVPN接続し、実際にグローバルIPがLightsailのStatic IPになっていることを確認します。
Lightsailで独自VPNを構築する手順
Step 1:LightsailにUbuntuを作る
今回のLightsail上の構成はこれです。
まず AWSにログインし、Lightsail上にVPN用のUbuntuサーバーを1台用意します。SoftEther公式もLinux版VPN Serverの推奨環境としてUbuntuを挙げています。
Step 2:Static IPを付ける
インスタンスが作成できたら、次に固定IPを設定します。
Lightsailのインスタンスを開いて、Networking → Create static IPを選びます。
Static IPの名前は例えば、vpn-static-ipでいいです。そして、Step1で作成したインスタンスvpn-sever-01 にアタッチします。Lightsailの通常のPublic IPは、インスタンスを停止・再起動すると変わる可能性があります。Static IPを割り当てることで、同じIPを使い続けられます。
Step 3:SSHでUbuntuに入る
Static IPを設定したら、Lightsailのインスタンス画面からSSH接続します。ブラウザ上のConnect using SSHでも構いません。あるいはMacのターミナルからSSHしてもOKです。
Ubuntu / Linux / ネットワークの状態を確認しましょう。
Step 4:UbuntuにSoftEtherをインストール
Step 4-1. Ubuntuをアップデート
Ubuntuを最新にアップデートします。
sudo apt update sudo apt upgrade
Step 4-2. SoftEtherをビルドするための環境を準備
SoftEtherのソースコードをコンパイルするために、コンパイラ、ビルドツール、Git、およびSoftEtherが利用する各種ライブラリの開発用パッケージをインストールします。
sudo apt install -y build-essential cmake git
ツール | 役割 |
gcc | C/C++のソースコードをコンパイルする |
make | コンパイル作業をまとめて実行する |
cmake | プログラムのビルド設定を作る |
git | SoftEtherのソースコードを取得する |
git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git を実行。
Cloning into 'SoftEtherVPN'...という表示が出て、SoftEtherVPN というディレクトリが作られます。
cd SoftEtherVPNで、そのディレクトリに移動します。
次にcmake -S . -B buildを実行し、足りないとエラーが出るので、追加していきます。
gcc make cmake git pkg-config libsodium-dev libncurses-dev libssl-dev zlib1g-dev libreadline-devをインストールしました。
ハマった箇所としては、小容量インスタンスだったので、インストールができず、2GBのSwap を作りました。
Step4-3. ビルド
cmake --build build -j2を実行。
CMakeが作った設計情報を使って、SoftEtherのソースコードを実際の実行プログラムにコンパイルする処理です。
今回はメモリが412MiBしかないので、-j2 にしておきます。
ビルドが成功すると、buildディレクトリの中に、
vpnserver vpncmd vpnclient vpnbridgeなどの実行ファイルが生成されます。
Step4-4.インストール(配置)
Step4-3でSoftEtherをコンパイルして実行ファイルを作りました、作ったファイルをOS上の所定の場所に配置します。
sudo cmake --install buildを実行。
ここから重要になるのが、VPN Server本体のvpnserverと、設定・管理に使用するvpncmdです。
vpnserver:VPN接続を受け付けるVPNサーバー本体
vpncmd:VPNサーバーの設定・管理に使用するコマンド
Step 5:SoftEther VPN Serverを設定する
SoftEther VPN Serverを実際にVPNサーバーとして動作させるための設定を行います。
Step5-1.VPN Serverを起動する
手動で起動します。sudo systemctl start softether-vpnserver
ステータスを確認します。systemctl status softether-vpnserver
自動起動を設定します。sudo systemctl enable softether-vpnserver
Step5-2.VPN Serverの管理者パスワードを設定する
次に vpncmd を起動します。/usr/local/bin/vpncmd
次のような選択肢が表示されます。
Management of VPN Server or VPN Bridge
Management of VPN Client
Use of VPN Tools
ここでは、1を入力します。
その後、Hostname of IP Address of Destination:の表示になるので、VPN Server自体を管理するので、「localhost」を指定します。
ServerPasswordSet を実行し、パスワード決めましょう。
Step5-3.HUBを作成する
HubCreate VPNHUB をすると、仮想HUBの管理者パスワードを設定するよう求められるはずです。
ここで設定するパスワードは、先ほど設定したVPN Server全体の管理者パスワードとは別物です。
Step5-4.VPN接続用ユーザーを作成する
ここで作るユーザーが、後でMacからVPN接続するときのログインユーザーになります。今回は VPNHUB にユーザーを作ります。
Hub VPNHUBを入力してください。VPNHUB>に変わります。
UserCreate vpnuserと入力します。
UserPasswordSet vpnuserを実行し、パスワードを決めましょう。
Step5-5.VPN接続に必要な設定を行う
次は VPNHUBからインターネットへ出られるようにする「SecureNAT」 を設定します。VPNクライアントからの通信を、SoftEtherの仮想NATを経由してインターネットへ転送するための機能です。
VPNHUBで、SecureNatEnableを実行します。
PC(VPNクライアント)からの通信は、L2TP/IPsec を組み合わせた VPN 方式を設定します。IPsec(Internet Protocol Security)は、IP通信を暗号化・認証し、通信の機密性や完全性を確保するためのプロトコル群です。
VPN Serverで、IPsecEnableを実行。
L2TP over IPsec → yes
Raw L2TP → no
EtherIP/L2TPv3 → no
IPsec Pre-Shared Key
Default Virtual HUB:
VPNHUB
Step 6:Lightsail側で必要なポートを開放する
この設定が完了すると、Lightsail上のSoftEther VPN ServerがMacからのVPN接続を受け付けられる状態になります。
まずLightsailの管理画面を開き対象のインスタンス → Networking → Firewallを開いてください。
L2TP/IPsecでは、役割の異なる3つのUDPポートを使用します。UDP 500はIPsecの接続開始、UDP 4500はNAT環境でIPsecを利用するためのNAT-T、UDP 1701はL2TPの通信に使用されます。
Step 7:MacからVPN接続する
SoftEther VPN Serverの設定が完了したら、MacからLightsail上のVPN Serverへ接続します。
Macの設定でネットワークを開きます。VPNの構成追加の中から「L2TP over IPsec」を選択。
L2TP over IPsecの設定では先ほど、設定した項目をもとを入力します。
VPN接続後は、Macからインターネットへアクセスする通信をLightsail経由にします。
最後にグローバルIPアドレスを確認し、VPN接続前と接続後でIPアドレスが変わっていることを確認します。
VPN接続後に確認できるグローバルIPアドレスが、Lightsailに割り当てたStatic IPになっていれば、今回の構成が正しく動作しています。
VPNを構築しておくことでリモートでも作業できるようになります。安価に収まるのも非常に良い点ではないでしょうか。



