ZeroTier はサービスの層で ONLINE を、ネットワークの層で ACCESS_DENIED を報告するが、この二つは矛盾ではない。前者はクライアントと調整基盤の間の経路についての記述である。後者はあるネットワークのメンバー一覧についての記述である。別々に読めば、この組み合わせはどこを見ればよいかを正確に示す。

ONLINE が示すもの

status コマンドは、ローカルサービスがピア探索を調整するルートサーバーへの有効な経路を持っているかどうかを報告する。個々のネットワークについては何も述べず、コントローラがこの端末を承認したかどうかについても何も述べない。そのため、正常な接続上での新規インストールは、どこでも誰も承認していない段階で、ただちに ONLINE を報告する。

ONLINE は配管についての記述、ネットワークごとの状態は参加についての記述として扱う。一方で他方を説明しようとするのが、この混乱のほとんどが始まる地点だ。

ACCESS_DENIED が求める作業

プライベートネットワークでは、コントローラがメンバー一覧を保持している。その一覧にないノード、または載っていても承認されていないノードは、基本的なハンドシェイク以外の設定なしで ACCESS_DENIED を受け取る。修正はコントローラ側にあり、必要になるのはマシン名ではなくノードアドレスなので、クライアントの出力にあるアドレスをメンバー項目と突き合わせて、その項目を承認する。

クライアントの再インストールは、新しいインストールが新しい ID を持ち込み、古い承認がそれには適用されなくなるため、最初に取るべき手ではない。ネットワークがパブリックなら、同じ状態は別の状況を指すので、承認を求める前にコントローラの所有者へネットワークがプライベートかどうかを尋ねる。その一問が残りの会話を決める。

状態テキストは分岐であり、判決ではない

それぞれの状態は次の確認を絞り込み、それらを一つの失敗メッセージとして読むことが、二分で終わる修正を午後いっぱいの再インストールに変える。 NOT_FOUND は、入力した識別子がそのコントローラに存在しないことを意味するので、参加の問いにはまだ到達していない。 REQUESTING_CONFIGURATION は、ノードがコントローラに到達し、届かない設定を待っていることを意味し、これは承認ではなく経路を指す。 OK は、参加と設定が揃っていることを意味するので、 次の問いは割り当てられたアドレスだ そしてサービス自体へと続く。

このすべてを切り分けるコマンドは二つあり、どちらも同じクライアントを読む。ZeroTier CLI リファレンス には、それらが返すネットワークごとの状態文字列が載っている。一つ目がサービス側の見方で、二つ目がネットワークごとの見方だ:

zerotier-cli status
zerotier-cli listnetworks

管理者に助けを求めるときは、状態テキストをそのまま残す。確認を表示したローカルの join コマンドは、要求がローカルで受け付けられたことだけを示す事実であり、受け入れられたこととは別の事実だ。

参加は ID に属する

コントローラが認識するのはクライアントの ID ファイルなので、設定を別のマシンへコピーしたり、再インストール時に ID を消したりすると、コントローラが見たことのないメンバーが生まれる。これがまた、メンバー記録の削除が承認の取り消しと違う理由でもある。承認済みで稼働を続けるノードは試行を続け、取り消しではなく削除された記録は同じアドレスからの新しい要求として戻ってくることがある。

端末を引退させるときは、まず承認を取り消し、何かを削除する前にその項目がその状態を反映していることを確認する。この順序が、きれいな削除と不可解な再参加を分ける。

変更後に検証する

変更を加えたコマンドではなく、ネットワーク項目を読み直す。結果は四つの問いで覆われ、どれか一つが誤っていても他は正しく見えることがある:

zerotier-cli listnetworks
ip -br addr show
ping -c 2 10.147.20.5
ip route get 10.147.20.5

一つ目は各ネットワークの参加状態と割り当てアドレスを表示し、二つ目はインターフェースが実際にそのアドレスを受け取ったかを示す。最後の二つは、ネットワーク上のピアが応答することと、どのインターフェースが通信を運ぶことを証明する。どのコマンドがどの問いに答えたかを書き留めておけば、次の人は記憶ではなく証拠から始められる。

参加が OK で、アドレスも存在するのにピアが応答しないなら、問題はルーティングかピア自身のポリシーへ移っている。状態テキストは、すでに役目を終えているので、その会話から外す。参加記録と経路は別の主題であり、早く切り離すほど調査は短くなる。

関連記事