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

คำนำหน้าที่ยาวที่สุดชนะภายใน WireGuard

แต่ละรายการ peer มีชุดคำนำหน้าปลายทาง เมื่อแพ็กเก็ตถูกส่งไปยังอินเทอร์เฟซ การทำงานจะค้นหารายการที่มีคำนำหน้าที่ตรงกันเจาะจงที่สุด — กฎเดียวกับที่ตารางเส้นทางใช้ ดังนั้น /24 จึงชนะ /16 ที่มีมันอยู่ และ peer ที่แคบกว่าจะได้รับทราฟฟิก

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

จดบันทึกความเป็นเจ้าของเป็นตารางของคำนำหน้าและ peer หากสองรายการอธิบายคำนำหน้าเดียวกัน การกำหนดค่าจะไม่แสดงเจตนาอีกต่อไป แต่แสดงการแข่งขัน

ระบบปฏิบัติการเลือกอินเทอร์เฟซก่อน

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

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

แพ็กเก็ตขาเข้าถูกตรวจสอบตามต้นทาง

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

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

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

ช่วงที่ซ้ำกันไม่ใช่ failover

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

การขยายช่วงเพื่อแก้ความล้มเหลวที่ไม่เกี่ยวข้องเป็นข้อผิดพลาดทั่วไปอีกข้อ มันย้ายทราฟฟิกออกจาก peer ที่ทำงานอยู่ และอาการใหม่จะมาถึงก่อนที่อาการเก่าจะถูกเข้าใจ

ตรวจสอบการเลือกก่อนแก้ไข

สามคำสั่งตอบสามคำถามตามลำดับ คำสั่งแรกแสดงช่วงที่แต่ละ peer อ้างสิทธิ์ คำสั่งที่สองแสดงว่าอินเทอร์เฟซใดที่โฮสต์จะใช้สำหรับปลายทาง คำสั่งที่สามแสดงสถานะสดของ peer หลังจากทราฟฟิกไหลแล้ว

wg show wg0 allowed-ips
ip route get 10.66.8.20
wg show wg0
ip rule show

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

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

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