• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

tailscale

date: 2022-06-25 excerpt: tailscaleの使い方

tag: tailscalevpnwireguard


tailscaleの使い方

概要

  • hamachiのようなp2p VPN
    • 一部GUIがシェアウェアである点もhamachiと似ている
  • wireguardをバックエンドに使用しており、認証関連を管理してくれるもの
    • wireguardは多少設定が面倒であるが、tailscaleを用いるとGoogle AccountやMicrosoft Accountでログインするだけで利用できる
  • UDP NAT traversalをサポートしており、NATの内側のコンピュータでもVPNネットワークに参加できる
  • 一定のコンピュータ数(20)までは無料なので、個人で利用するには十分そう
  • ある程度のオーバーヘッドがあり、速度が半分程度になる
  • コントロールプレーンという管理サーバが必要で、無料プランではここが制約となる
    • 半年に一度認証が解除されるため、いざというときに使えないのが痛い

仕組みと用語の整理

  • 認証・鍵管理
    • デフォルトでは一定期間でキーが期限切れになるため、無効化するにはWeb UIからdisable key expiryを選択する
  • デバイス/アドレス管理
    • 登録しているコンピュータのIPアドレスはMachinesから確認できる
  • directモードとrelayモード
    • relayモードとdirectモードがあり、directモードはとても速いが41641/udpの開放が必要になる
    • 手動でポートを変更したい場合は/etc/default/tailscaledを編集すれば良い
    • 同じサブネットに複数のtailscaleのノードがあったとしてもポートを自動調整するので原則として変更する必要はない
    • directモードを確立できない場合、世界中に配置されたDERPと呼ばれる公開サーバをリレーとしてフォールバックする
      • tailscale statusで接続状況を確認できる(relay "tok"であれば東京のリレーサーバ経由)
  • exit node
    • exit nodeを指定・利用することができる
    • VPNをトンネリングで利用しているイメージですべてのトラフィックをexit node経由で行うことができる
    • exit node利用時に任意のnameserverを指定することができる
      • Admin Console -> DNS -> nameserversにDNSを設定 + Override local DNSを有効にする
  • 仮想インターフェイス
    • Linux: tailscale0
    • macOS: utunX
  • セルフホストのコントロールプレーン
    • headscaleというコントロールプレーンをセルフホストにするOSSもある

ユースケース

  • ファイアウォールの内部に構築したセキュアな環境にアクセスする
    • ssh
      • グローバルIPの設定がいらない
    • jupyter
      • 踏み台の設定がいらないので楽

セットアップ(インストール)

linux

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

macOS

  • App Storeからtailscaleを検索してインストール
  • App Store版ではCLIは含まれない

macOSでビルドしてインストール/アップデート

$ go install tailscale.com/cmd/tailscale{,d}@main
$ sudo $HOME/.go/bin/tailscaled install-system-daemon # launchdに登録

よく使うコマンド

  • 接続デバイス一覧と接続形式の確認
$ tailscale status
  • 接続可能なデバイスの一覧を表示できる
  • メニューバーやタスクトレイから確認するより早い
  • 通信方式の確認
    • relay <tok>のような表示のときrelayサーバ経由でのアクセス
    • direct 211.15.239.222:15968のような表示のときdirectアクセス
  • ネゴシエーション込みのping(direct誘導にも有効)
$ tailscale ping 100.108.132.113
pong from kichijouji (100.108.132.113) via DERP(tok) in 39ms
pong from kichijouji (100.108.132.113) via 211.15.239.222:41641 in 38ms

exit nodeの設定/利用

  • tailscaleのルーティングするデバイスを指定してexit nodeにすることができる
    • exit nodeはルーターのようなイメージ

linuxをexit nodeとして設定

$ echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
$ echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p /etc/sysctl.conf
$ sudo tailscale up --advertise-exit-node

macOSでexit nodeを利用する

  • tailscaleのアイコンをクリック
  • Exit Nodeを選択

linuxでexit nodeを利用する

$ sudo tailscale up --exit-node=<exit-node-ip>

ベンチマーク

  • relayサーバ経由だと、パフォーマンスが約54%に低下する

直接接続した場合

$ netperf -H gimpeik.duckdns.org -t TCP_STREAM -v 2 -- -o mean_latency,throughput
MIGRATED TCP STREAM TEST from (null) (0.0.0.0) port 0 AF_INET to gimpeik.duckdns.org () port 0 AF_INET
Mean Latency Microseconds,Throughput
17474.43,58.68

tailscaleのVPNを経由した場合

$ netperf -H 100.123.207.30 -t TCP_STREAM -v 2 -- -o mean_latency,throughput
MIGRATED TCP STREAM TEST from (null) (0.0.0.0) port 0 AF_INET to (null) () port 0 AF_INET
Mean Latency Microseconds,Throughput
33108.25,31.51

wireguardとrelayサーバ経由のtailscaleの速度の違い

  • 2〜3倍程度の速度差がある

wireguard

$ netperf -H 10.87.131.4 -t TCP_STREAM -- -o mean_latency,throughput
MIGRATED TCP STREAM TEST from (null) (0.0.0.0) port 0 AF_INET to (null) () port 0 AF_INET
Mean Latency Microseconds,Throughput
10961.86,94.87

relayサーバ経由のtailscale

$ netperf -H 100.82.111.109 -t TCP_STREAM -- -o mean_latency,throughput
MIGRATED TCP STREAM TEST from (null) (0.0.0.0) port 0 AF_INET to (null) () port 0 AF_INET
Mean Latency Microseconds,Throughput
27856.18,37.48

セルフホスト(headscale)

  • 概要
    • tailscale互換のFOSS
    • tailscaleのコントロールプレーンのみをself-hostにすることで完全に無料にしている
    • インストールのハードルが高い
      • Dockerで管理するのがよい

トラブルシューティング

  • direct connectionが利用できない
    • 原因
      • 接続クライアント側(ノートパソコン等)で公衆無線LANなどを利用していると、ルーターの制限のためか、directモードが確立できないことがあった

参考

  • /r/Tailscale/
  • Tailscaled on macOS
  • How to re-authenticate in Linux


tailscalevpnwireguard Share Tweet