2 ポイント 投稿者 GN⁺ 2024-04-01 | 1件のコメント | WhatsAppで共有
  • 2024年3月7日に期限切れとなった TLS証明書 が原因で、tailscale.com は約90分間停止したが、影響は主にドキュメントサイトとマーケティングサイトにとどまった
  • 2023年12月のWebサイト刷新と新しいホスティング環境への移行から約90日後に問題が表面化し、IPv6非対応環境を補う 独自プロキシ 構成が自動更新を妨げていた
  • 証明書有効期限監視用の プローバーIPv6経路のみを確認 していたため、別個に有効な証明書を持つプロキシを通過し、実際の tailscale.com と www.tailscale.com の期限切れ接近を見逃した
  • 通常の Tailscale 利用の大半は停止しなかったが、ドキュメント、ブログ、install.sh、直接URLを知らないユーザーの管理コンソールへのアクセス導線には影響があった
  • Tailscale は追加の AAAA レコード削除と手動更新で復旧し、短期的な手動更新体制と IPv4/IPv6 の分離確認を経て、より直接的な IPv6対応 を目指す

証明書失効を見逃した理由

  • 2024年3月7日、tailscale.comwww.tailscale.com の TLS 証明書が失効し、約90分間サイトへのアクセスが停止した
  • 2023年12月、Tailscale は大規模なWebサイト刷新にあわせて新しいホスティング事業者へ移行した
  • 新しいホスティング事業者は IPv6 を標準サポートしていなかったため、Tailscale は IPv6 リクエスト処理のために独自プロキシを運用し、追加の AAAA レコード を設定した
  • ホスティング事業者はこの構成を「misconfiguration」として通知したが、その構成が証明書の自動更新完了を妨げることは通知に明記されていなかった
  • 証明書有効期限監視用の プローバー は IPv6 経路しか確認していなかった
    • プローバーは独自プロキシを通過していた
    • プロキシは別管理の有効な証明書を持っていた
    • そのため、tailscale.com と www.tailscale.com の実際の証明書失効が事前に表面化しなかった

ユーザーに見えた影響

  • 影響はWebサイトに依存する資料とインストール導線に集中した
    • Tailscale ドキュメント、ブログ、その他のWebサイトベースの参考資料は障害中アクセスできなかった
    • 管理コンソールと設定ページ自体は影響を受けなかったが、https://login.tailscale.com/ に直接移動する方法を知らないユーザーは、そのページ自体がオフラインだと思う可能性があった
    • クイックインストールスクリプト を利用できず、一部のインストールと自動インストールに支障が出た
  • Tailscale パッケージを実際に配布しているドメインはアクセス可能であり、Go の go get メカニズムによる解決停止も キャッシュ のおかげで最小限だったとみられる
  • Tailscale の設計上、大半のユーザーはほとんどの利用ケースで今回の障害による停止を経験せず、直接接続の原則によりネットワークは tailscale.com のような特定エンドポイントの即時可用性にあまり依存していない

復旧と再発防止

  • 問題確認後、Tailscale は「追加」 AAAA レコード を一時的に削除し、関連証明書を手動で更新した
  • この対応によりユーザーに見える障害は直ちに解消され、サイトとサービスを IPv6 で提供するためレコードはまもなく復元された
  • 自動更新の問題は残っているため、短期的には重複したカレンダー通知と指定した手動更新時間を設け、証明書を直接更新する予定である
  • プローバー基盤は IPv4 と IPv6 エンドポイント を個別に確認するよう更新される予定である
  • 長期的には、Webサイト基盤で IPv6 をより直接的にサポートし、独自プロキシが不要な構成を目指す

