🦉

AWS Lightsail + Tailscaleで静的IPアドレスを持つVPNサーバーを構築する方法

2024/12/26に公開

この記事では、AWS LightsailインスタンスにTailscaleをインストールしてVPNサーバーを構築する方法と、必要なセキュリティ設定について説明します。

Tailscaleアカウントとクライアントの設定

あらかじめtailscaleのアカウントを作成してクライアントPCへのTailscaleインストールを行なってください。
https://tailscale.com/download

Lightsailインスタンスの作成

  1. https://lightsail.aws.amazon.com/ にアクセス

  2. インスタンスの作成

  • 「Create instance」をクリック
  • Select a platformで「Linux/Unix」を選択
  • Select a blueprintで「Ubuntu 24.04 LTS」を選択
  • Select a sizeで$5のプランを選択

static IPの取得とアタッチ

static IPの作成

  1. Lightsailコンソールの左メニューから「Networking」を選択
  2. 「Create static IP」をクリックして作成
  3. 先ほど作成したインスタンスのネットワーキングタブから取得したstatic IPをアタッチ

LightsailインスタンスへのTailscaleのインストールと設定

  1. Tailscaleのインストール
curl -fsSL https://tailscale.com/install.sh | sh
  1. Tailscaleの起動と初期設定
sudo tailscale up
  1. 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
  1. Exit Nodeとして設定
sudo tailscale up --advertise-exit-node

セキュリティ更新の自動化設定

システムの安全性を確保するため、セキュリティアップデートを自動化します。UbuntuにはデフォルトでUnattended-Upgradesパッケージがインストールされており、以下の2つの設定ファイルで管理されています:

  • /etc/apt/apt.conf.d/20auto-upgrades: 自動更新を有効にするかどうかの基本設定
  • /etc/apt/apt.conf.d/50unattended-upgrades: 自動更新の詳細な動作設定(更新対象、再起動条件など)

デフォルトの設定では、以下の設定となっています

  • 自動アップデート -> 有効
  • 自動再起動 -> 無効

アップデートの中には、サーバの再起動が不要なアップデートと再起動が必要なアップデートがあります。
よって、再起動が必要なアップデートを適用するためには、unattended-upgrades の設定で、再起動が必要なアップデートがあった際に自動で再起動されるようにする必要があります。

  1. 基本設定の確認(20auto-upgrades)
sudo cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1"; # パッケージリストの自動更新を有効化
APT::Periodic::Unattended-Upgrade "1";   # 自動アップグレードを有効化
  1. 詳細設定の変更(50unattended-upgrades)
sudo vi /etc/apt/apt.conf.d/50unattended-upgrades
  1. 以下の設定を追加(コメントアウトを解除して値を変更)
// 自動再起動の設定
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "18:00";  # UTC (日本時間 03:00)
  1. 設定の反映
sudo systemctl restart unattended-upgrades.service

スワップ領域の設定

スワップとは、RAMメモリの拡張として機能する仮想メモリ領域です。物理メモリ(RAM)が不足した場合に、ディスク上に確保された領域を一時的なメモリとして使用することで、システムの安定性を向上させます。
特に小規模なLightsailインスタンスでは、スワップ領域を設定することで

  • メモリ不足によるアプリケーションの強制終了を防止
  • システムの安定性向上
  • 突発的なメモリ使用量の増加に対する備え
    といった利点があります。

以下の手順で2GBのスワップ領域を設定します

  1. スワップファイルの作成(2GB)
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
  1. 権限設定
sudo chmod 600 /swapfile
  1. スワップファイルのフォーマット
sudo mkswap /swapfile
  1. スワップの有効化
sudo swapon /swapfile
  1. 永続化設定
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
  1. 設定の確認
free -h

コマンド実行結果で以下のように表示されれば設定完了です

total        used        free      shared  buff/cache   available
Mem:           416Mi       246Mi        15Mi       2.7Mi       189Mi       170Mi
Swap:          2.0Gi          0B       2.0Gi

Tailscale管理コンソールでの設定

https://login.tailscale.com/admin/machines にアクセス

  1. Lightsailインスタンスが一覧に表示されていることを確認
  2. インスタンスの右側にある「...」メニューをクリック
  3. 「Edit route settings」を選択
  4. 「Use as exit node」にチェックを入れる
  5. 「Save」をクリックして設定を保存

クライアントPCでのVPN接続

  • Tailscaleクライアントを開く
  • 「Use exit node」から先ほど設定したLightsailインスタンスを選択

接続完了後、インターネットトラフィックがVPNサーバーを経由するようになります。
このとき、先ほど設定したLightsailの静的IP(Static IP)が外部向けのIPアドレスとして使用されるため、VPN接続時のインターネットアクセスは常に同じIPアドレスから行われることになります。

Discussion