🌐

Tailscale VPNを導入してみた

2024/12/04に公開

VPN接続時の画像

はじめに

株式会社ハックツ、エンジニアのみき(@take_cantik)です。⛏️
以前社内開発合宿にて、Tailscaleを使用してVPNを構築しましたので、その手順や設定についてまとめたいと思います!

概要

今回のゴール

  • VPNの構築
  • 社用メールでのみユーザー作成可能

完成系イメージ

VPN構成図

背景

これまで、ハックツはVPNが存在しておらず、アクセス管理をIPをもとに行っていました。
しかし、ここ最近リモートワークや、出張、社内開催のイベントなどで、オフィス以外での業務が高頻度で発生しており、その際にはインフラサービスやIP制限を設けているサービスへのアクセスを行わない or その度にIPを開放したりして対応していました。
また、社内メンバー数の変動などにより、これまでのネットワーク単位でのアクセス管理が難しくなってきていました。
そのため、セキュリティ面でのリスクやアクセス管理の工数削減のため今回VPNの導入を決めました。

Tailscaleとは

Tailscaleは、メッシュVPN(Virtual Private Network)サービスで、
異なるネットワーク間のデバイスやサービスの安全な接続を効率化するのに役立ちます。

オープンソースのWireGuardプロトコルを使用して暗号化されたP2P接続を可能にし、
プライベートネットワーク上のデバイスのみが相互に通信できるようにします。

低価格で、安全なサービスということで今回使用してみることにしました。

https://tailscale.com/

手順

1. アカウント作成

ログインページ
https://login.tailscale.com/login

今回は社用メールでGoogle認証を行いました。

ログイン画面

ビジネスでの利用を選択。
利用パターンの選択画面

この時点で同一ドメインでないとアカウント新規追加できないようになっていたので、
ゴールの一つである「社用メールでのみユーザー作成可能」はクリアされていました。

2. Tailscaleのインストールとデバイスの登録(PC)

次へ進むと、初回のデバイス追加画面に遷移します。
ここから自身のPC(またはスマホ)のOSを選択し、Tailscaleのインストールを行います。

tailscaleインストール画面

インストール後、設定に従っていくとログインが求められるので、
手順1で作成したアカウントでログインを行います。

すると、以下のような接続画面(アプリ上)が表示されるので、Connectを選択します。

接続画面

接続が完了したら、Tailscaleの管理画面(Web)に追加したデバイスが表示されます。

接続完了画面

これで、自分のPCのデバイス登録が一通り完了しました!
(残りの手順はここでは割愛します)

3. 出口ノード用のEC2の作成とTailscaleのインストール

続いて、出口ノード用のEC2の作成を行います。
EC2の作成手順に関しては詳細は省きますが、以下のような設定で作成しました。

  • セキュリティグループ
    • アウトバウンドのルール
      • 全許可
    • インバウンドのルール
      • ssh接続するためのIPのみ22番で開放
  • EC2
    • 無料枠のAMI

作成が完了したら、ssh接続します。
下記コマンドで、tailscaleをインストールします。

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

4. EC2のTailscaleの設定

ここからの設定はこちらを参考にしています。
https://tailscale.com/kb/1021/install-aws#deployment-steps

Tailscale systemd serviceの有効化

sudo systemctl enable --now tailscaled

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

出口ノード、サブネット・ルーターのためのLinux最適化

NETDEV=$(ip -o route get 8.8.8.8 | cut -f 5 -d " ")
sudo ethtool -K $NETDEV rx-udp-gro-forwarding on rx-gro-list off
printf '#!/bin/sh\n\nethtool -K %s rx-udp-gro-forwarding on rx-gro-list off \n' "$(ip -o route get 8.8.8.8 | cut -f 5 -d " ")" | sudo tee /etc/networkd-dispatcher/routable.d/50-tailscale
sudo chmod 755 /etc/networkd-dispatcher/routable.d/50-tailscale
sudo /etc/networkd-dispatcher/routable.d/50-tailscale
test $? -eq 0 || echo 'An error occurred.'

起動する
オプションについて

  • --hostname: マシーン名になる
  • --advertise-routes: 作成したVPCのCIDR
  • --advertise-exit-node: 出口ノードとして立ち上げるため
sudo tailscale up --hostname=test-tailscale --advertise-routes=10.0.0.0/16 --advertise-exit-node

成功すると、ログインリンクが出てくるので、そこからログインを行います。
ここまで完了すると、管理ページの方にマシンが追加されていることが確認できます。

管理画面

5. 出口ノード、サブネット・ルーターとしての設定

追加されたマシンのルートセッティングを開きます。

設定メニュー

ここで、Subnet routes, Exit nodeどちらもチェックします。

ルートセッティングモーダル

6. いざ接続🔥

いよいよ接続です!
右上のスイッチをオンにすると、接続状態となります。
このままでは、まだ出口ノードがセットされていないので、「Exit Nodes」から、作成したEC2のマシンを選択します。
(次回からはオンにするだけでデフォルト設定になっています)

接続画面

IPを確認してみると、きちんとEC2のIPになっていることが分かります!

IP検索画面

さいごに

今回は、Tailscaleを使用したVPNの構築手順を解説しました。
これにより、安全なリモート接続と簡単なアクセス者管理ができるようになりました👏
比較的簡単に導入ができますので、ぜひ参考にしてみてください。

では、また別の記事で🥷

Hackz Inc.

Discussion