1件のコメント

 
GN⁺ 2024-04-01
Hacker News のコメント
  • 期限切れになる証明書は、今や障害における新たな DNS だと思う
    それでも Tailscale がどれほどよくできているかには、いまだに驚かされる。どちらかといえばライトユーザーだが、オンプレミスのサーバー数台と AWS の本番環境という 2 か所に Tailscale でアクセスしている
    どこからでも仕事ができる。週末に ECS コンテナをデプロイしようとしたら、ローカルの Wi-Fi が遅すぎてデプロイが何度もタイムアウトした
    そこでオンプレミスの開発マシンに SSH で入り、最新コードを git pull して、そこからデプロイした。オンプレミスも AWS も開放ポートなしで安全な状態で、AWS の小さな EC2 で Tailscale エージェントを動かすだけで、本番の Aurora データベースも開放ポートなしでテストできる
    他の開発者にネットワークアクセス権を与えるときも Tailscale はとても簡単で、権限の取り消しも同様だ。このデプロイは GitHub Actions のようなもので処理して劣悪なインターネット回線の問題を避けることもできたが、手動でやりたかったし、Tailscale がそれを可能にしてくれた

    • GitHub Actions でデプロイする場合でも、Tailscale は依然として有用だ。今は GHA ワーカーが SSH で入ってデプロイを開始できるように、クラウド VM の SSH ポートを非標準ポートで開けている
      今後は、どの GHA ワーカーでもポートを公開せずにデプロイ用マシンへアクセスできるよう、このアクションを使うつもりだ: https://github.com/tailscale/github-action
    • 不安定な接続では mosh と GNU screen を使っている。10 秒ごとに切れても驚くほどよく動く
  • 期限切れ証明書がまた事故を起こした
    事後分析の一環として、インストールスクリプトをマーケティングサイトから切り離すか、別の代替経路を用意することを勧める。そうすれば、マーケティングサイトの活動が顧客運用のクリティカルパスと無関係になる。こういうことはよくあるので、通常の分離を維持するところまであと少しだっただけに、なおさら惜しい
    複数プロバイダーの稼働時間を追跡していると、GitHub や Zendesk のサイトの一部が落ちることは予想以上によくある。少なくとも彼らは良い事例の部類に入る

    • マーケティングサイトのセキュリティ優先度は製品本体より低いことが多く、インストールスクリプトは通常、製品と同程度に保護されるべきだ
    • すべての証明書と有効期限を監視してくれるサービスがあるのか気になる
      Cloudflare はドメインをそちらでホスティングすれば、この部分をかなり処理してくれるようだが、Cloudflare を使わなければならないという条件が付く
  • 以前の会社でやったミスと同じだ。マーケティングサイト www.foo.com のホームに、Web アプリのログインページ app.foo.com へのリンクを置いていた
    最初にマーケティングサイトの障害が起きて初めて、月 40 ドルのホスティングプランが単なるマーケティングサイトではなく、コアインフラだったのだと気づいた。文字どおり負荷を支える 40 ドルのホスティングだった。アプリは落ちていなかったが、ユーザーは落ちていると思った
    ユーザーは私たちが用意した経路をたどるだけで、別の道があることを知らない場合が多く、その経路を 1 つなくすと、一部のユーザーは完全に迷子になるのだと学んだ

    • ブラウザに tailscale と入力すると、最初の結果は tailscale.com になる。Tailscale の管理コンソールは頻繁には使わないので、わざわざ別の URL を覚えていない
      以前は cloudflare と入力するとブラウザが dash.cloudflare.com を自動補完していたが、cloudflare.com の Web サイトを一度訪問してからはそれが最初の結果になり、Cloudflare でも同じ行動をするようになった
  • このチームは本当に良いが、価格は高すぎると思う。まともな アクセス制御が VPN に月 18 ドルもかかるとなると、経営陣に売り込むのはほぼ不可能で、低いティアはその機能なしでは売りにくい

    • 社内では Tailscale を何と比較しているのか本当に気になる。Tailscale は単純な VPN よりはるかに多くのことをする
      もっと安い選択肢は何で、それらも SSH 機能、自動化サービス向けの OAuth ネットワーク認証、Kubernetes クラスター内での VPN ノードのロードバランサー構成、Let’s Encrypt による ACME 証明書リクエストの自動化を提供しているのか気になる
      無料ティアで使っている機能をいくつか挙げるだけでも、普通の VPN サービスの役割とは思われないものが多い。機能も継続的に追加されていて、かなり興味深く競争力のある選択肢だと思う。むしろ低価格ティアで提供しているものが多すぎて驚くので、そういう評価がなおさら気になる
    • それなら headscale をインストールして自前ホスティングすれば、無料で使える
      Tailscale と一部重なる競合製品もあるし、望むものと完全に一致しないかもしれない
      ただ、数分でプロジェクトの一部が以前よりずっとよく噛み合って動くようになった
      やっていることの割に本当に珍しいほどシンプルなツールの 1 つで、無料ティアもデバイス 100 台とユーザー 3 人でかなり余裕がある
    • これは説得するのがとても簡単だった。OpenVPN 構成から抜け出せたし、Tailscale のおかげで新入社員のオンボーディングやさまざまなことを正しい方法で行うのがはるかに簡単になった。完全リモート企業なので、なおさら重要だ
      もちろん私の役割上、こうしたテーマで経営陣を説得する影響力がかなりあったのは確かだが、価格は問題にならなかった
      昨年 4 月から満足して使っている顧客で、全員がプレミアム、つまり高いティアを利用している。開発速度も印象的だ。数年かかるかもしれないと言われていた機能の一部が、すでに昨年リリースされた
      Cloudflare One も代替になり得たが、そちらの方が高かったはずだ
    • どんな経営陣が月 18 ドルでつまずくのか分からない。1 人あたりのコストで見れば、社員のために買う何十ものものの中でほぼゼロに近い費用だ
    • それが私たちを Twingate に押し出した主な理由だった。使ってみると、ルーティング機能は Twingate の方が少し好みになった。Tailscale が嫌いという意味ではなく、どちらも用途別に使っている
  • Web サイトのプロバイダーにどこを使っているのか気になる。他のほぼすべてのプロバイダーが IPv6 対応しているのに、IPv6 のためにこれほど多くの回避策が必要だというのは不思議に聞こえる

    • $ host www.tailscale.com の結果を見ると、www.tailscale.com の IPv4 アドレス 76.76.21.21 は Vercel で、IPv6 アドレス群は Amazon だ
      IPv4 は Let’s Encrypt 証明書を使い、IPv6 は Amazon 証明書を使っている
  • 12月に大規模ロールアウトを安心して行えるほど、CI/CDとモニタリングがしっかりしているのは本当にうらやましい。エンジニアリング文化がかなり強そうに見える
    ただ、まだ答えられていない疑問がある。IPv6設定がIPv4の証明書自動更新を壊したのだとしたら、なぜもっとずっと前に経験しなかったのか気になる。障害解決になぜ90分もかかったのかも気になる。ブログ記事であって本当の事後分析ではないが、簡単なタイムラインくらいはあればよかったと思う
    さらに、なぜIPv6をネイティブにサポートするDNSプロバイダーへ移行しないのかも気になる。スクリプトやパッケージ専用のドメインを別に持つ運用負荷に、それだけの価値があるのかも気になる。パッケージリポジトリのような第三者は除いて、ほかのところもこうしているのか気になる

    • 私の理解では、障害の90日前に現在の構成へ変更したようだ。移行時に設置した初期証明書が90日ものだったので、つまり移行から90日後に障害が起きたということになる
    • 彼らはVercelを使っており、VercelにはIPv6サポートがない
  • プロキシがなぜTLSを終端する必要があるのか分からない。単なるTCPプロキシだったなら、少なくともモニタリングが証明書の期限切れは迫っていないと勘違いすることはなかったはずだ
    それに、ドメイン検証をTLS-ALPNチャレンジで行っていたなら、TCPプロキシなら自動更新も可能にできたかもしれない

    • TCPプロキシは、PROXYプロトコルのようなものを使わない限り、ユーザーのIPアドレスを捨てる。そのためには宛先のHTTPSサーバー側も対応している必要があり、認可されていないユーザーが自分でPROXYヘッダーを注入できないように防ぐ方法も必要になる
      ユーザーIPがまったく不要なら問題ではないが、ログや不正利用検知にはしばしば有用だ
      https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt
    • 大きな理由ではないが、HTTP/3はTCP上では動作しないし、UDPプロキシを運用するのはあまり楽しいことではなさそうだ
    • TLSを終端する必要はない。それは私たちのミスの一つで、修正する作業項目になっている
      最初にIPv6が壊れていることに気づいたとき、急いでプロキシを立てた。当時プロキシを立てた人たちは、ACMEがどう動くのかを知らなかった
      単なるTCPプロキシに変更する予定だ
    • TLSを終端しないプロキシは、Hetznerのようなサービスに載せるのに向いている。CAAを正しく設定すれば、プロバイダーに任せるのはレイテンシと可用性だけになり、CloudFrontやEC2ベースのプロキシのような途方もなく高価なサービスを避けることもできる
      見たところ、Tailscaleはpkgs.tailscale.comNetActuateを使っているようだ。NetActuateなら、妥当な価格で複数拠点から非終端プロキシを提供するのを支援できそうだ。ウェブサイトに価格は載っていないが、送信トラフィックに50倍のマージンを乗せる会社には見えない
    • IPv6用に前段へAWS CloudFront CDNを置いた可能性がある。そうするとCloudFrontでTLSを終端することになり、私の知る限り選択事項ではない
  • Tailscaleという組織が、セキュリティに少しでも関わる領域で一度でもつまずくと、私のように少しだけ偏執的な人間にはあまりにも危険に感じられる
    この点について、より良い説明が必要だ

  • インフラ監視はあるはずなので、すべての公開ドメインについてIPv4とIPv6で接続し、証明書が19日以内に期限切れになるなら警告するコードを50行追加すればいい。自動更新は20日前に回せばそれで終わりだ
    小さな会社の初期にSSL更新を何度か逃した後、このコードを数年前に書き、それ以降SSL関連の障害はなかった
    カレンダー招待は不要で、必要な修正はこれ一つだけだ。「プローバーインフラを更新し、IPv4とIPv6エンドポイントを別々に確認する」という部分が核心だ

  • 「その構成が当該プロバイダーには誤設定と見なされ、デプロイ後ずっと警告を受けていた」とある
    では、証明書関連の警告を90日間受け続けた末に証明書が失敗したということなのか?

    • 証明書の警告を90日間受けていたというより、DNS関連の警告を90日間受けていた、というほうに近そうだ。IPv6/AAAA DNSレコードがあるとVercelが証明書の自動更新を拒否するという事実を、Tailscaleチームは事故前には知らなかったように見える
      実際の警告を見たわけではないので、その警告がこの事実を明確に伝えていたのかは分からない