โหนดทางออกของ ZeroTier ไม่ทำงาน? ตรวจสอบเส้นทาง NAT และไคลเอนต์
เส้นทาง 0.0.0.0/0 ในไคลเอนต์ไม่ใช่ทางออก โหนดต้องส่งต่อและแปลงที่อยู่ เครือข่ายต้องประกาศเส้นทาง และไคลเอนต์ต้องยอมรับ
ตารางเส้นทางแสดงเส้นทางเริ่มต้นผ่านอินเทอร์เฟซ ZeroTier เครือข่ายรายงานว่าออนไลน์ แต่เบราว์เซอร์ยังออกผ่านที่อยู่ ISP ในเครื่อง การรวมกันนี้พบได้บ่อยและไม่ใช่ข้อบกพร่องของไคลเอนต์ เส้นทางเริ่มต้นเพียงบอกว่าอินเทอร์เฟซใดควรรับแพ็กเก็ต ต้องมีสิ่งที่ส่งต่อและแปลงแพ็กเก็ตที่ปลายอีกด้าน สามส่วนแยกกันต้องเป็นจริงก่อนที่โหนดทางออกจะทำงาน
มีเส้นทางแต่ไม่มีอะไรออกไป
ตรวจสอบตารางเส้นทางของไคลเอนต์ก่อน บรรทัดอย่าง default via 10.147.20.5 dev zt0 พิสูจน์ว่าติดตั้งเส้นทางแล้ว ไม่ได้พิสูจน์ว่าปลายทางจะรับทราฟฟิก ฮอปถัดไปต้องเป็นสมาชิกที่ยินดีและสามารถส่งต่อได้
หากคำขอเดิมยังออกผ่านอินเทอร์เฟซกายภาพ ไคลเอนต์ไม่ได้ติดตั้งเส้นทาง หรือติดตั้งด้วยเมตริกที่แพ้เส้นทางเริ่มต้นในเครื่อง หากคำขอหายไปหลังติดตั้งเส้นทาง สมาชิกทางออกกำลังรับแพ็กเก็ตแต่ส่งต่อหรือแปลงไม่ได้ ไคลเอนต์ที่เก็บเส้นทางเริ่มต้นกายภาพไว้จะไม่ส่งแพ็กเก็ตใด ๆ ไปยังทางออกเลย
ความแตกต่างนี้กำหนดว่าต้องแก้ที่ใด การเปรียบเทียบที่อยู่สาธารณะก่อนและหลังการเปลี่ยนแปลงแยกเส้นทางที่ไม่เคยใช้กับเส้นทางที่ใช้แล้วถูกทิ้ง และใช้คำสั่งเดียวแทนการตรวจสอบการกำหนดค่าทั้งหมด ทำการเปรียบเทียบก่อนเปลี่ยนสิ่งอื่น เพื่อให้ผลลัพธ์ทั้งสองมาจากสถานะเริ่มต้นเดียวกัน
สามส่วนที่ต้องเป็นจริงทั้งหมด
ทางออกคือห่วงโซ่ และข้อต่อที่อ่อนแอที่สุดกำหนดอาการ ตารางด้านล่างเรียงข้อต่อตามลำดับที่มักล้มเหลว
| Part | Where it lives | What a failure looks like |
|---|---|---|
| Forwarding and NAT | Exit node kernel and firewall | Traffic arrives, no reply |
| Managed default route | ZeroTier network controller | No default via the tunnel on the member |
| Client acceptance | Member's per-network setting | Route offered but not installed |
| DNS behavior | Client resolver configuration | Pages fail by name, IP works |
แถวแรกคือสิ่งที่ชื่อตัวเลือกซ่อนไว้ สมาชิกจะกลายเป็นทางออกก็ต่อเมื่อเคอร์เนลส่งต่อแพ็กเก็ตระหว่างอินเทอร์เฟซ ZeroTier กับอินเทอร์เฟซที่หันสู่อินเทอร์เน็ต และเมื่อเส้นทางตอบกลับถูกแปลงกลับเข้าอุโมงค์ หากไม่มีการส่งต่อนั้น สมาชิกก็เป็นเพียงเพียร์ ไม่ใช่เกตเวย์
แถวของคอนโทรลเลอร์คือการอนุญาต ไม่ใช่การกำหนดค่า การประกาศ 0.0.0.0/0 ผ่านสมาชิกบอกไคลเอนต์ทุกตัวว่าทางออกอยู่ที่ใด แต่ไม่ได้ทำให้สมาชิกนั้นสามารถรับทราฟฟิกได้ และไม่ได้ตรวจสอบว่าสมาชิกมีเส้นทางที่ใช้งานได้สู่อินเทอร์เน็ตหรือไม่ เอกสารโหนดทางออกของ ZeroTier ครอบคลุมการแยกส่วนระหว่างโหนด เส้นทาง และไคลเอนต์เช่นเดียวกัน
กำหนดค่าโหนดทางออกให้ส่งต่อและแปลง
เปิดใช้การส่งต่อ IPv4 อย่างถาวร จากนั้นเพิ่ม NAT ต้นทางสำหรับทราฟฟิกที่ออกจากอินเทอร์เฟซ WAN กฎไฟล์เตอร์ต้องอนุญาตโฟลว์ที่ส่งต่อทั้งสองทิศทาง เพราะการส่งต่อและการแปลงแยกจากการอนุญาต:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i zt0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o zt0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPTแทนที่ zt0 และ eth0 ด้วยชื่อบนโฮสต์ กฎที่บันทึกไว้สำหรับอินเทอร์เฟซตัวอย่างจะไม่ติดตามแพ็กเก็ตบนอินเทอร์เฟซจริง ทำให้การเปลี่ยนแปลงถาวรผ่านตัวจัดการไฟร์วอลล์ที่เป็นเจ้าของกฎ เพราะคำสั่งในเชลล์แบบโต้ตอบจะหายไปเมื่อรีบูตครั้งถัดไป
หากโฮสต์รันตัวจัดการไฟร์วอลล์อย่าง UFW หรือ firewalld ให้เพิ่มกฎผ่านตัวจัดการนั้นแทนการวางบรรทัด iptables ไว้ข้าง ๆ เจ้าของสองรายที่แก้ไขเชนเดียวกันจะสร้างนโยบายที่ขึ้นกับลำดับการบูต ลำดับมีความสำคัญเมื่อตัวจัดการสร้างเชนของตัวเอง ทดสอบจากไคลเอนต์หลังจากโหลดตัวจัดการใหม่ ไม่ใช่ก่อนหน้า
ประกาศเส้นทางและยอมรับบนไคลเอนต์
บนคอนโทรลเลอร์เครือข่าย เพิ่มเส้นทางที่จัดการสำหรับ 0.0.0.0/0 ซึ่งฮอปถัดไปคือที่อยู่ ZeroTier ของสมาชิกทางออก จากนั้นบนสมาชิกที่ควรใช้เส้นทางนั้น อนุญาตการเขียนทับสำหรับเครือข่ายนั้น การอนุญาตเป็นแบบท้องถิ่น ไม่กำหนดค่าสมาชิกอื่นใหม่และไม่เปลี่ยนคอนโทรลเลอร์
zerotier-cli listnetworks
zerotier-cli set <network-id> allowDefault=1
ip route get 1.1.1.1คำสั่งสุดท้ายควรแสดงอินเทอร์เฟซ ZeroTier และที่อยู่ของสมาชิกทางออก หากยังแสดงอินเทอร์เฟซกายภาพ แสดงว่าเส้นทางหายไปหรือเส้นทางเริ่มต้นที่แข่งขันมีเมตริกดีกว่า
จำกัดการตั้งค่าไว้เฉพาะเครือข่ายที่ต้องการ การเปิดใช้การยอมรับเส้นทางเริ่มต้นทั่วโลก หรือบนเครือข่ายที่ควรให้เฉพาะซับเน็ตส่วนตัว จะส่งทราฟฟิกผ่านทางออกที่ไม่เคยถูกออกแบบมารองรับ
ตรวจสอบทางออกและดูตระกูลที่อยู่อื่น
ขอที่อยู่สาธารณะจากบริการที่รายงานต้นทาง และเปรียบเทียบกับที่อยู่ WAN ของโหนดทางออก จากนั้นโหลดเว็บไซต์ตามชื่อเพื่อยืนยันว่า DNS ยังแก้ไขได้ และทดสอบแอปพลิเคชันสำคัญหนึ่งตัว ไม่ใช่แค่เบราว์เซอร์
ไคลเอนต์แบบ dual-stack ยังใช้เส้นทาง IPv6 ดั้งเดิมได้ขณะที่ IPv4 ออกผ่าน ZeroTier หากเป้าหมายคือซ่อนหรือควบคุมทราฟฟิกทั้งหมด ต้องมีเส้นทาง ::/0 แยกต่างหากและการส่งต่อ IPv6 บนทางออก และการทดสอบ IPv4 ไม่ได้บอกอะไรเกี่ยวกับสิ่งเหล่านั้น
การกรองเส้นทางย้อนกลับของ Linux อาจทิ้งทราฟฟิกทางออกที่ถูกต้องบนไคลเอนต์ ZeroTier เอกสารข้อพิจารณา rp_filter สำหรับสมาชิกที่เข้าร่วม เปลี่ยนการตั้งค่านั้นอย่างตั้งใจและหลังจากยืนยันเส้นทางและ NAT แล้วเท่านั้น ไม่ใช่เป็นการทดลองแรก
หากความต้องการคือการเข้าถึง NAS หรือซับเน็ตสำนักงานหนึ่งแห่ง เส้นทางที่จัดการสำหรับคำนำหน้านั้นเป็นการเปลี่ยนแปลงที่เล็กกว่าและปลอดภัยกว่าทางออกเต็มรูปแบบ การส่งการท่องเว็บทั้งหมดผ่านอุปกรณ์อื่นเป็นการตัดสินใจที่ต่างจากการเข้าถึงทรัพยากรส่วนตัวหนึ่งรายการ และสมควรได้รับการทบทวนแยกต่างหาก