Tailscale を同一拠点内で複数台運用していると、通信経路が想定どおりに張れず、一部のマシンだけが直接接続できて、他は relay(DERP) 経由になってしまうことがあります。
そのようなときに見直したいのが、tailscaled が使う UDP ポートです。
なぜ起きるのか
tailscaled は既定で同じ UDP ポートを使います。
同一拠点内に複数のマシンがあり、さらにそれらが同じグローバル IP 配下、つまり同じ NAT の内側にいる場合、外向きのポート対応が競合しやすくなります。
その結果、外部から見たときにうまく直接通信の経路を確立できるのが一部のノードだけになり、それ以外は relay 経由にフォールバックすることがあります。
直接接続できれば低遅延で効率もよいですが、relay 経由になるとレイテンシや経路の面で不利です。
同一拠点で複数台を安定して直接接続させたい場合は、各マシンで tailscaled のポートをずらすのが有効です。
対応方法
Linux 環境で systemd 管理されている場合は、/etc/default/tailscaled を編集します。
たとえば以下のように、ホストごとに異なるポートを設定します。
PORT=41641
別のマシンでは次のように変更します。
PORT=41642
さらに別のマシンなら:
PORT=41643
設定を反映するには、tailscaled を再起動します。
sudo systemctl restart tailscaled
運用上のポイント
ポートを変更する際は、次の点を押さえておくとよいです。
1. 各マシンで重複しない番号にする
同一拠点内のマシンで、同じ UDP ポートを使い回さないようにします。
2. ファイアウォール設定も確認する
ローカルの firewall や upstream 側で UDP が制限されている場合、変更したポートが通るようにしておく必要があります。
3. 反映後に接続経路を確認する
設定後は tailscale status や tailscale ping などで、直接接続できているかを確認すると確実です。
まとめ
同一拠点に複数の Tailscale ノードがある環境では、既定のまま同じ宛先ポートを使っていると、1台以外が relay 経由になりやすいことがあります。
その場合は、/etc/default/tailscaled を編集してホストごとにポートを変更し、再起動します。
sudo systemctl restart tailscaled
シンプルな対応ですが、同一 NAT 配下で複数台を運用している環境では効果が出やすい調整です。