Introduction

仕事の案件で日本国外からのアクセスを拒否する AWS サーバの検証があった。
サーバの構築は別チームが担当したのだが、結合試験として自チームが作成したアプリがサーバにアクセスした際、日本国外からアクセスした時の挙動をテストする必要に駆られたわけで。

当然、テストのために海外出張なぞ出来るわけないので、VPN サーバを構築し、VPN 経由でアプリをサーバに接続することでテストすることにした。
その際、 VPN サーバを構築した際の手順をメモする。

How to use?

最初は OSS の StrongSwan を使って構築しようとした、何をどうやっても駄目だった。
IKEv2 で構築を目指したのが駄目だったのかもしれない。

吹っ切れて、docker で構築する手順を探していたら下記がビンゴ。

この記事は AWS を想定しているわけはないが、特に問題なし。
使っている VPN サーバは SoftEther

1. インスタンスの立ち上げ

最小構成で十分なので

  • t2.micro
  • Amazon Linux 2023 AMI
  • x86_64
  • 8GB EBS

を選択。

リージョンは日本国外なら何でもいいので 米国 (バージニア北部) を選択。

instance

2. セキュリティグループの設定

VPN の通信に必要なポートの開放を行う

項目 プロトコル 用途
500 UDP IKE
450 UDP IPSec
1194 UDP OpenVPN
1701 TCP L2TP
5555 TCP SoftEther

instance

3. docker のインストールと起動

EC2 Instance Connect からさくっとインスタンスに接続。

1
2
3
4
5
6
7
8
9
$ sudo yum update -y && sudo yum -y install docker && sudo systemctl start docker && sudo systemctl enable docker
$ psk=vpnsecret
$ user=vpnuser
$ password=vpnpassword
$ sudo docker run --privileged --name vpnserver \
-p 500:500/udp -p 4500:4500/udp -p 1701:1701/tcp -p 1194:1194/udp -p 5555:5555/tcp \
-e PSK=$psk \
-e USERS=$user:$password \
siomiz/softethervpn

以上。

ユーザ名やパスワード、事前共有鍵 (Pre-Shared Key、PSK) は適宜変更する。

4. 接続

Windows でさくっと検証。
iPhone でも使えることは確認済み (仕事で)。

VPN 接続を追加する をクリック。

instance

項目
VPN プロバイダー Windows (ビルトイン)
接続名 任意の値
サーバ名またはアドレス AWS のインスタンスの IP または取得した FQDN
VPN の種類 事前共有キーを使ったL2TP/IPSec
事前共有キー psk の値
サインイン情報の種類 ユーザ名とパスワード
ユーザ名 (オプション) user の値
パスワード (オプション) password の値

設定値を入力し、保存ボタンを押下。

vpn-configure

追加した接続設定が表示される。

vpn-start

接続ボタンを押下すると 接続済み になる。

vpn-finish

5. 状況の確認

VPN を経由していればアクセス先からみえる接続元の IP が変化している筈である。
下記のように接続元が北米に切り替わったことがわかる。

VPN 接続中

vpn-on

VPN 切断中

vpn-off