0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Tailscaleと無料枠AWSで“ほぼ無料”VPNを作成してみた

0
Last updated at Posted at 2026-10-25

TailscaleとAWS無料枠EC2でつくる“ほぼ無料”VPN

喫茶店やホテルで無料Wifiに接続しながらECサイトで注文するとき、少しセキュリティへの不安を感じませんか?
かといって商用VPNはコストが高く、携帯回線のテザリングでは料金、速度の問題がある…

そんな理由で、AWSの勉強がてら、TailscaleとAWSの無料枠EC2を組み合わせて構築しました。

セキュリティ向上目的だけではなく、世界各地のExit Nodeを用意することで、地域制限を回避したりする用途にも使えます。

ほぼ無料とは

AWSを初めて使う人は特典で無料枠が付与されます。
これを使うことでVPN利用料が無料になります。(ただしVPN構成設定にかかる手間は費用から除外するものとする)
無料枠は100ドル分で、それを超えると課金されます。

Tailscaleとは

  • TailscaleはWireGuardをベースにしたVPNサービス
  • 設定をほとんど意識せずにVPNを構成できるのが特徴
  • Googleアカウントさえあれば、認証周りの設定を簡単に行えるので、とにかく簡単

公式サイト: https://tailscale.com/

構成のイメージ

alt text

VPN構築方法

TailScaleのアカウントを作成

TailScaleの公式サイトにアクセスし、アカウントを作成します。

https://login.tailscale.com/start
もしくは、TailScaleの公式サイトにアクセスして、ヘッダーの「Get Started」からアカウント作成ページを開きます。

alt text

お好きなアカウントで登録してください。

alt text

スマートフォンにTailScaleをセットアップ

さて、VPNを実際に使用したい機器にセットアップします。
今回iPhoneにTailScaleをセットアップします。
AppStoreで「tailscale」と検索すると出てきます。

Tailscaleアプリの画面

ダウンロードして開きます。

Tailscaleアプリの画面

開くとウェルカムページが表示されます。「Get Started」を押します。

Tailscaleアプリの画面

iPhoneの場合VPN構成の許可を求められます。「許可」を押し、パスコードを入力します。

iPhoneのVPN構成許可画面

「Connect」を押して、ログインします。

Tailscaleアプリの接続画面

「続ける」をおすと、ログイン画面に遷移します。

Tailscaleのログイン画面

ここで先ほど作ったアカウントの情報を入力します。

アカウント選択画面

ログインしたあと、「Connect」を押します

Tailscaleの接続確認画面

「Login Successful」の表示が出たら、「×」マークを押していったん閉じます。
すると、現在のTailNet(VPN)に登録されているデバイスの一覧が表示されます。
自分の場合、iPhone-15,AWS EC2(オーストラリア、韓国、東京)、今回これから設定するEC2(ip-...)、私用PC、Xiami-Pad-7がデバイス登録されています。
実際にVPNに接続しているデバイスは、左に🟢表示がされています。

Tailscaleのデバイス一覧画面

EXIT NODE が Noneになっています。つまり、ここに接続しているデバイス間の通信は暗号化されますが、iPhoneから通常のwebサイトへの通信はまだ暗号化されません。
これを解決するためにAWS EC2 を Exit Node として設定します。

AWSアカウントのセットアップ

次に、VPNからの出口(Exit Node)としてAWSのクラウドPC EC2を使います。
そのためにAWSアカウントのセットアップが必要です。AWS公式が出しているガイドに従って作っていきます。
AWS アカウント作成の流れ

他の方が解説されている方法でも全くかまいません。

1. AWS無料枠のEC2を用意

まず、無料枠で使えるt3.microを1台用意し、そこにTailScaleをインストールしてExitNodeとします。
VPNの出口となるインスタンスです。

まず、AWSコンソール上の検索バーから「EC2」を入力し、EC2の画面に入ります。

alt text

つぎにリージョンを選びます。

alt text

地域制限回避のために使う場合は、制限がかかっていないリージョンを選びます。
普通に使う場合は、居住地から近いほうが良いでしょう。
右上のリージョン選択ボタンから、選択します。
今回は東京(ap-northeast-1)を選びます。

ここからEC2インスタンスを実際に起動していきます。
「EC2」→「インスタンス」から、「インスタンス起動」ボタンをクリックします。

alt text

実際にインスタンス起動画面が開かれると思いますので、そこから始めます。
今回自分はこのインスタンスに「TailScale-Tokyo-ExitNode」と名付けようと思います。

alt text

次に画面を下にスクロールして、インバウンドルールを、自IPからの接続のみに制限します。
「任意の場所」から「自分のIP」を選択します。

alt text

下にスクロールして、「インスタンス起動」を押します。

alt text  

キーペアの選択が出くるので、「新しいキーペアの作成」→「キーペア名」を入力(今回はRSA-TailScale-Tokyo としました。)→「キーペアのタイプ」をRSAに→「インスタンスを起動」をクリック

