วิธีให้ LAN ทดสอบหนึ่งวงมีทางออก WireGuard ของตัวเอง
จำกัด LAN หนึ่งวงให้ออกผ่าน WireGuard ด้วยตารางเส้นทางเฉพาะและยามที่ไปไม่ถึง ขณะที่เกตเวย์ยังคงเส้นทางเริ่มต้น WAN ปกติของตน
สามแนวทางแก้ปัญหาแล็บเดียวกัน คือ LAN เล็กที่ต้องออกผ่านเพียร์ WireGuard ขณะที่เกตเวย์เองยังคงใช้ลิงก์ขึ้นปกติ ทางลัดที่ชวนทำคือย้ายเส้นทางเริ่มต้นของเราเตอร์เข้าไปในอุโมงค์ แต่วิธีนั้นทำให้เส้นทางจัดการของตัวเครื่องและทุกอย่างที่มันส่งต่อพังไปด้วย ทางเลือกที่น่าสนใจคือเราเตอร์ตามนโยบายที่จำกัดเพียงหนึ่งอินเทอร์เฟซและหนึ่งพรีฟิกซ์ จงเลือกด้วยการตอบสามคำถามเกี่ยวกับเครื่องที่คุณมีจริง
ตัดสินใจว่าทางออกอยู่ที่ไหน
คำถามแรก เครื่องนี้ส่งต่อให้อย่างอื่นด้วยหรือไม่ เกตเวย์แล็บเฉพาะทางอยู่กับนโยบายส่งต่อที่ทิ้งทุกอย่างโดยปริยายได้ เราเตอร์ที่มีภาระงานผลิตทำเช่นนั้นไม่ได้ และการวางชุดกฎคู่แข่งทับไฟร์วอลล์ที่จัดการอยู่ก็เป็นวิธีที่ทำให้เกิดเหตุขัดข้องตามกำหนด คำถามที่สอง คุณเป็นเจ้าของอ็อบเจกต์นโยบายสองชิ้นและลำดับของมันข้ามการรีบูตได้หรือไม่ คำถามที่สาม เพียร์ที่คุณมีอนุญาตแอดเดรสต้นทางของอุโมงค์และให้ทางออกอินเทอร์เน็ตหรือไม่ เพียร์ที่เปิดเฉพาะเครือข่ายส่วนตัวเป็นสินค้าคนละแบบ และไม่มีการเปลี่ยนเส้นทางภายในใดแก้ได้ ถ้าคำตอบใดเป็นไม่ ให้วางทางออกไว้ในเนมสเปซหรือเครื่องเสมือนใช้ครั้งเดียวแทน
เนมสเปซหรือ VM กินหน่วยความจำและให้รัศมีผลกระทบที่สะอาด ส่วนเราเตอร์ตามนโยบายกินกฎสองข้อและเหลือกล่องให้ดีบักหนึ่งกล่อง
เลือกทางออกที่อนุญาตต้นทางของคุณ
ความล้มเหลวส่วนใหญ่ในแล็บนี้เกิดก่อนจะมีกฎไฟร์วอลล์สักข้อ ผู้ดูแลทางออกต้องยอมรับแอดเดรสต้นทางที่แพ็กเก็ตของคุณพกหลังการแปลง ซึ่งในการออกแบบนี้คือแอดเดรสอุโมงค์ไม่ใช่พรีฟิกซ์ LAN นี่คือเหตุผลที่การมาสค์ควรอยู่ในแบบตั้งแต่ต้น ไม่ใช่ส่วนเพิ่มภายหลัง
ยืนยันสามอย่างกับผู้ดูแล เพียร์อนุญาตแอดเดรสอุโมงค์ของคุณ มันส่งต่อ IPv4 แทนที่จะสิ้นสุดที่ตัวเอง และมันใช้ NAT ขาออก ถ้าไม่มีข้อแรกแพ็กเก็ตของคุณมาถึงแล้วหายไป ถ้าไม่มีข้อสามพวกมันออกไปพร้อมต้นทางส่วนตัวและตายที่ฮอปถัดไป จากนั้นตรวจว่า wg-quick ไม่ได้ติดตั้งเส้นทางเริ่มต้นของตัวเอง ซึ่ง Table = off ป้องกันไว้ การตั้งค่านั้นยับยั้งการสร้างเส้นทาง ไม่ใช่การตรวจ AllowedIPs ของเพียร์หรือการจัดการ DNS ของมัน
อ็อบเจกต์นโยบายสองชิ้นทำหน้าที่บังคับทิศทาง
การบังคับทิศทางต้องมีตารางและกฎ ตารางบรรจุเส้นทางสองเส้น คือพรีฟิกซ์ LAN ที่ออกจากอินเทอร์เฟซ LAN และเส้นทางเริ่มต้นที่ออกจากอุโมงค์ กฎส่งทราฟฟิกที่มาถึงอินเทอร์เฟซ LAN และพกพาพรีฟิกซ์นั้นเข้าไปในตาราง ใช้ตัวเลือก iif ควบคู่กับการจับคู่ต้นทาง เพราะแพ็กเก็ต WireGuard ของเกตเวย์เองเกิดขึ้นในเครื่องและไม่เคยตรงกับอินเทอร์เฟซขาเข้า
ยามมาก่อนการค้นหา ไม่ใช่หลังจากนั้น ลำดับนั้นคือคุณสมบัติความปลอดภัยทั้งหมดของการออกแบบ
ยามคือกฎข้อที่สองบนตัวเลือกเดียวกันซึ่งคำตัดสินคือ unreachable ให้ลำดับความสำคัญเชิงตัวเลขที่สูงกว่าเพื่อให้การค้นหายังชนะขณะอุโมงค์ขึ้นอยู่ เมื่อเส้นทางอุโมงค์หายไป การค้นหาไม่คืนอะไรและยามหยุดการค้นหาแทนที่จะปล่อยให้ตกไปยังเส้นทางเริ่มต้น WAN ในตารางหลัก
ip rule add from 192.168.50.0/24 iif lan0 lookup 51861 pref 1000
ip rule add from 192.168.50.0/24 iif lan0 unreachable pref 1001
ip route add table 51861 default dev wg0
ปิดช่องถอยกลับก่อนจะเปิดมัน
ติดตั้งยามก่อนแล้วจึงติดตั้งการค้นหา ถ้าทำกลับกันจะเหลือหน้าต่างหลายวินาทีที่ทราฟฟิกของไคลเอนต์ทดสอบไปถึงลิงก์ขึ้นได้
ฟิลเตอร์ทำให้ภาพสมบูรณ์ ในฮุก forward ยอมรับทิศจาก LAN ไปอุโมงค์สำหรับพรีฟิกซ์ทดสอบและทิศขากลับที่ตั้งไว้แล้ว จากนั้นทิ้งอย่างอื่นทั้งหมด NAT ของพรีฟิกซ์นั้นไปยังอินเทอร์เฟซอุโมงค์อยู่ใน postrouting การปล่อย policy drop ไว้บนเชนส่งต่อคือสิ่งที่เปลี่ยนเส้นทางที่หายไปให้เป็นความเงียบแทนการรั่วไหล การกรองเส้นทางย้อนกลับต้องใช้โหมดหลวมบนอินเทอร์เฟซอุโมงค์ เพราะต้นทางสาธารณะที่มาถึงหลังถอดแคปซูลมีเส้นทางย้อนกลับที่ดีที่สุดอยู่ฝั่ง WAN Linux เลือกค่าที่สูงกว่าระหว่าง all กับค่าต่ออินเทอร์เฟซ ดังนั้นการตั้งอินเทอร์เฟซอุโมงค์จึงไม่เหมือนกับการทำให้การตรวจสอบอ่อนลงทุกที่
พิสูจน์ด้วยกรณีล้มเหลว
ถามเคอร์เนลด้วยคำถามที่แม่นยำโดยระบุแอดเดรสต้นทางของไคลเอนต์และอินเทอร์เฟซที่มันมาถึง การค้นหาที่ขาดทั้งสองอย่างตอบคำถามอื่นและจะดูถูกต้องทั้งสองกรณี จากนั้นดูตัวนับไฟร์วอลล์ สถานะการส่งข้อมูลของเพียร์ และบริการของไคลเอนต์เอง
ทดสอบการถอดออกอย่างถูกวิธี หยุดอุโมงค์โดยปล่อยกฎและฟิลเตอร์ไว้ที่เดิม ไคลเอนต์ควรชะงักและทราฟฟิกของเกตเวย์เองควรทำงานต่อ จากนั้นหยุดเพียร์โดยไม่แตะอินเทอร์เฟซภายใน ซึ่งเป็นกรณีที่จับการออกแบบที่พึ่งเพียงการมีอยู่ของเส้นทาง สุดท้ายรีบูตและตรวจลำดับกฎอีกครั้ง เพราะฮุกถอดประกอบที่เอาตัวยามออกจะคืนการออกแบบทั้งหมดให้ตารางหลัก บันทึกหมายเลขตาราง ลำดับความสำคัญ และชื่ออินเทอร์เฟซลงในตั๋วเปลี่ยนแปลง เพราะคนถัดไปที่เพิ่มกฎคือคนที่จะทำให้สิ่งนี้พัง