📝
ECS on EC2 で VPN サーバーを構築してみた
Amazon ECS タスクおよびコンテナのセキュリティのベストプラクティス - Amazon Elastic Container Service
AWS Fargate 上の Amazon ECS では、コンテナを privileged として実行することはサポートされていません。
Fargate ではできなかったので EC2 起動タイプでやってみました。
前提
- VPN の接続元端末は Windows PC
1. ECS クラスターの作成
EC2 起動タイプでクラスターを作成します。
必要な容量で最小、最大を 1 に設定しましたが、その他の設定はデフォルト値です。
2. セキュリティグループのルール変更
VPN サーバーへの接続にあたり、以下のインバウンドルールを追加しました。
- カスタム UDP
- ポート範囲: 500
- ソース: マイ IP
- カスタム UDP
- ポート範囲: 4500
- ソース: マイ IP
- カスタム TCP
- ポート範囲: 1701
- ソース: マイ IP
3. タスク定義の作成
以下の内容で作成しました。
注意点として、privileged を true に設定する必要がありますが、この設定は JSON を編集する方法でのみ変更可能です。
{
"compatibilities": [
"EC2"
],
"containerDefinitions": [
{
"cpu": 0,
"environment": [
{
"name": "USERS",
"value": "test-user:test2025"
},
{
"name": "PSK",
"value": "test2025"
}
],
"essential": true,
"image": "siomiz/softethervpn",
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/vpn-server-task",
"awslogs-create-group": "true",
"awslogs-region": "ap-northeast-1",
"awslogs-stream-prefix": "ecs"
}
},
"mountPoints": [],
"name": "vpn-server",
"portMappings": [
{
"containerPort": 500,
"hostPort": 500,
"protocol": "udp"
},
{
"containerPort": 4500,
"hostPort": 4500,
"protocol": "udp"
},
{
"containerPort": 1701,
"hostPort": 1701,
"name": "vpn-server-1701-tcp",
"protocol": "tcp"
}
],
"privileged": true,
"systemControls": [],
"volumesFrom": []
}
],
"cpu": "1024",
"enableFaultInjection": false,
"executionRoleArn": "arn:aws:iam::012345678901:role/ecsTaskExecutionRole",
"family": "vpn-server-task",
"memory": "3072",
"networkMode": "host",
"placementConstraints": [],
"registeredAt": "2025-08-26T04:28:53.846Z",
"registeredBy": "xxx",
"requiresAttributes": [
{
"name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
},
{
"name": "ecs.capability.execution-role-awslogs"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
},
{
"name": "com.amazonaws.ecs.capability.privileged-container"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.29"
}
],
"requiresCompatibilities": [
"EC2"
],
"revision": 2,
"runtimePlatform": {
"cpuArchitecture": "X86_64",
"operatingSystemFamily": "LINUX"
},
"status": "ACTIVE",
"taskDefinitionArn": "xxx",
"volumes": [],
"tags": []
}
4. タスクの作成
手順 3 のタスク定義でタスクを作成します。
クラスターは手順 1 で作成したクラスターを指定します。
5. 動作確認
タスクが起動したらパブリック IP を確認しておきます。
Windows のネットワークとインターネットの設定を開き、VPN を追加します。
VPN 追加時の設定値は以下の通りです。
- 接続名: 任意の名称
- サーバー名または IP アドレス: タスクのパブリック IP アドレス
- VPN の種類: 事前共有キーを使った L2TP/IPsec
- 事前共有キー: test2025
- ユーザー名: test-user
上記設定で保存後、接続をクリックします。
サインインのポップアップが表示されるので以下の値を入力して OK をクリックします。
- メールアドレス: test-user
- パスワード: test2025
接続済みになれば VPN 接続完了です。
まとめ
今回は ECS on EC2 で VPN サーバーを構築してみました。
どなたかの参考になれば幸いです。
Discussion