ZeroTier는 서비스 수준에서 ONLINE을, 네트워크 수준에서 ACCESS_DENIED를 보고하며, 이 둘은 모순이 아니다. 전자는 클라이언트와 조정 인프라 사이의 경로에 대한 진술이다. 후자는 한 네트워크의 멤버 목록에 대한 진술이다. 둘을 따로 읽으면 그 조합이 어디를 봐야 하는지 정확히 알려 준다.

ONLINE이 측정하는 것

status 명령은 로컬 서비스가 피어 검색을 조정하는 루트 서버로 가는 동작 경로를 가지고 있는지 보고한다. 개별 네트워크에 대해서는 아무것도 말하지 않고, 컨트롤러가 이 장치를 승인했는지에 대해서도 아무것도 말하지 않는다. 그래서 동작하는 연결에서 새로 설치하면, 어디에서도 승인하기 전에 곧바로 ONLINE을 보고한다.

ONLINE은 배관에 대한 진술로, 네트워크별 상태는 멤버십에 대한 진술로 다루어야 한다. 하나로 다른 하나를 설명하려는 것이 이 혼란의 대부분이 시작되는 지점이다.

ACCESS_DENIED가 요구하는 일

사설 네트워크에서 컨트롤러는 멤버 목록을 유지한다. 그 목록에 없는 노드, 또는 목록에는 있지만 승인되지 않은 노드는 기본 핸드셰이크 외에는 아무 설정도 없이 ACCESS_DENIED를 받는다. 해결은 컨트롤러 쪽에 있고 기계 이름이 아니라 노드 주소가 필요하므로, 클라이언트 출력의 주소를 멤버 항목과 대조해 그 항목을 승인하라.

클라이언트 재설치가 잘못된 첫 단계다. 새 설치는 새 신원을 가져오고 예전 승인은 더 이상 그것에 적용되지 않기 때문이다. 네트워크가 공개라면 같은 상태가 다른 상황을 가리키므로, 승인을 요청하기 전에 컨트롤러 소유자에게 네트워크가 사설인지 물어라. 그 한 가지 질문이 나머지 대화를 결정한다.

상태 텍스트는 분기이지 판정이 아니다

각 상태는 다음 점검을 좁혀 주며, 그것들을 하나의 실패 메시지로 읽는 것이 두 분짜리 수정을 재설치로 가득한 오후로 바꾼다. NOT_FOUND 는 입력한 식별자가 그 컨트롤러에 없다는 뜻이므로 멤버십 질문에는 아직 도달하지 못한 것이다. REQUESTING_CONFIGURATION 는 노드가 컨트롤러에 도달했고 오지 않는 설정을 기다리고 있다는 뜻이며, 이는 승인이 아니라 경로를 가리킨다. OK 는 멤버십과 설정이 갖추어졌다는 뜻이므로 다음 질문은 할당된 주소다 그리고 나서야 서비스 자체다.

이 모든 것을 두 명령이 구분하며, 둘 다 같은 클라이언트를 읽는다. ZeroTier CLI 참조 에는 두 명령이 돌려주는 네트워크별 상태 문자열이 나열되어 있다. 첫 명령은 서비스 관점이고 두 번째는 네트워크별이다:

zerotier-cli status
zerotier-cli listnetworks

관리자에게 도움을 요청할 때는 상태 텍스트를 남겨 두어라. 확인을 출력한 로컬 join 명령은 요청이 로컬에서 접수되었다는 것만 증명하며, 그것은 네트워크에 받아들여진 것과 다른 사실이다.

멤버십은 신원에 속한다

컨트롤러가 인식하는 것은 클라이언트의 신원 파일이므로, 설정을 다른 기계로 복사하거나 재설치 중에 신원을 지우면 컨트롤러가 본 적 없는 멤버가 만들어진다. 그래서 또한 멤버 기록을 삭제하는 것이 승인을 취소하는 것과 다른. 계속 실행 중인 승인된 노드는 재시도를 멈추지 않으며, 취소가 아니라 삭제된 기록은 같은 주소에서 새 요청으로 돌아올 수 있다.

장치를 퇴역시킬 때는 먼저 승인을 취소하고, 무엇이든 제거하기 전에 항목이 그 상태를 반영하는지 확인하라. 이 순서가 깔끔한 제거와 불가사의한 재가입을 가른다.

변경 후 검증하기

변경을 만든 명령이 아니라 네트워크 항목을 다시 읽어라. 네 가지 질문이 결과를 덮으며, 그중 하나만 틀려도 나머지는 맞아 보일 수 있다:

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

첫 명령은 각 네트워크의 멤버십과 할당된 주소를 출력하고, 두 번째는 인터페이스가 실제로 그 주소를 받았는지 보여 준다. 마지막 두 명령은 네트워크의 피어가 응답한다는 것과 어느 인터페이스가 트래픽을 실어 나르는지를 증명한다. 어느 명령이 어느 질문에 답했는지 적어 두어라, 그러면 다음 사람이 기억이 아니라 증거에서 시작한다.

멤버십이 OK 이고 주소는 있는데 피어가 응답하지 않는다면, 문제는 라우팅이나 피어 자체의 정책으로 옮겨 간 것이다. 그 대화에서 상태 텍스트를 빼라. 이미 제 역할을 다했기 때문이다. 멤버십 기록과 경로는 별개의 주제이며, 둘을 빨리 분리할수록 조사는 짧아진다.

관련 글