この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Amazon LightsailとTailscaleを使い、AWS上でVPNサーバーをシュッと構築する方法を紹介します。
Amazon Lightsail
Amazon Lightsailは、AWSが提供するVPSサービスです。 AWSは世界各地にデータセンターを集積したリージョンが存在します。
VPNサーバを特定のリージョンに作成すると、VPN接続時はそのリージョンのあるエリアからアクセスしていることになります。
東京リージョンにVPNサーバを構築すれば、日本ローカルのサービスにアクセスしたり、ソーシャルメディアが規制されているエリアに滞在中の迂回策としても利用できます。
参考 : Amazon Lightsail を利用可能なリージョン
Tailscale
Tailscale はデバイス・アプリケーション同士をP2Pのメッシュネットワークで通信させるVPNサービスです。 Linuxカーネルにも組み込まれているWireGuardをベースに実装されています。
デフォルト設定では、スプリットトンネル的に、Tailscaleネットワーク向けトラフィックにのみ Tailscaleは割り込みます。
Exit Node機能を利用すると、Tailscaleネットワーク外へのトラフィック(0.0.0.0/0
;デフォルトルート)をTailscaleネットワークの特定のノード(exit node)に向けることができます。
※ 図の引用元 Exit Nodes (route all traffic) · Tailscale
やってみた
今回は Tailscale の exit node を東京リージョンの Amazon Lightsail インスタンス上に作成し、Tailscale をインストールしたクライアントからこのインスタンスのIP経由でインターネット通信できることを確認します。
Tailscaleのアカウント開設
まずは次の URL から Tailscale のアカウントを開設します。
Google/Microsoft/GitHubのアカウントでSSOします。
また、接続に利用する端末にTailscaleエージェントをインストールしてください。
認証キーの事前発行
Tailscaleネットワークに新しいノードを参加させるには、基本的には、インタラクティブに認証させる必要があります。
今回は、CloudFormation のプロビジョニング中に認証も済ませたいため、認証キーを事前に発行します。
管理コンソールのSettings → Keys → Auth Keys から認証キーを発行します。
- 認証キーを使い回さないため、Reusable : Off
- exit node は一時停止する可能性もあるため、 Ephemeral : Off
とします。
認証キーをあとから再取得することはできません。ご注意ください。
AWS CloudFormationで Lightsail サーバーを起動
Amazon CloudFormation は AWSリソースを構築する IaC サービスです。
次のテンプレートをお好みのリージョン(例えば東京)から実行します。
テンプレート最終行の --authkey tskey-XXX
には、先の手順で取得した認証キーに置き換えてください。
tailscale.yml
AWSTemplateFormatVersion: "2010-09-09"
Description: Tailscale
Resources:
TailscaleNode:
Type: AWS::Lightsail::Instance
Properties:
BlueprintId: ubuntu_20_04
BundleId: nano_2_0
InstanceName: TailScaleExitNode
Networking:
Ports:
- AccessDirection: inbound
AccessFrom: "Anywhere (0.0.0.0/0)"
AccessType: Public
Protocol: udp
FromPort: 41641
ToPort: 41641
UserData: |
#!/bin/bash -xe
# enable ip forwarding
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' >> /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf
# install tailscale
curl -fsSL https://tailscale.com/install.sh | sh
# register node
tailscale up --advertise-exit-node \
--hostname=lightsail-exit-node \
--authkey tskey-XXX # 認証キーを入れ替える
具体的にやっていることは以下です。
- Amazon Lightsail Nano を起動
- $3.5/月
- 512 MB, 1 コアプロセッサ、20 GB, 毎月1TBまでデータ転送無料
- OS に Ubuntu 20.04を利用
- IP フォーワードを有効
- tailscale のインストール
- ノードを exit-node として登録
- UDP 41641ポートへのインバウンド通信を許可(Tailscaleの要件)
CloudFormationスタックのステータスが CREATE_COMPLETE
になっていることを確認し、LightSail インスタンスも Running
になっていることを確認してください。
Tailscaleコンソールから exit node の承認
CloudFormation で作成したノードは、起動時に exit node となるようにリクエストしています。 Tailscaleコンソールからこのリクエストを承認します。
exit nodeは「lightsail-exit-node」のノード名で作成しています(--hostname=lightsail-exit-node
)。
Machines 一覧に、新しいノードが追加されていることを確認し、Edit Route Settings から "Use as exit node" をチェックします。
クライアントのルーティングモードを変更
Tailscaleクライアントから Exit Node のメニューを確認すると、先程登録した exit node(lightsail-exit-node
) を選択できるようになっています。
このノード経由でインターネット通信するよう変更しましょう。
次の URL ような、IPアドレスの場所・所有者を解析するサービスにアクセスし、IPアドレス・ロケーションが構築したAmazon Lightsailのインスタンス・リージョンのものに変わっていることを確認しましょう。
https://www.ip2location.com/demo
利用費
本ソリューションの TailscaleとAWSの利用費を試算します。
Tailscale の利用費
個人用途で少数のデバイスでTailscaleを利用する限り、Tailscaleの利用費は無料です。
AWS の利用費
今回利用した Amazon Lightsail nano スペックの 1ヶ月の利用費は $3.50 です。 この中には、1TBのデータ転送量も含まれています。
そのため、ヘビーに使わない限りは、仮に起動し続けても、月の利用費は $3.50 程度に収まります。
VPNを利用しないときはLightsailを停止すると、利用費は更に安くなります。
VPS, web hosting pricing—Amazon Lightsail—Amazon Web Services
まとめ
TailscaleのExit Nodeを利用したVPNソリューションを紹介しました。
WireGuardに慣れた人なら、0から構築することも可能でしょうが、TailscaleとAmazon Lightsail/CloudFormationを組み合わせると、簡単かつスピーディーに構築できます。
それでは。