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の種類に応じて以下の挙動を示します。
- One-off: 再起動時には鍵が無効化されているため認証に失敗する
- Reusable: 再起動時には新しいデバイスと認識されるため、新しいIPアドレスを持つ
認証成功時の状態(state)は/var/lib/tailscale
下に保存されているので、tailscale起動時にこのディレクトリを読み込む必要があります。
コマンドに --env TS_STATE_DIR=/var/lib/tailscale
を追加してください1。
-v /var/lib:/var/lib
して状態の永続化をしてそうなフリして、環境変数が別途必要だなんて驚きですね……。
ちなみにauth keyを発行する時にtagをつけておくと、認証情報が無期限に有効になります。これならReusableなキーを発行せずとも十分そうですね。