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

ทดสอบตามลำดับ เพราะการผ่านด่านหนึ่งไม่ได้บอกอะไรเกี่ยวกับด่านถัดไป

ด่านแรก: ธงและนโยบายของเดมอน

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

เดมอนจึงต้องการการตัดสินใจที่ชัดเจน ไม่ใช่แค่กระบวนการที่ทำงานอยู่ การควบคุมที่บันทึกไว้ของมันรวมถึง allow-interfaces deny-interfaces และ allow-point-to-point และตัวสุดท้ายคือการตั้งค่าที่ผู้คนมองข้าม

การตรวจสอบด้านล่างรายงานธงของลิงก์ เส้นทาง multicast และว่าการกำหนดค่าของเดมอนถูกแยกวิเคราะห์หรือไม่:

ip -d link show wg0
ip route get 224.0.0.251
avahi-daemon --check

เดมอนที่เริ่มทำงานสำเร็จไม่ได้เปิดซ็อกเก็ตบนอินเทอร์เฟซที่คุณสนใจเสมอไป อ่านการกำหนดค่าที่มีผลจริงแทนการสันนิษฐานว่าสถานะบริการเท่ากับความครอบคลุม

ด่านที่สอง: เส้นทางไปยังกลุ่ม

ด่านที่สองคือการกำหนดเส้นทางปกติ แพ็กเก็ตที่ส่งไปยัง 224.0.0.251 จะตามตารางส่งต่อเหมือนสิ่งอื่น ๆ และหากตารางส่งออกไปทางอินเทอร์เฟซ LAN จริง การกำหนดค่า WireGuard ใด ๆ ก็ไม่เปลี่ยนสิ่งนั้น แก้เส้นทางก่อนแล้วส่วนที่เหลือของการสอบสวนจะสั้นลง ดูว่าเคอร์เนลรายงานอะไรสำหรับที่อยู่กลุ่มก่อนแตะคีย์ peer ใด ๆ

ObservationGate it belongs toWhat it does not prove
Multicast flag present on wg0Interface eligibilityThe daemon will use the interface
Route to the group via wg0ForwardingAny peer will receive it
Destination inside a peer's allowed listPeer selectionThat peer's network will answer

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

ด่านที่สาม: WireGuard เลือก peer หนึ่งตัวต่อแพ็กเก็ต

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

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

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

ทิศทางขาเข้าตรวจสอบต่างออกไป แหล่งที่มาของแพ็กเก็ตที่ได้รับต้องอยู่ในรายการที่อนุญาตของ peer ที่ผ่านการรับรอง การเพิ่มปลายทาง multicast ที่นั่น ไม่ได้แทนที่ความเป็นเจ้าของแหล่งที่มาที่แท้จริงของผู้ส่ง

การสะท้อนเป็นขอบเขต ไม่ใช่สะพาน

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

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

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

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