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

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

สิ่งที่คำตอบ DNS ทำได้และทำไม่ได้

dnsmasq คัดลอกที่อยู่จากคำตอบลงในชุด nftables ได้ ซึ่งเป็นการป้อนไม่ใช่การตัดสินใจกำหนดเส้นทาง ตัวเลือกนั้นซึ่งมีเอกสารอยู่ใน คู่มือ dnsmasq ระบุแฟมิลี ตาราง และชุด และ 4# นำหน้าจะเลือกเฉพาะระเบียน A ดังนั้นปลายทาง v6 ต้องมีวิธีจัดการของตัวเอง ชุดต้องมีอยู่แล้ว เพราะตัวแก้ไขเพิ่มองค์ประกอบลงในสิ่งที่เจ้าของไฟร์วอลล์สร้างขึ้น ไม่มีอะไรในขั้นนั้นเลือกอินเทอร์เฟซ ตาราง หรือเพียร์

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

ชุดคืออินพุต ไม่ใช่เส้นทาง

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

nft add set inet vpn_select office_v4 { type ipv4_addr\; }
ip rule add fwmark 0x40 table 200
ip route add default dev wg0 table 200
wg show wg0 allowed-ips

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

เครื่องหมาย ตาราง และความครอบคลุมของเพียร์

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

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

ทดสอบแต่ละอายุแยกกัน

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

dig +short office.example
nft list set inet vpn_select office_v4
conntrack -L -d 10.60.8.15
ip rule show

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

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

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