ZeroTier แสดงสมาชิกเป็น OK เครือข่ายเชื่อมต่อแล้ว และยังไม่มีที่อยู่ให้ ping การผสมกันนี้รู้สึกเหมือนบั๊ก และมักเป็นการตั้งค่าที่แยกออกจากกัน: การอนุมัติสมาชิกเป็นสวิตช์หนึ่ง และการมอบที่อยู่ให้เป็นอีกสวิตช์หนึ่ง เครือข่ายสามารถรับอุปกรณ์ได้และไม่เคยกำหนดอะไรให้เลย เพราะพูลที่อยู่หรือโหมดการกำหนดไม่เคยถูกตั้งค่า

อ่านทั้งสองด้านก่อนจะเปลี่ยนด้านใดด้านหนึ่ง คำตอบปรากฏในสองที่ และมีเพียงที่เดียวเท่านั้นที่อยู่บนคอนโทรลเลอร์

การอนุญาตและการกำหนดเป็นสวิตช์คนละตัว

การอนุญาตตอบว่าโหนดนี้เข้าร่วมเครือข่ายได้หรือไม่ การกำหนดที่อยู่ตอบว่าเครือข่ายมอบอะไรให้เมื่อเข้าร่วม และคำตอบนั้นมาจากพูลที่อยู่บวกกับโหมดการกำหนด ไม่มีการตั้งค่าใดบ่งบอกอีกอย่างหนึ่ง อย่างหนึ่งคือการอนุญาต อีกอย่างคือการจัดสรร

การตั้งค่าคอนโทรลเลอร์มักมีเส้นทางที่จัดการได้ ช่วงที่อยู่ และโหมดที่ตัดสินว่าใช้การกำหนดอัตโนมัติหรือไม่ การคัดลอกรหัสเครือข่ายจากสภาพแวดล้อมอื่นนำมาซึ่งสมาชิกภาพและไม่มีอะไรจากการตั้งค่านั้น

นี่คือเหตุผลที่อุปกรณ์อาจดูปกติในรายชื่อสมาชิก ขณะที่คอลัมน์ที่อยู่ที่กำหนดยังว่างอยู่ คอนโทรลเลอร์ยอมรับแล้วและไม่มีอะไรจะให้ ทั้งสองข้อความเป็นจริงในเวลาเดียวกัน

LayerWhat it decidesWhere it is configured
MembershipWhether the node may joinMember authorization on the network
PoolWhich addresses exist to hand outNetwork address range
Assignment modeWhether they are handed out automaticallyNetwork v4/v6 assignment settings

การอ่านสถานะจริงของสมาชิก

ถามไคลเอนต์ว่าได้รับอะไรจริง ไม่ใช่คอนโทรลเลอร์ตั้งใจจะให้อะไร รายการธรรมดาแสดงคอลัมน์สถานะและที่อยู่ และรูปแบบ JSON แสดงการตั้งค่าเครือข่ายที่ไคลเอนต์ใช้ รวมถึงที่อยู่และเส้นทางที่จัดการ

zerotier-cli listnetworks
zerotier-cli -j listnetworks | jq '.networks[] | {nwid, status, assignedAddresses}'

เปรียบเทียบผลลัพธ์ทั้งสองสำหรับรหัสเครือข่ายเดียวกัน ไม่ใช่อะแดปเตอร์กายภาพที่ปรากฏในรายการของระบบปฏิบัติการเอง แถวที่รายงาน OK ด้วยชุดที่อยู่ว่างยืนยันช่องว่างในการกำหนด ไม่ใช่ความผิดพลาดของการเชื่อมต่อ การอ่านแถวผิดคืออีกครึ่งหนึ่งของความผิดพลาดนี้

สถานะ ACCESS_DENIED ชี้กลับไปที่การอนุญาต และนั่นคือการซ่อมอีกแบบ ถ้าคำสั่งอ่านโทเคนการพิสูจน์ตัวตนภายในเครื่องไม่ได้เลย ปัญหาคือสิทธิ์ภายในเครื่อง ไม่ใช่การปฏิเสธจากคอนโทรลเลอร์ และการแก้ไขอยู่ที่เครื่องที่คุณนั่งอยู่

เมื่อไคลเอนต์เพิกเฉยต่อสิ่งที่คอนโทรลเลอร์ส่งมา

ไคลเอนต์มีการตั้งค่าของตัวเองที่ตัดสินว่าจะใช้การตั้งค่าที่จัดการหรือไม่ โปรไฟล์ที่ปิดที่อยู่ที่จัดการ เส้นทางที่จัดการ หรือการจัดการเส้นทางเริ่มต้นจะทิ้งสิ่งที่เครือข่ายส่งมา และรายชื่อสมาชิกจะยังดูถูกต้องจากฝั่งคอนโทรลเลอร์

แฟล็กเหล่านั้นมีผลกับโหนดภายในเครื่องเท่านั้น การเปลี่ยนไม่มีผลกับสิ่งที่สมาชิกอื่นได้รับ และไม่ได้ซ่อมพูลที่ไม่เคยถูกกำหนด

ดังนั้นการวินิจฉัยมีสองแขนง: คอนโทรลเลอร์ไม่มีที่อยู่จะให้ หรือไคลเอนต์ปฏิเสธที่อยู่ที่ได้รับ ทั้งสองนำไปสู่การซ่อมที่ต่างกันบนเครื่องที่ต่างกัน ผลลัพธ์ JSON แยกทั้งสอง เพราะที่อยู่หายไปจากการตั้งค่าเครือข่าย หรือมีอยู่แต่หายไปจากสถานะที่ไคลเอนต์ใช้

สิ่งที่ควรซ่อมแทนการสร้างที่อยู่ขึ้นมา

การพิมพ์ที่อยู่แบบคงที่ตามอำเภอใจเป็นทางเลือกที่สามที่น่าดึงดูดและแย่ที่สุด ที่อยู่แบบสุ่มอาจชนกับโหนดอื่น อยู่นอกเส้นทางที่เครือข่ายประกาศ หรือตกในช่วงที่กฎไฟร์วอลล์จัดการต่างออกไป นอกจากนี้ยังซ่อนพูลที่หายไปจากทุกคนที่จะดูเครือข่ายต่อไป ซ่อมการกำหนดแทน และปล่อยให้คอนโทรลเลอร์กับไคลเอนต์ตกลงผลลัพธ์ร่วมกัน

ถามผู้ดูแลว่าเครือข่ายควรจ่ายอะไร แล้วตรวจสอบว่าพูลครอบคลุมช่วงที่ต้องการและโหมดการกำหนดเปิดอยู่ เข้าร่วมใหม่หลังการเปลี่ยนแปลง แทนที่จะคาดว่าไคลเอนต์จะไปถึงการตั้งค่าใหม่เองทันที

เมื่อที่อยู่ปรากฏ ตรวจสอบสิ่งที่คุณต้องการจริง: เพียร์ บริการ หรือซับเน็ตหลังเกตเวย์ การเข้าถึง LAN หลังสมาชิกต้องมีการกำหนดเส้นทางและการส่งต่อเกินกว่าสมาชิกภาพ และการเข้าถึงอินเทอร์เน็ตทั่วไปต้องมีโหนดทางออก ที่อยู่ที่ใช้งานได้จึงเป็นจุดเริ่มต้นของการทดสอบนั้น ไม่ใช่จุดสิ้นสุด

บทความที่เกี่ยวข้อง