TailscaleとDERPサーバ

Tailscaleのクライアントどうしは、ほとんど直接的に接続されると言われるが、時にはどうしても接続できない場合がある。このときは、世界各国に設置してあるDERPというリレーサーバを介して接続するとのことだ。

DERP使用のチェック

例えば、マシンAとマシンBが直接接続か、DERPによるものかを見るには、tailscale pingコマンドを使う。こんな具合である。

直接接続

$ tailscale ping 100.64.0.6
pong from ultraman (100.64.0.6) via 192.168.3.100:41641 in 10ms

DERP経由

$ tailscale ping 100.64.0.6
pong from ultraman (100.64.0.6) via DERP(tok) in 112ms

ちなみに、tokというのは東京に置かれたDERPサーバのことである。

さらに、tailsale netcheck –verboseコマンドでDERPサーバ一覧を見ることができる。

$ tailscale netcheck --verbose
2023/02/22 17:42:04 netcheck: sent to [2c0f:edb0:0:10::963]:3478
2023/02/22 17:42:04 netcheck: sent to 209.177.156.94:3478
2023/02/22 17:42:04 netcheck: sent to [2a00:dd80:14:10::335]:3478
2023/02/22 17:42:04 netcheck: sent to 185.34.3.232:3478
長いので省略

Report:
    * UDP: true
    * IPv4: yes, 123.218.96.131:24755
    * IPv6: yes, [2400:4051:e820:cb00:149c:6cc3:37a4:d6fe]:40144
    * MappingVariesByDestIP: false
    * HairPinning: false
    * PortMapping: 
    * CaptivePortal: false
    * Nearest DERP: Tokyo
    * DERP latency:
        - tok: 26.9ms  (derp7, Tokyo)
        - hkg: 73.7ms  (derp20, Hong Kong)
        - sin: 108.4ms (derp3, Singapore)
        - sea: 120.9ms (derp10, Seattle)
        - sfo: 125.4ms (derp2, San Francisco)
        - lax: 125.5ms (derp17, Los Angeles)
        - blr: 134ms   (derp6, Bangalore)
        - syd: 137.8ms (derp5, Sydney)
        - dfw: 149.8ms (derp9, Dallas)
        - ord: 155.5ms (derp12, Chicago)
        - den: 168.4ms (derp13, Denver)
        - tor: 174.7ms (derp21, Toronto)
        - hnl: 175.3ms (derp24, Honolulu)
        - mia: 178.9ms (derp16, Miami)
        - nyc: 178.9ms (derp1, New York City)
        - ams: 245.1ms (derp14, Amsterdam)
        - lhr: 258.7ms (derp8, London)
        - fra: 264.7ms (derp4, Frankfurt)
        - par: 265.7ms (derp18, Paris)
        - waw: 272.2ms (derp22, Warsaw)
        - mad: 281.1ms (derp19, Madrid)
        - sao: 296.8ms (derp11, São Paulo)
        - dbi: 367.3ms (derp23, Dubai)
        - jnb: 438.1ms (derp15, Johannesburg)

Headscaleでの事情

Headscaleで使用しているクライアントはTailscaleのものなので、この事情は全く変わらないようだ。つまり、TailscaleのDERPサーバにタダ乗りすることになる。

ただし、Headscaleには独自のDERPサーバの機能があるのだが、現在のところそれは試していない。

参考

https://tailscale.com/blog/more-derp/
https://tailscale.com/kb/1023/troubleshooting/#how-do-i-know-if-my-traffic-is-being-routed-through-derp