ZeroTier สู่ LAN: กฎเส้นทางของ UFW ไม่ใช่การอนุญาตพอร์ต
การอนุญาตพอร์ตบนเกตเวย์ไม่เหมือนกับการส่งต่อไปยังโฮสต์ที่อยู่ข้างหลัง ตั้งค่าเส้นทางที่จัดการ เปิดใช้งานการส่งผ่าน และเลือกเส้นทางขากลับ
การเข้าถึงเครื่องพิมพ์บน LAN ของออฟฟิศผ่านสมาชิก ZeroTier ฟังดูเหมือนกฎข้อเดียว แต่จริง ๆ แล้วเป็นการตัดสินใจสามอย่างในสามตำแหน่งที่ต่างกัน เลเยอร์ซ้อนต้องรู้ว่า LAN อยู่ที่ใด โฮสต์ Linux ต้องยินยอมที่จะส่งต่อแพ็กเก็ต และ LAN ต้องรู้ว่าจะส่งคำตอบกลับอย่างไร กฎขาเข้าที่เปิดพอร์ตบนเกตเวย์ไม่ได้แตะต้องสิ่งใดในนั้นเลย มันเป็นเครื่องมือที่ผิดบนโฮสต์ที่ถูก
สามงาน สามเจ้าของ
เส้นทางที่จัดการเป็นของคอนฟิกูเรชันเครือข่าย ZeroTier มันบอกสมาชิกว่าคำนำหน้าหนึ่งเข้าถึงได้ผ่านที่อยู่สมาชิกที่เจาะจง
การส่งต่อเป็นของเคอร์เนล Linux และของผู้ที่เป็นเจ้าของนโยบายไฟร์วอลล์ มันตัดสินว่าแพ็กเก็ตที่มาถึงบนเลเยอร์ซ้อนจะออกจากอินเทอร์เฟซจริงอีกครั้งหรือไม่ โฮสต์ที่ไม่ส่งต่อจะทิ้งแพ็กเก็ตอย่างเงียบ ๆ หลังจากรับมันแล้ว ผู้ส่งจะเห็นการหมดเวลา และไม่มีอะไรปรากฏในบันทึกของบริการ
เส้นทางขากลับเป็นของ LAN โฮสต์และเราเตอร์ของมันต้องรู้ว่าคำนำหน้าเลเยอร์ซ้อนเข้าถึงได้ผ่านที่อยู่ LAN ของเกตเวย์คุณ หรือมีบางสิ่งต้องแปลงทราฟฟิกเพื่อไม่ให้คำถามนี้เกิดขึ้นเลย
แต่ละอย่างเหล่านี้อาจถูกต้องในขณะที่อย่างอื่นล้มเหลว จึงเป็นเหตุให้การทดสอบที่เพียงแค่ ping เกตเวย์ไม่ได้พิสูจน์อะไรเกี่ยวกับบริการที่อยู่ข้างหลัง
ชี้เส้นทางที่จัดการไปที่สมาชิก
เพิ่มเส้นทางสำหรับคำนำหน้า LAN ที่ต้องการผ่านที่อยู่เลเยอร์ซ้อนของเกตเวย์ ไม่ใช่ผ่านที่อยู่ LAN ของมัน ที่อยู่เลเยอร์ซ้อนคือที่อยู่ที่สมาชิกอื่นเข้าถึงได้ ส่วนที่อยู่ LAN มีความหมายเฉพาะบนสายเคเบิล
สมาชิกต้องยอมรับเส้นทางที่จัดการเพื่อให้การออกแบบทำงาน และเครือข่ายท้องถิ่นของพวกเขาต้องไม่ใช้คำนำหน้าที่คุณประกาศอยู่แล้ว แล็ปท็อปทางไกลที่อยู่ที่บ้านบน 192.168.60.0/24 ก็ไม่สามารถกำหนดเส้นทาง 192.168.60.0/24 ผ่านเลเยอร์ซ้อนได้เช่นกัน
รักษาคำนำหน้าที่ประกาศให้แคบเท่าที่งานอนุญาต การประกาศกลุ่มที่ใหญ่ขึ้นเพื่อจูงใจการเลือกเส้นทางอาจอ้างสิทธิ์พื้นที่ที่อยู่ที่ไม่ใช่ของคุณ และความขัดแย้งที่เกิดขึ้นจะปรากฏบนอุปกรณ์ที่เชื่อมต่อกับทั้งสองเครือข่าย มันยังอาจทำให้สมาชิกเลือกเส้นทางที่ไม่นำไปที่ใดเลย รักษาเส้นทางให้ซื่อตรงและปล่อยให้แนวนโยบายจัดการส่วนที่เหลือ
เขียนคำนำหน้าและที่อยู่สมาชิกลงในบันทึกเดียวกับกฎไฟร์วอลล์ เพราะความล้มเหลวที่พบบ่อยที่สุดคือเส้นทางที่ชี้ไปยังสมาชิกผิดตัว
เปิดใช้งานการส่งผ่านในเคอร์เนล
อ่านค่าการส่งผ่านที่กำลังทำงานก่อนเปลี่ยนแปลงสิ่งใด แล้วทำให้การตั้งค่าคงอยู่ผ่านกลไกที่ระบบของคุณใช้อยู่แล้ว ไม่ใช่ผ่านคำสั่งครั้งเดียวที่หายไปเมื่อรีบูต
หาก UFW เป็นเจ้าของนโยบาย กฎเส้นทางของมันแสดงการส่งต่อสำหรับคู่ของต้นทาง ปลายทาง และอินเทอร์เฟซ กฎเหล่านี้แยกจากกฎขาเข้าที่เปิดบริการบนเกตเวย์เอง:
sysctl net.ipv4.ip_forward
sudo ufw route allow in on zt3f2a1c9d out on eth0 proto tcp to 192.168.60.20 port 443
sudo ufw status verbose
ชื่ออินเทอร์เฟซคืออุปกรณ์เลเยอร์ซ้อนจริงบนโฮสต์นั้น ซึ่งคุณอ่านได้จาก ip link ไม่ใช่สตริงตายตัวในทุกการติดตั้ง หากโฮสต์ส่งต่อโดยค่าเริ่มต้นและ UFW ไม่ได้อยู่ในเส้นทาง กฎเส้นทางจะถูกเพิกเฉย และการตั้งค่าเคอร์เนลคือสิ่งที่สำคัญ
เลือกว่าคำตอบจะกลับมาอย่างไร
เมื่อรักษาต้นทาง บริการบน LAN จะเห็นที่อยู่เลเยอร์ซ้อนจริงและตอบกลับไปที่นั้น ซึ่งต้องมีเส้นทางบนโฮสต์ LAN หรือเราเตอร์ของมันที่ชี้คำนำหน้าเลเยอร์ซ้อนมาที่เกตเวย์ของคุณ และนั่นคือการเปลี่ยนแปลงนอกกล่อง Linux
เมื่อไม่สามารถเพิ่มเส้นทางนั้นได้ การแปลงต้นทางแบบจำกัดขอบเขตจะทำให้คำขอดูเหมือนมาจากเกตเวย์บน LAN คำตอบจึงกลับมาในท้องถิ่นและไม่ต้องเปลี่ยนการกำหนดเส้นทางของ LAN แต่ต้องแลกกับการสูญเสียต้นทางเดิมในบันทึกของบริการ
จำกัดการแปลงให้อยู่ที่ต้นทางเลเยอร์ซ้อนและปลายทาง LAN ที่เจาะจง การแปลงทุกอย่างที่ออกจากอินเทอร์เฟซ LAN คือเวอร์ชันกว้างที่ทำให้ผู้ที่อ่านกฎประหลาดใจในภายหลัง และยังซ่อนทราฟฟิกที่ควรถูกบล็อก
ไม่มีตัวเลือกใดให้การเข้าถึงโดยไม่ได้ขอจาก LAN กลับไปยังสมาชิกเลเยอร์ซ้อนตามอำเภอใจ หากต้องการสิ่งนั้น มันเป็นกฎแยกที่มีการตรวจทานของตัวเอง
ทดสอบจากสมาชิกจริง
เชื่อมต่อจากสมาชิกอื่น ไม่ใช่จากเกตเวย์ และขอบริการที่ได้รับอนุญาตหนึ่งอย่าง จากนั้นลองบริการที่ควรปิดอยู่ และทำการทดสอบทั้งสองซ้ำหลังจากเชื่อมต่อใหม่และหลังจากรีบูตเกตเวย์
สมาชิกที่ รายงาน ONLINE หรือ ping ที่สำเร็จไปยังที่อยู่เลเยอร์ซ้อนของเกตเวย์ ไม่ได้ยืนยันเส้นทาง กฎการส่งต่อ หรือเส้นทางขากลับ:
zerotier-cli listnetworks
ip -4 route get 192.168.60.20
sudo ufw status numbered
คำสั่งที่สองแสดงว่าอินเทอร์เฟซใดที่แพ็กเก็ตจะใช้ไปยังโฮสต์ LAN และคำสั่งที่สามแสดงว่ากฎเส้นทางมีอยู่ในรูปแบบที่คุณตั้งใจหรือไม่ หากทั้งสองดูถูกต้องแต่บริการยังหมดเวลา เส้นทางขากลับคือผู้ต้องสงสัยที่เหลือ