mDNS บน WireGuard: สามด่านก่อนที่ peer จะตอบ
Avahi ต้องมีอินเทอร์เฟซที่เหมาะสม เส้นทางไปยังกลุ่ม และ peer ที่เป็นเจ้าของปลายทาง สามด่าน สามการตรวจแยกกัน และไม่มีการกระจาย
การตั้งค่าสถานะ 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 ใด ๆ
| Observation | Gate it belongs to | What it does not prove |
|---|---|---|
Multicast flag present on wg0 | Interface eligibility | The daemon will use the interface |
Route to the group via wg0 | Forwarding | Any peer will receive it |
| Destination inside a peer's allowed list | Peer selection | That peer's network will answer |
หากไม่มีเส้นทางเฉพาะ เคอร์เนลจะกลับไปใช้การจัดการ multicast ของลิงก์เอง ซึ่งเป็นเหตุผลว่าค่าเริ่มต้นดูถูกต้องบน LAN แบนราบและผิดทันทีที่ทราฟฟิกกลุ่มเดียวกันต้องออกทางอุโมงค์ ความล้มเหลวเงียบจากฝั่งผู้ส่ง คำถามไปที่ไหนสักแห่ง และคำตอบไม่เคยมาถึง
ด่านที่สาม: WireGuard เลือก peer หนึ่งตัวต่อแพ็กเก็ต
WireGuard เลือก peer ขาออกโดยค้นหาปลายทางในชุดที่อยู่ที่อนุญาต และเส้นทางส่งของลินุกซ์ทำการค้นหานั้นหนึ่งครั้งต่อแพ็กเก็ต ผลลัพธ์มีเพียงหนึ่ง และแพ็กเก็ตถูกเข้ารหัสสำหรับ peer นั้น คำนำหน้ากลุ่มเดียวกันที่ปรากฏในรายการที่อนุญาตของหลาย peer ไม่ได้สร้างสมาชิกภาพหรือการทำซ้ำ แต่สร้างการค้นหาที่กำกวมซึ่งคลี่คลายไปยังหนึ่งในนั้น
บนลิงก์เฉพาะสองปลายทาง นี่คือสิ่งที่คุณต้องการ เพราะมีผู้รับที่ตั้งใจไว้เพียงหนึ่งรายสำหรับทราฟฟิกกลุ่มที่บรรทุกโดยเจตนา บนอินเทอร์เฟซที่มีห้า peer นี่คือข้อจำกัด ไม่ใช่คุณสมบัติ และการแก้ไขเป็นเรื่องของการออกแบบ ไม่ใช่การกำหนดค่าของ peer ใด peer หนึ่ง
การออกแบบแบบกระจายต้องมีรีเลย์ที่ชัดเจน ลิงก์แยก หรือกลไกค้นหาที่แตกต่างไปเลย การเผยแพร่สูตรสองปลายทางเป็นโซลูชันหลายไคลเอนต์เพราะทุกไคลเอนต์สามารถ ping เกตเวย์ได้ คือวิธีที่สิ่งนี้ถูกติดตั้งอย่างผิดพลาด
ทิศทางขาเข้าตรวจสอบต่างออกไป แหล่งที่มาของแพ็กเก็ตที่ได้รับต้องอยู่ในรายการที่อนุญาตของ peer ที่ผ่านการรับรอง การเพิ่มปลายทาง multicast ที่นั่น ไม่ได้แทนที่ความเป็นเจ้าของแหล่งที่มาที่แท้จริงของผู้ส่ง
การสะท้อนเป็นขอบเขต ไม่ใช่สะพาน
ตัวสะท้อนของ Avahi สร้างข้อความ mDNS ขึ้นใหม่ระหว่างอินเทอร์เฟซที่เลือก ในชั้นแอปพลิเคชัน มันเป็นขอบเขตการค้นหาระหว่างเครือข่าย ไม่ใช่สะพานอีเทอร์เน็ตและไม่ใช่เราเตอร์ multicast ทั่วไป ตัวสะท้อนสองตัวที่เชื่อมต่อกับเครือข่ายเดียวกันจะสร้างลูปของการประกาศซ้ำ ๆ อย่างมีความสุข
การสะท้อนยังส่งชื่อบริการและเมทาดาทาของบริการเหล่านั้นไปยังเครือข่ายอื่น ซึ่งเป็นการตัดสินใจด้านความเป็นส่วนตัวพอ ๆ กับเป็นการตัดสินใจด้านเส้นทาง จำกัดอินเทอร์เฟซที่เลือก และใช้ตัวกรองบริการในที่ที่เวอร์ชันที่ติดตั้งรองรับ เพื่อให้เฉพาะการประกาศที่ผู้ใช้ที่ได้รับอนุญาตต้องการข้ามขอบเขต
การค้นพบและการใช้งานยังคงเป็นผลลัพธ์ที่แยกจากกัน ไคลเอนต์อาจเห็นการประกาศของบริการที่ที่อยู่ที่โฆษณาไม่สามารถเข้าถึงได้จากที่ที่ไคลเอนต์อยู่ หรือพอร์ตที่ถูกนโยบายการเข้าถึงของมันปฏิเสธ ยืนยันการเชื่อมต่อบริการหลังจากประกาศปรากฏขึ้น และหากแอปพลิเคชันรองรับชื่อ DNS ที่เสถียรหรือที่อยู่เซิร์ฟเวอร์ที่ชัดเจน ให้เลือกสิ่งนั้นแทนการขยายการค้นหาแบบลิงก์โลคัล คำอธิบายการกำหนดเส้นทางด้วยคีย์เข้ารหัส ครอบคลุมการเลือก peer ตามปลายทางที่ทั้งหมดนี้ขึ้นอยู่กับ