AWSのEC2にVPNサーバーを建てる

AWS

はじめに

このたびタイに移住したのですが、困ることは日本国内からしか使えないサービスがあること。

銀行や行政関連のサイトも海外アクセスが禁止されているところもあるかもしれません。
全てが遮断されているわけでは無いですが、手続きを行おうと思ってアクセス不可となっていたサイトが1件有りました。

また、例えばNet flixやAmazon primeなどの動画サービス(日本版)。
Kindleでの書籍購入も、最初は問題ないようですが何度か購入していると国外からの購入ができなくなるようです。

そんな環境で便利なのがVPNです。
IPアドレスを日本のものに変換できるので、海外からのアクセスを制限しているサイトでも閲覧できます。

本記事では、個人利用でIPアドレス変換を目的としたVPNの構築についてまとめます。

運用環境について

今回は個人利用目的のため、できるだけ安く済ますことを目的に選択しました。

AWSのEC2なら使うときだけ起動すれば良いので費用を抑えられることが期待できます。
また、個人利用なので複雑な構成は考えず、EC2のみの構成です。

VPNはSoftEatherのDocker版があるのでそちらを利用しました。

構築手順

EC2の立ち上げから説明していますので、不要な方は「VPNのセットアップ」まで飛ばしてください。

EC2インスタンスの起動

AWSコンソールにサインイン

まずはAWSコンソールにサインインします。
アカウントが未作成の場合は「新しいAWSアカウントの作成」から作成できます。(※アカウント登録手順は割愛します)

サインイン後の画面でEC2を選択して、EC2管理画面へ移動します。

また、今回の目的は日本のVPNを作成することですので、東京リージョンになっていることを確認してください。

インスタンスの起動

EC2インスタンスを作成します。

「インスタンスを起動」から作成できます。

AMIの選択で一番上の「Amazon Linux 2」を選択

インスタンスタイプは無料枠の使えるt2.microを選択しました。

t2.microは、テキストベースのサイトなどは(遅いけど)問題ないですが、動画やビデオ会議などは苦しいと思います。
実際に試してみてインスタンスタイプを調整してください。

セキュリティグループから、VPNで使うポートを設定

その他の設定はデフォルトのままにしています。

以上を設定したら「起動」をクリックします。

「起動」をクリックすると、キーペアを作成するかと聞かれるので、作成してダウンロードします。
このキーファイルはSSHでアクセスする際に必要です。
(AWSコンソールからアクセスする場合は不要ですが、一応ダウンロードしておきます)

Elastic IPの設定

インスタンスを起動するたびにIPアドレスが変わるのは面倒なので、固定IPアドレスを割り当てます。

左のメニューから「ネットワーク&セキュリティ」→「Elastic IP」を選択します。

「Elastic IP アドレスの割り当て」をクリックします。

これでElastic IP アドレスが作成されます。

続いて、作成したElastic IP アドレスをインスタンスのに関連付けます。

右上のアクションタブから「Elastic IP アドレスの関連付け」を選択します。

関連付けるインスタンスを選択して「関連付ける」をクリック。

インスタンスを確認し、Elastic IP アドレスが割り当てられていれば完了です。

インスタンスの立ち上げ

「インスタンスを開始」をクリックしてインスタンスを立ち上げます。

インスタンスへの接続

インスタンスへ接続して操作するには、SSHでの接続やAWSのコンソールを利用します。

インスタンス一覧画面から、実行中のインスタンスを選択し、上の方の「接続」ボタンを押します。

「EC2 Instance Connect」タブを開いて「接続」を押すとターミナルが開きます。

また、「SSH クライアント」タブにはSSHで接続する際のコマンド例が記載されています。
SSHでの接続方法は割愛します。

VPNのセットアップ

VPNは、SoftEather VPNのDocker版があるので、それを使います。

事前確認

インスタンスで下記のポートが空いていることを確認してください。

タイププロトコルポート範囲ソース説明
カスタム UDPUDP 5000.0.0.0/0
カスタム UDPUDP 45000.0.0.0/0
カスタム TCPTCP 17010.0.0.0/0

セットアップ

AWSにログインした後のターミナルで下記コマンドを実行していきます。

① パッケージの更新

$ sudo yum update -y

② Dockerのインストール

$ sudo amazon-linux-extras install docker

③ Dockerサービスの起動

サービス起動と、自動起動するよう設定しておきます。

$ sudo service docker start
$ sudo systemctl enable docker

④ VPNの実行

<事前共有キー> 、<ユーザ名>、<パスワード> は任意の文字列を設定してください。

また、コピペする際は途中で区切らずまとめて実行してください。

