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

wg-quick ทำทั้งสองอย่างโดยไม่ต้องมีใครขอ ส่วนรองรับ WireGuard ที่มีมาใน NetworkManager ก็ติดตั้งเส้นทางของ peer เป็นค่าเริ่มต้นด้วย ซึ่งทำให้ผู้ต้องสงสัยเหลือเพียงตัวเลือกที่ปิดใช้งาน ตารางเส้นทางอื่น หรือการกำหนดค่าที่นำเข้าผ่านอย่างอื่น

ยืนยันอุโมงค์ก่อนตามหาเส้นทาง

wg show พิมพ์อินเทอร์เฟซ peer จุดปลายทาง และอายุของการจับมือครั้งล่าสุด และ ip addr show ยืนยันว่ามีที่อยู่นั้นอยู่ การจับมือล่าสุดหมายความว่าคีย์ จุดปลายทาง และเส้นทาง UDP ทำงานอยู่ สิ่งที่เสียทั้งหมดอยู่ปลายน้ำของมัน: การกำหนดเส้นทาง การกรอง หรือการแปลงชื่อ

จากนั้นถามเคอร์เนลว่าจะทำอะไรกับปลายทางจริงแทนที่จะเป็นปลายทางสมมติ: ip route get 10.42.7.9 คำตอบระบุอินเทอร์เฟซขาออกและที่อยู่ต้นทางที่แพ็กเก็ตจะพาไป เมื่อมันระบุอะแดปเตอร์กายภาพ แพ็กเก็ตจะไม่เข้าสู่อุโมงค์เลย ไม่ว่าการจับมือจะดูสมบูรณ์เพียงใด

AllowedIPs เป็นทั้งตัวกรองและรายการเส้นทาง

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

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

ถามว่าเส้นทางของ peer ถูกเปิดใช้งานหรือไม่

อ่านการตั้งค่าก่อนแก้ไขสิ่งใด: nmcli -f wireguard.peer-routes,ipv4.route-table connection show work-wg เมื่อ peer-routes แสดง no การซ่อมที่รองรับคือ nmcli connection modify work-wg wireguard.peer-routes yes ตามด้วยการเชื่อมต่อใหม่ การเพิ่มเส้นทางแบบคงที่แทนจะทำงานได้จนถึงการเปิดใช้งานครั้งถัดไปแล้วก็หายไปอย่างเงียบ ๆ การหายไปนั้นคือเบาะแส: เส้นทางที่กลับมาเป็นปริศนาทุกเช้าไม่ได้ถูกติดตั้งโดยโปรไฟล์

หากตัวเลือกเปิดใช้งานอยู่แล้ว ให้ตรวจสอบว่าคำนำหน้าอาศัยอยู่ในตารางอื่นด้วย ip route show table all | grep 10 เส้นทางในตารางที่ไม่ใช่ตารางหลักไม่ได้หายไป แต่มองไม่เห็นสำหรับการค้นหาที่ดูเฉพาะตารางหลัก แก้ไขการกำหนดเส้นทางตามนโยบายแทนที่จะซ้อนรายการซ้ำไว้ข้างบน

เพิ่มคำนำหน้าไปที่การเชื่อมต่อ ไม่ใช่ที่ระบบที่กำลังทำงาน

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

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

การแบ่งอุโมงค์ถูกกำหนดโดยรายการคำนำหน้า

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

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

เจ้าของตารางเส้นทางเพียงรายเดียว

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

เมื่อการแบ่งต้องตามอะแดปเตอร์กายภาพแทนที่จะเป็นปลายทาง คุณได้ย้ายไปสู่การกำหนดเส้นทางตามนโยบาย และการกำหนดเส้นทางตามนโยบายก็ต้องการผู้เขียนเพียงคนเดียว ตรวจสอบโดยทำ ip route get ซ้ำ แล้วเข้าถึงโฮสต์ภายในคำนำหน้าปลายทางไกลด้วยสิ่งที่พิมพ์ที่อยู่ต้นทางที่มันเลือก ตรวจสอบ IPv6 และ DNS แยกกันหากโปรไฟล์มีอย่างใดอย่างหนึ่ง

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