ちょっと話題の記事

Amazon LightsailでiPhoneとIPSec接続するVPNサーバをワンライナーで構築する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

先日とある事情により

先日、FacebookやTwitterに繋がらない地域に旅行をしました。この際にVPN接続するサーバを構築したのでメモとして書き記します。

Amazon Lightsail

Amazon Lightsailは、AWSが提供するVPSサービスです。細かいことを考えずにサクッと利用できます。今回は、CLIからコマンドを叩いて、VPNサーバを構築したいと思います。

セットアップコマンド

さて、ワンライナーという釣りになりますが、以下のようなコマンド1発でVPNサーバを構築できます。シェアキー、ユーザ名、パスワードは各自設定してください。

$ aws lightsail create-instances \
  --instance-names test \
  --blueprint-id ubuntu_16_04 \
  --bundle-id nano_1_0 \
  --region us-east-1 \
  --availability-zone us-east-1b \
  --user-data "wget https://git.io/vpnsetup -O vpnsetup.sh && sudo VPN_IPSEC_PSK='mykey' VPN_USER='myname' VPN_PASSWORD='mypass' sh vpnsetup.sh"
  
$ aws lightsail get-instance-state  \
  --instance-name test   \
  --region us-east-1
{
    "state": {
        "code": 16,
        "name": "running"
    }
}

作成したインスタンスのIPアドレスを確認します。

$ aws lightsail get-instance   \
  --instance-name test   \
  --region us-east-1   \
  --query 'instance.publicIpAddress'   \
  --output text
XXX.XXX.XXX.XXX

次に、VPNセッションのためのポートを空けます。ここでは、UDPで500と4500を空けました。

$ aws lightsail open-instance-public-ports \
  --instance-name test \
  --region us-east-1 \
  --port-info fromPort=500,toPort=500,protocol=UDP
{
    "operation": {
        "status": "Succeeded",
  ...
    }
}

$ aws lightsail open-instance-public-ports \
  --instance-name test \
  --region us-east-1 \
  --port-info fromPort=4500,toPort=4500,protocol=UDP
{
    "operation": {
        "status": "Succeeded",
  ...
    }
}

iPhoneの設定

最後にiPhone側の設定をします。設定>一般からVPNを選択します。IPアドレス、ユーザ名、パスワード、シークレット(シェアキー)を設定してください。接続中になれば成功です。

thumb_IMG_3458_1024

まとめ

これで、FacebookやTwitterが様々な理由によりブロックされていても簡単に繋げることができます。ただし、これは先々週のお話です。今後もVPN接続ができるかどうかは分かりません。ぜひ皆さんからのレポートをお待ちしております。

参考資料

IPsec VPN Server Auto Setup Scripts