$ sudo docker run --rm -d --privileged -p 500:500/udp -p 4500:4500/udp -p 1701:1701/tcp \
  -e PSK='<事前共有キー>' \
  -e USERS='<ユーザ名>:<パスワード>' \
  siomiz/softethervpn

上のコマンドを実行するとVPNサーバーが立ち上がります。

なお、この段階ではインスタンスを再起動するたびにDockerが停止した状態になるため、VPNを手動で起動する必要があります。
その場合は、上記③、④を実行すればOKです。

また、自動化の方法をこちらに記載しています。

Windows PCから接続

手持ちのPCがWindows 10のみのため、Windowsマシンからの接続方法を説明します。

Windowsの設定ウィンドウを開き、「ネットワークとインターネット」→「VPN」を選択します。

「VPN 接続を追加する」をクリックして設定を追加します。

VPNの起動時に設定した <事前共有キー> 、<ユーザ名>、<パスワード> を入力します。
※VPNの種類は「事前共有キーを使ったL2TP/IPsec」を選択してください。

作成したVPNを選択し、「接続」を押すと繋がります。

もし繋がらない場合はサーバーの設定を見直してください。

VPNへの接続は、タスクバー右下の「ネットワークアイコン」からネットワークの一覧を開いたところにも表示されます。

自動化の設定

上記手順では、Dockerをインスタンスを起動するたびに手動実行する必要がありました。
それでは結構な手間なので、自動で実行されるように設定します。

Amazon Linux 2 の自動起動にはsystemdを利用します。

VPN起動スクリプトを作成

① スクリプト作成

$ sudo vi /usr/local/bin/exec_vpn.sh

下記内容を記述。

#!/bin/sh

case "$1" in
 start)
       docker run --rm -d --privileged -p 500:500/udp -p 4500:4500/udp -p 1701:1701/tcp \
           -e PSK='<事前共有キー>' \
           -e USERS='<ユーザ名>:<パスワード>' \
           siomiz/softethervpn
       echo "start"
       ;;
 stop)
       /usr/bin/pkill docker
       echo "stop"
       ;;
 *) break ;;
esac

※ <事前共有キー> 、<ユーザ名>、<パスワード> は任意の文字列を設定してください。
前章で設定した内容と同じで大丈夫です。

②パーミッションを設定

$ sudo chmod 755 /usr/local/bin/exec_vpn.sh

systemdのユニットファイル作成

$ sudo vi /etc/systemd/system/vpn.service

下記内容を記述。

[Unit]
Description = Run SoftEather VPN
After=network-online.target

[Service]
Restart=no
Type=simple
RemainAfterExit=yes
ExecStart=/usr/local/bin/exec_vpn.sh start
ExecStop=/usr/local/bin/exec_vpn.sh stop

[Install]
WantedBy=network-online.target

自動起動の設定

以下のコマンドを実行して、自動起動の設定を行います。

$ sudo systemctl daemon-reload
$ sudo systemctl enable vpn

以下のコマンドで登録されたかを確認できます。

$ systemctl list-unit-files | grep vpn

終わりに

上記の操作でVPNに接続したら、無事に日本のコンテンツを表示することが出来ました。

今回とは逆に、日本にいながら外国のコンテンツにアクセスしたり、アクセス制限されている国から国外情報を見たりするときにも役に立つかと思います。

t2.microインスタンスでのVPN接続ではお世辞にも早いとは言えないため、動画閲覧やビデオ会議などをやる場合はもっと上位のものに切り替える必要があるかと思います。

謝辞

本記事ではこちらを参考にさせていただきました。
ありがとうございます。

Amazon LightsailでSoftether VPNをたてる - 基素基
L2TP/IPsecのVPNサーバーをAmazon Lightsailをつかってたてる手順 SoftEther VPNをつかう 本当にこの通りに上からやっていくとできる。なれたら5分ぐらいでできるのではないか。 サーバー側 インスタンス作る ホストのポートを開放する DockerでS
AWSにSoftEther VPNServerで簡単にVPN接続しよう | DevelopersIO
まえがき おはようございます。加藤です。EC2への接続を制限したい場合は、セキュリティグループで送信元IPで規制するのが有名・簡単ですね。 しかし、流行りのDS-LiteやWiMAXなどのグローバルIPを共有するサービス …
AWSを使ってVPNサーバを組む。やっとできたのでやり方をご紹介。
Amazon Linux 2 が起動してネットワークが有効になった後で自作スクリプトを実行する方法を調べてみた | DevelopersIO
Amazon Linux 2 への移行はお済みでしょうか?起動時にスクリプトを実行する場合にどうするべきなのかとお悩みでしたら是非ご一読ください。

コメント

タイトルとURLをコピーしました