Tailscale Linuxインストール - 安全なリモートVPN構成
要約: Linuxサーバーに Tailscale をインストールして、安全なリモートVPN環境を構成する方法を説明します。アウトバウンドベースの接続、P2P通信、DERPリレー、ServeとFunnelの活用方法についてもまとめます。

概要
Tailscaleは複数のデバイスを1つのプライベートネットワークのようにまとめてくれるVPNサービスです。Linuxサーバー、NAS、ノートPC、スマートフォンが別々の場所にあっても、同じ内部ネットワークにあるかのように接続できます。
一般的なサーバー接続では、外部からサーバーへ入ってくるインバウンドポートを開ける必要があります。この方式はルーターのポートフォワーディング、ファイアウォールの許可、グローバルIPの設定が必要で、設定を誤るとサーバーがインターネットに直接晒される可能性があります。
Tailscaleは逆に、デバイスが外へ出ていくアウトバウンド接続を利用します。そのため、ほとんどの環境で追加のポート開放なしに利用できます。ただし、社内ネットワークやセキュリティ機器でアウトバウンド通信を強く制限している場合は、ファイアウォールのアウトバウンドポリシーの影響を受けることがあります。
仕組みはシンプルです。各デバイスにTailscaleクライアントをインストールし、同じアカウントのtailnetに登録します。登録されたデバイスは固有のtailnet IPを受け取り、可能な場合はデバイス同士が直接P2Pで通信します。直接接続が難しいNATやファイアウォール環境では、Tailscaleの中継サーバーであるDERPを経由してリレー方式で通信します。
また、Tailscaleはデバイス名ベースのドメインを提供します。
nginxのリバースプロキシのように、https://{device}.{tailnet}.ts.net 形式のアドレスで内部サービスに接続できます。
Serveモードはtailnet内からのみアクセス可能なプロキシを提供し、Funnelモードは必要なサービスをインターネットに公開する際に使用します。
インストール
インストールスクリプトの使用
1curl -fsSL https://tailscale.com/install.sh | sudo sh
サービスの起動
enable で有効化し、--now ですぐに起動します
1sudo systemctl enable --now tailscaled
実行
デバイスの登録
現在のマシンを指定したアカウントのTailscaleネットワークに接続します
例)https://login.tailscale.com/a/xxxxxxxxxxxxx
1sudo tailscale up
2
3# Result
4# To authenticate, visit:
5#
6# https://login.tailscale.com/a/xxxxxxxxxxxxx
アカウント認証
Tailscaleアカウントにログインします

デバイスの接続
Connectボタンをクリックしてサービスに接続します


デバイス登録完了
デバイスは登録されましたが、--accept-routes オプションがfalseになっています。これはピア間のルーティング接続が行われていないことを意味します
1# Result
2# Success.
3# Some peers are advertising routes but --accept-routes is false
状態の確認
1ubuntu@a1-free:~$ tailscale status
2
3# result
4# xx.xx.184.107 a1-free plzhans@ linux -
5# xx.xx.46.27 iphone-14-pro plzhans@ iOS -
6# xx.xx.192.32 plzhanss-macbook plzhans@ macOS -
7# xx.xx.23.68 wee-home tagged-devices linux -
8
9# Health check:
10# - Some peers are advertising routes but --accept-routes is false
VPN通信
大きく分けて3つの方法があります。
- tailnet内部IPを使用する
- accept-routesによるルーティングでVPNデバイスノード間を通信する
- serveモードでVPNデバイスノード間を通信する
- funnelモードでインターネット上の誰でも接続可能にする(ただし、HTTP / HTTPSのみ可能)
VPN: tailnet IP方式
tailnetに接続すると、基本的にtailnet専用のプライベートIPが割り当てられます
基本インストール時に自動でインストールされます
- tuneモードを利用するため、内部にtailscale0仮想ルーターが作成されていると想定します

VPN: accept-routes方式
Tailscaleのインフラを使わずに内部通信を行うため、トラフィックに制限がありません
Tailscaleの設定
- コンソールに移動: https://login.tailscale.com/admin
- Subnetを確認する

マシンの設定
- tailscaleのピアルーティングを許可する
これ以降、Tailscale管理画面からルーティング情報を取得して同期します
1tailscale set --accept-routes=true
- ルーティングを確認する
NASのプライベートIPが192.168.35.xの場合
1ip route show table all | grep 192.168.35
2
3# Result
4# 192.168.35.0/24 dev tailscale0 table 52
- 他のデバイスとの接続を確認する
tailscaleはP2P方式を使用するため、デバイス間ではインバウンドポリシーではなくアウトバウンドポリシーの影響を受けます。
通常はホールパンチングを試み、失敗するとリレーに切り替わります。
1nc -vz 192.168.35.3 1022
2
3# Result
4# Connection to 192.168.35.3 1022 port [tcp/*] succeeded!
VPN: serveモード
{デバイス名}.tailnet.ts.net でアクセス可能です
Tailscaleのサーバーを使用するため、トラフィック制限があります
参考: https://tailscale.com/docs/reference/tailscale-cli/serve
1# Client -> xxxxx.tailnet.ts.net:443 -> xxxxx:3000
2sudo tailscale serve --https=443 / http://127.0.0.1:3000
3
4# Client -> xxxxx.tailnet.ts.net:80 -> xxxxx:3000
5sudo tailscale serve --http=80 / http://127.0.0.1:3000
6
7# Client -> xxxxx.tailnet.ts.net:1111 -> xxxxx:2222
8sudo tailscale serve --tcp=1111 tcp://127.0.0.1:2222
VPN: funnelモード
https://{デバイス名}.tailnet.ts.net でアクセス可能です
Tailscaleのサーバーを使用するため、トラフィック制限があります
参考: https://tailscale.com/docs/reference/tailscale-cli/funnel
1# Client -> xxxxx.tailnet.ts.net:443 -> xxxxx:3000
2sudo tailscale funnel 3000
3
4# Result
5# Available on the internet:
6# https://xxxxx.<tailnet>.ts.net
7# |-- / proxy http://127.0.0.1:3000
参考事項
synology DSMに内蔵されたパッケージのtailscaleを使用する場合
執筆時点(2006.07.03)では、tailnet内蔵パッケージでtuneサーバーが有効化されません
解決策: 強制的に有効化します
1# tuneを有効化
2sudo /var/packages/Tailscale/target/bin/tailscale configure-host
3
4# 再起動
5sudo synosystemctl restart pkgctl-Tailscale.service
再起動やアップデートで設定が消える可能性があるため、DSMのタスクスケジューラに登録します
- コントロールパネル → タスクスケジューラ → 作成 → トリガーされたタスク → ユーザー定義スクリプト
ユーザー: root
イベント: 起動時
ユーザー定義スクリプト
1/var/packages/Tailscale/target/bin/tailscale configure-host 2synosystemctl restart pkgctl-Tailscale.service