🍸

さくらのVPSにTailscaleをインストールし、Exit Nodeとして動作させる

2024/04/24に公開

はじめに

さくらのVPSにTailscaleをインストールし、Exit Nodeとして動作させるまでの流れについて備忘録としてまとめます。

解決したい課題: 固定IPが欲しい

業務委託などを受けた際に、業務委託元のサーバなどにアクセスするために固定IPが必要になった経験はないでしょうか?
業務委託元のセキュリティとして、特定のIPのみのアクセスを許可しているケースは多いのではないでしょうか?
プロパイダーによっては固定IPを提供しているプランもありますが、そうではないプロパイダーも多いです。
本記事では、固定IPを持つさくらのVPSを使用し、TailscaleでExit Nodeとして動作させることで、VPS以外の計算機でもVPSと同じ固定IPを持たせられるようにVPN環境を構築します。
VPN環境を構築する上で、Tailscale以外にもSoftEther VPNなどが存在しますが、さくらのVPS上にSoftEther VPNを構築する記事は多く存在しますので、そちらを参照してください。

VPSの作成

前からさくらのVPSを契約していたので、今回はそのVPSのOS再インストールから始めます。
さくらのVPSを契約していない場合は、さくらのVPSから契約を行なってください。
私が契約しているプランは、

1G | 月額 935円 | CPU 仮想2Core メモリ 1GB SSD 100GB

です。
リージョンに関しては、お好きなところで大丈夫です(石狩リージョンのVPSは性能が良いといわれていますが、今回の用途ではどこでも問題ないと思います)。
インストールしたOSは、Rocky Linux 9です。

管理ユーザ情報の設定

パスワードやSSH登録はご自身のお好きなように設定してください。
SSHに関しては、本記事ではシリアルコンソールのみで設定を行うので、必ず設定する必要はありません。

サーバに関する設定

スタートアップスクリプトは使用します。
さくらインターネット社が公式で提供している「Setup and update」スクリプトを使用します。

スタートアップスクリプト設定

下記の設定にします。

  • 初回起動時にパッケージ更新: 更新する
  • 日本語環境 ja_JP.UTF-8 に変更: 変更しない
  • ホスト名を設定: Tailscaleには関係しないので、お好みで
  • SSHポートを変更: 今回はシリアルコンソールのみで設定するため必要ないが、SSHを使用したい場合は変更する方が良い
  • ログインユーザ名を変更: 変更する方が良い
  • キーボード配列のVM内部設定をUS配列に変更: 今回はUS配列のキーボードを使用しているので、US配列に変更する
  • VM内部のファイアウォール機能(firewalld, ufw, nft のいずれか)を有効化: firewalldを使用するため、有効化する
  • ウェブ管理インタフェース Cockpit をインストール: インストールしない
  • (対応している場合)IPv6 を有効化: 有効化しない
  • スワップ(swapfile)を作成: 念の為、8GB作成
  • パッケージ管理システム Snappy(snap) をインストール: インストールしない
  • (RedHat系のみ) SELinux を有効化: 有効化しない
  • カーネルクラッシュダンプを有効化: 有効化しない
  • タイムゾーンを変更: 変更しない Asia/Tokyo

パケットフィルター設定

Tailscale設定時にfirewalldを使用するため、本来であればパケットフィルター設定はOFFにした方が良いらしいが、パケットフィルターを設定しない場合、全部開放状態になるため、一応パケットフィルター設定を利用します。
ただし、デフォルトで有効されているポート番号22の設定は、シリアルコンソールのみで設定する場合は削除しても構いません。

上記の条件で、OSインストールを開始します。

シリアルコンソールを使用したTailscaleのセットアップ

シリアルコンソールの起動とログイン

さくらのVPSのコントロールパネルから、コンソール > シリアルコンソールをクリックし、シリアルコンソールを起動します。

設定したユーザ名とパスワードでログインします。

Tailscaleのインストール

https://tailscale.com/download/linux より、以下のコマンドを実行します。

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

Tailscaleの起動

以下のコマンドを実行して、Tailscaleを起動します。

sudo tailscale up

上記コマンドを実行した際にターミナルに表示されるURLにアクセスし、Connect device画面で「Connect」をクリックします。
成功すれば、TailscaleのAdmin ConsoleのMachinesページで、さくらのVPSが追加されているはずです。

Exit Nodeの設定

https://tailscale.com/kb/1103/exit-nodes?tab=linux より、以下のコマンドを実行します。

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
sudo firewall-cmd --permanent --add-masquerade

以下のコマンドを実行し、Exit Nodeを有効にして、Tailscaleの再起動を行います。

sudo tailscale down
sudo tailscale up --advertise-exit-node

TailscaleのAdmin ConsoleのMachinesページにアクセスし、Exit Node設定を有効したMachineの「Exit route settings...」を開き、「User as exit node」のチェックを入れて、「Exit Node」として承認します。

さくらのVPS(Exit Node)経由の通信開始

今回使用している計算機がmacOSなので、macOSでの設定を記述します。

macOSでTailscaleをインストールおよび起動後、メニューバーのTailScaleアイコンをクリックし、
Exit Nodes > Tailnet Exit Nodes欄にある、先ほどExit Node設定したVPSを設定すればOKです。
(起動時に、さくらのVPSでConnectしたアカウントと同じアカウントを必ず使用するようにしてください。)

IPの確認

https://www.cman.jp/network/support/go_access.cgi を使用して、上で説明したTailnet Exit NodesをnoneとVPSで切り替えて、IPアドレスが変わることを確認してください。

おわりに

本記事では、固定IPを持つさくらのVPSを使用し、TailscaleでExit Nodeとして動作させることで、VPS以外の計算機でもVPSと同じ固定IPを持たせられるようにVPN環境を構築しました。

参考文献

Discussion