alt text

ボタンを押すと、実際に起動されます。
RSAキーも自動的にダウンロードされます。大切に保管してください。

alt text

「EC2」→「インスタンス」で起動したインスタンスを確認します。

alt text

注 : 作業していないとき、ずっと実行中にしておくと、費用が掛かるので停止しておきます
停止したいEC2にチェック→「インスタンスの状態」→「インスタンスを停止」

alt text

2. Tailscaleをインストール

EC2にSSHで入り、公式のインストール手順に沿ってTailscaleを導入します。

SSM セッションマネージャーで接続します。

IAMロールを設定します。対象インスタンスを選択し、「インスタンスの状態」→「セキュリティ」→「IAM ロールを変更」
alt text

「新しい IAM ロールを作成」

alt text

基本デフォルトで作成します。一応、ポリシーに「AmazonSSManagedInstanceCore」が割り当てられていることを確認してください。(デフォルトで設定されています)

alt text

下までスクロールして、「ロールを作成」します。

alt text

先ほど作成したロールが選択されていることを確認して、「IAMロールの更新」を押します。
(今回、自分はデフォルトの「instanceRole」と名付けました)

alt text

対象のEC2インスタンスをにチェックを入れ「接続」を押します。

alt text

次に、「SSM セッションマネージャー」を選択→
「接続」を押します。

alt text

注:セッションマネージャーが接続されるまで時間がかかります。(自分の環境だと、15分ほど待ちました。)
「セッションマネージャーの接続ステータス」が「接続済み」になるまで待ってください。

alt text

接続できると、以下のようなコンソール画面が開きます。

alt text

TailScale公式のインストール方法に従い、以下のコマンドを実行します。

curl -fsSL https://tailscale.com/install.sh | sh

コマンドをコピペして実行します。(数分ほど時間がかかります。)
alt text

完了すると以下のような表示になります。

alt text

次に、以下のコマンドでTailScaleを起動します。

sudo tailscale up

すると、URLを開いて認証するよう言われるので、URLを開きます。

alt text

作成したアカウントでサインインして下さい。

alt text

Gmailでログインすると、以下のような表示になります。

alt text

「Connect」を押すと「Login Successful」の表示がされ、自動的に管理コンソールに飛ばされます。

alt text

3. Exit Nodeを設定

公式のExitNodeのセットアップガイドに従い、
SSMセッションマネージャーで以下のコマンドを実行してExit Node(VPNの出口)として設定します。

IPフォワーディングの有効化

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

実際に実行すると以下のようなコンソール画面になります。

alt text

sudo tailscale set --advertise-exit-node

このコマンド実行時は何も表示されないようです。

alt text

管理コンソールに入り、今回設定したAWS EC2 のデバイスから、「・・・」→「Edit route settings…」を選びます。
ここで、EC2の名前は、EC2のグローバルIPが自動的に割り当てられます。(例:ip-1xx-xx-xx-xxなど)

alt text

「Use as exit node」を設定し、「Save」を選択

alt text

対象の EC2 が Exit Node として設定されていることを管理コンソールから確認します。

alt text

次に、iPhoneを開いて、先ほど設定したExit Node EC2を使用します。
一旦、トグルボタンをOFF→ONにして再度VPNに接続します。(先ほどの設定を読み込ませるため)

iPhoneのTailscale接続画面

EXIT NODE 「None」をタップして、Exit Node設定画面に進みます。

Exit Node選択画面

先ほど設定した EC2 を選びます。
Recommendedでおすすめされているか、もしくは下の一覧に出ています。

Exit Node一覧画面

Exit Node に先ほど設定した EC2 が使われていることを確認します。これで設定完了です。

Exit Node接続中の画面

ネットワークの確認

さて、先ほど設定した Exit Node が本当に使われているか確認しましょう。
WhereAmI.comで自分のIPがどう認識されるか確認します。

VPN設定をしていないとき、WhereAmI.comに接続して位置を見ると、ISP(プロバイダー)は NTT Communications Corporation で、Cityは横浜と表示されます。
VPN未接続時のIP確認結果

Exit Node をON して VPNに接続したとき、ISP は Amazon.com, Inc. で、Cityは東京です。
Exit Node接続時のIP確認結果

つまり、Exit Node を設定した通り、ネットワークの出口が東京に設置された Amazon の EC2 からになっていることがわかります。

この確認では、Exit Node とネットワークが 構成のイメージ で紹介した通りに設定されていることを確認しました。
ただ、実際にデータが Exit Node まで暗号化されていることの確認にはなっていません。この確認は、申し訳ありませんが、FutureWorkとさせてください。
(とはいえ、機能の根幹部分なのでTailScale社が確認していると思います。)

注意点

  • 使わないときはExit Node EC2 インスタンスの停止をしておく
  • EC2の クレジットが溜まっていないと動作が低速になる
  • 「完全に無料」ではなく、あくまで“ほぼ無料”
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?