Tailscaleロゴ

パフォーマンスのベストプラクティス

最終検証日:
翻訳: 竹洞 陽一郎

Tailscaleは継続的にパフォーマンス向上を追求しており、たとえばwireguard-go(TailscaleがユーザースペースのWireGuard実装として使用)に大幅な変更を加えたりトランスポートレイヤーオフロードエンジンを活用して10Gb/s以上のスループットを実現しています。

ほとんどの場合、Tailscaleは追加の設定やカスタマイズなしに最良のパフォーマンスを発揮します。
ただし、最高のパフォーマンスを達成するためにベストプラクティスを活用できる状況もあります。
以下では、さまざまな環境・OS・動作モード(Exit NodeSubnet Routerなど)においてTailscaleを最大限に活用するためのベストプラクティスを紹介します。

ダイレクト接続

Tailscaleはダイレクト接続とリレー接続の両方を使用しており、可能な限りダイレクト接続を優先します。ダイレクト接続は、ほぼ常により低いレイテンシーとより高いスループットをもたらします。

ダイレクト接続の確立確率を高めるために、以下の対策を実施できます:

tailnet内に1つ以上のTailscale Peer Relayサーバーを設置することもできます。
これらは自社インフラ内のデバイスであり、ダイレクト接続が不可能な場合にTailscaleクライアントが相互接続するために使用します。
Peer Relayサーバーは通常、DERPリレーサーバーよりも高速です。

オペレーティングシステムの推奨事項

使用しているOSの最新バージョンを利用してください。最新バージョンは通常、最新のソフトウェアおよびハードウェア最適化を提供します。
たとえば、Linuxカーネルバージョン6.2以降を使用することで、Tailscaleが最新のカーネル機能を活用できるため、最高のパフォーマンスが得られます。

Subnet RouterおよびExit Node向けLinux最適化

Linux 6.2以降のカーネルと組み合わせてTailscaleバージョン1.54以降を使用すると、トランスポートレイヤーオフロードを活用したUDPスループットの向上が有効になります。
LinuxデバイスがExit NodeまたはSubnet Routerとして機能している場合、最高の結果を得るために以下のネットワークデバイス設定が必要です。


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

デフォルトでは、ethtoolを使用した変更は再起動後に失われます。
networkd-dispatcherを使用しているLinuxディストリビューション(systemctl is-enabled networkd-dispatcherで確認可能)では、以下のコマンドを実行してブート時にこれらの設定を自動構成するスクリプトを作成できます。


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.'

マシンサイジングの推奨事項

最高のパフォーマンスを得るために、利用可能な最新世代のCPUアーキテクチャを使用してください。
一般的に、コア数が多いよりもCPUクロックスピードが高い方が重要です。

プロバイダー別推奨事項

プロバイダー別のサイジング推奨事項については、以下を参照してください:

AWSのシングルフロー帯域幅制限

⚠️ AWS EC2インスタンスでTailscaleを実行する場合、インスタンスが同一のクラスタープレイスメントグループに属していない状況では、シングルフローのネットワークトラフィックは5Gbpsに制限されます。
この制限は、パフォーマンステストや高スループットアプリケーションに頻繁に影響を与えます。

より高いシングルフロー帯域幅を実現するには、クラスタープレイスメントグループを使用して、単一のアベイラビリティゾーン内の同じクラスタープレイスメントグループにインスタンスを展開してください。