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

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

自宅からAWS上のサーバーなどへアクセスするとき、IP制限を行っている場合は接続元IPアドレスを固定する必要があります。

接続先のIP制限を行っている場合、自宅のインターネット回線がwifiだったり、外出先のフリーwifiを利用したりすると、接続元IPアドレスが変動し、アクセスできなくなります。

そこで今回は、AWS Lightsail上にVPNサーバーを構築し、MacからVPN経由で接続する構成を作ります。VPNソフトウェアには、オープンソースの「SoftEther VPN Server」を使います。

独自VPNの構成と環境

下の図のように、VPN経由でLightsailから出る構成にします。

home line route comparison

これにより、自宅の回線から直接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上の構成はこれです。

lightsail softether vpn architecture

まず AWSにログインし、Lightsail上にVPN用のUbuntuサーバーを1台用意します。SoftEther公式もLinux版VPN Serverの推奨環境としてUbuntuを挙げています。

Lightsail

Step 2:Static IPを付ける

インスタンスが作成できたら、次に固定IPを設定します。

Lightsailのインスタンスを開いて、Networking → Create static IPを選びます。

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を実行し、足りないとエラーが出るので、追加していきます。

error

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

次のような選択肢が表示されます。

  1. Management of VPN Server or VPN Bridge

  2. Management of VPN Client

  3. Use of VPN Tools

ここでは、1を入力します。

その後、Hostname of IP Address of Destination:の表示になるので、VPN Server自体を管理するので、「localhost」を指定します。

ServerPasswordSet を実行し、パスワード決めましょう。

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を実行します。

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

IPsecEnable

Step 6:Lightsail側で必要なポートを開放する

この設定が完了すると、Lightsail上のSoftEther VPN ServerがMacからのVPN接続を受け付けられる状態になります。

まずLightsailの管理画面を開き対象のインスタンス → Networking → Firewallを開いてください。

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」を選択。

VPN接続

L2TP over IPsecの設定では先ほど、設定した項目をもとを入力します。

Lightsail経由

VPN接続後は、Macからインターネットへアクセスする通信をLightsail経由にします。

最後にグローバルIPアドレスを確認し、VPN接続前と接続後でIPアドレスが変わっていることを確認します。

VPN接続後に確認できるグローバルIPアドレスが、Lightsailに割り当てたStatic IPになっていれば、今回の構成が正しく動作しています。

VPNを構築しておくことでリモートでも作業できるようになります。安価に収まるのも非常に良い点ではないでしょうか。

Related

関連記事

ご相談やお仕事の依頼など
お気軽にお問い合わせください。

CONTACT