TailscaleをDockerで動かすと、再起動時に認証失敗 or IPアドレスが変わってしまう問題への対処

by
カテゴリ:

DockerでTailscaleを使ったVPNを構築してみました。

公式の案内では以下の手順でauth keyを用いた起動ができます。

docker run -d --name=tailscaled \
  -v /var/lib:/var/lib -v /dev/net/tun:/dev/net/tun \
  --network=host --cap-add=NET_ADMIN --cap-add=NET_RAW \
  --env TS_AUTHKEY={{ auth key }} \
  tailscale/tailscale

しかし、この方法は公式も記述している通り一時的な(ephemeral)用途向きです。

docker container restart tailscaledでコンテナを再起動すると、auth keyの種類に応じて以下の挙動を示します。

認証成功時の状態(state)は/var/lib/tailscale下に保存されているので、tailscale起動時にこのディレクトリを読み込む必要があります。

コマンドに --env TS_STATE_DIR=/var/lib/tailscaleを追加してください1

-v /var/lib:/var/libして状態の永続化をしてそうなフリして、環境変数が別途必要だなんて驚きですね……。

ちなみにauth keyを発行する時にtagをつけておくと、認証情報が無期限に有効になります。これならReusableなキーを発行せずとも十分そうですね。