เส้นทาง blackhole กับการตัดการเชื่อมต่อ VPN: แต่ละอย่างทำอะไร
เส้นทาง blackhole ทิ้งทราฟฟิกที่ตรงกันและบังคับเส้นทางที่ปิดเมื่อล้มเหลว เปรียบเทียบขอบเขตและจุดบอดกับการตัดการเชื่อมต่อที่ใช้การกรองแพ็กเก็ต
แพ็กเก็ตออกจากแล็ปท็อป ไม่เคยไปถึงเกตเวย์ VPN และไม่มีตัวนับของไฟร์วอลล์ขยับ ตารางเส้นทางตัดสินชะตาของแพ็กเก็ตไปแล้ว: รายการ blackhole ตรงกับมันและเคอร์เนลทิ้งมันก่อนที่อินเทอร์เฟซใดจะเห็น พฤติกรรมนั้นมีประโยชน์เมื่อปลายทางต้องล้มเหลวแบบปิด แต่เป็นการกระทำด้านเส้นทางที่มีขอบเขตแคบ การถือว่าเป็นสวิตช์ตัดการเชื่อมต่อเต็มรูปแบบคือจุดที่การออกแบบผิดพลาด
การทิ้งนั้นตรงกับอะไรจริง ๆ
การค้นหาเส้นทางเลือกตาราง แล้วจึงเลือก คำนำหน้าที่ตรงกันยาวที่สุด ภายใน การเดินทางแบบ blackhole เป็นรายการปกติที่มีการกระทำคือทิ้ง จึงกระทบเฉพาะแพ็กเก็ตที่จะเลือกรายการนั้นหลังการตัดสินใจทั้งหมด เปลี่ยนตารางด้วยกฎนโยบาย หรือเพิ่มคำนำหน้าที่เฉพาะเจาะจงขึ้น การทิ้งก็ใช้ไม่ได้อีก
ดังนั้นขอบเขตของ blackhole จึงแม่นยำและบอกได้ง่าย: ครอบคลุมคำนำหน้า ในตาราง สำหรับตระกูลที่อยู่ที่นั้น ไม่ครอบคลุมปลายทางที่ตารางอื่นจะชนะ และไม่ครอบคลุม IPv6 เพียงเพราะคำนำหน้า IPv4 ถูกทิ้ง
ip route get แสดงการตัดสินใจก่อนที่คุณจะปรับใช้สิ่งใด รวมถึงตารางและชนิดของเส้นทาง การอ่านผลลัพธ์นั้นเร็วกว่าการอนุมานจากคำขอที่ล้มเหลวว่ากฎหรือคำนำหน้าใดได้ผล
blackhole ไม่เหมือน unreachable หรือ prohibit
ลินุกซ์มีเส้นทางสามชนิดที่คล้ายการทิ้ง และแตกต่างกันในสิ่งที่ผู้ส่งสังเกตเห็น blackhole ทิ้งแพ็กเก็ตโดยไม่ตอบกลับ ไคลเอนต์จึงเห็นการหมดเวลา เส้นทาง unreachable ส่งข้อความ ICMP unreachable กลับ การเชื่อมต่อจึงล้มเหลวอย่างรวดเร็วด้วยข้อผิดพลาดของโฮสต์หรือเครือข่าย เส้นทาง prohibit ส่งข้อผิดพลาดการห้ามโดยผู้ดูแล ซึ่งใกล้กับการปฏิเสธนโยบายโดยเจตนา
เลือกพฤติกรรมที่คุณต้องการให้แอปพลิเคชันเห็น การทิ้งอย่างเงียบเหมาะสมเมื่อไม่ต้องการเปิดเผยนโยบาย และข้อผิดพลาดทันทีดีกว่าเมื่อผู้ใช้ต้องเข้าใจว่าทำไมปลายทางจึงไม่พร้อมใช้งาน การผสมชนิดต่าง ๆ ทั่วเครือข่ายทำให้เกิดตั๋วสนับสนุนที่อธิบายนโยบายเดียวกันเป็นสามความขัดข้องต่างกัน
อย่าสันนิษฐานว่ารายการทิ้งทุกรายการใช้แทนกันได้เมื่อวินิจฉัยการเชื่อมต่อ ข้อความข้อผิดพลาด เวลา และการดักจับแพ็กเก็ตต่างกัน และชนิดเส้นทางในตารางบอกคุณว่ากำลังดูอันไหน คู่มือ ip-route แสดงรายการชนิดและพฤติกรรมเมื่อเกิดข้อผิดพลาด
เปรียบเทียบกับการตัดการเชื่อมต่ออย่างไร
การตัดการเชื่อมต่อคือการกรองแพ็กเก็ต: กฎไฟร์วอลล์ที่ทิ้งทราฟฟิกขาออกที่จะออกนอกอุโมงค์ เส้นทาง blackhole คือการตัดสินใจส่งต่อที่ทำเร็วกว่าในสแต็ก ทั้งสองหยุดทราฟฟิกได้ แต่เห็นสิ่งต่างกันและพลาดกรณีต่างกัน
| Mechanism | What it blocks | What it misses | How failure looks |
|---|---|---|---|
| Blackhole route | Destinations matching the prefix and table | Other tables, other address families, traffic with a different route | Silent timeout |
| Firewall kill switch | Egress not bound to the tunnel interface | Rules that are too broad can break the endpoint or DHCP | Dropped packets with counters |
| WireGuard AllowedIPs | Destinations not routed into the interface | Traffic that never enters the interface at all | No tunnel route, direct egress |
ความครอบคลุมคือจุดที่การเปรียบเทียบมีความหมาย ไฟร์วอลล์จับคู่เจ้าของ พอร์ต หรืออินเทอร์เฟซและบล็อกแอปพลิเคชันได้โดยที่ปลายทางยังเข้าถึงได้ ส่วนเส้นทางทำไม่ได้ ในทางกลับกัน เส้นทางส่งคำนำหน้าทั้งหมดไปยังการทิ้งได้โดยไม่ต้องโหลดตัวกรองแพ็กเก็ตใด ซึ่งมีประโยชน์ในระบบขนาดเล็ก
AllowedIPs ของ WireGuard คือการกำหนดเส้นทางด้วยกุญแจเข้ารหัส ไม่ใช่ไฟร์วอลล์ มันตัดสินว่าคำนำหน้าปลายทางใดได้รับการยอมรับเข้าอินเทอร์เฟซ และโปรไฟล์ที่ระบุเพียงซับเน็ตของอุโมงค์ก็ปล่อยปลายทางอื่นให้เส้นทางเริ่มต้นปกติ นี่คือเหตุผลที่โปรไฟล์อุโมงค์เต็มใช้ 0.0.0.0/0 และนี่คือเหตุผลที่ wg-quick ติดตั้งกฎไฟร์วอลล์ด้วยเมื่อทำได้
เก็บปลายทางของอุโมงค์ไว้นอกการทิ้ง
ที่อยู่ภายนอกของปลายทางต้องเข้าถึงได้ผ่านอินเทอร์เฟซจริง การทิ้งที่ดักจับที่อยู่นั้นด้วยจะขัดขวางการจับมือไม่ให้ออกไป และอุโมงค์ไม่เคยขึ้น ซึ่งดูเหมือนความล้มเหลวของ VPN ไม่ใช่นโยบายเส้นทาง ตรวจสอบเส้นทางไปยังปลายทางก่อนและหลังการเปลี่ยนแปลง
การเข้าถึงเพื่อบริหารจัดการอยู่ในบทตรวจทานเดียวกัน หากทางเดียวไปยังเราเตอร์หรือไคลเอนต์คืออุโมงค์ การทิ้งที่กว้างเกินไปอาจล็อกคุณออกจากเครื่องที่จะให้คุณลบมันได้ เก็บเส้นทางนอกแบนด์ที่บันทึกไว้ คอนโซล หรือการย้อนกลับตามเวลา
IPv6 ต้องมีรายการของตัวเองและการตรวจทานของตัวเอง การออกแบบที่ทิ้ง IPv4 ลง blackhole แต่ปล่อย IPv6 ไว้บนเส้นทางเริ่มต้นจะรั่วทราฟฟิกที่นโยบายตั้งใจจะหยุดพอดี และข้อผิดพลาดนั้นมองไม่เห็นในการทดสอบที่มีเพียง IPv4
นำไปใช้ทีละขั้นด้วยตัวจับเวลาและการย้อนกลับ
ใช้เส้นทางพร้อมการลบอัตโนมัติสั้น ๆ เพื่อให้ข้อผิดพลาดไม่คงอยู่ข้ามการรีบูต คำสั่งด้านล่างใช้ช่วงเอกสาร; แทนที่ด้วยคำนำหน้าที่การออกแบบของคุณทิ้งจริง:
sudo ip route replace blackhole 10.0.0.0/8
ip route get 10.1.2.3
sudo systemd-run --on-active=60 /sbin/ip route del blackhole 10.0.0.0/8คำสั่งที่สองควรรายงานเส้นทาง blackhole และตารางที่มันมาจาก คำสั่งที่สามกำหนดเวลาลบในหนึ่งนาที ซึ่งเป็นเวลาที่พอจะยืนยันนโยบายและสั้นพอจะกู้คืนจากข้อผิดพลาดบนโฮสต์ระยะไกล เมื่อยืนยันพฤติกรรมแล้ว ทำให้รายการคงอยู่ผ่านการจัดการการกำหนดค่าเดียวกันที่เป็นเจ้าของเส้นทางอื่น
ปิดการเปลี่ยนแปลงโดยบันทึกคำนำหน้า ตาราง ตระกูลที่อยู่ และวิธีการย้อนกลับ การทิ้งเป็นการยกเว้นโดยเจตนาในการออกแบบเส้นทาง และวิศวกรคนต่อไปต้องรู้ว่ามันตั้งใจจะหยุดทราฟฟิกใดก่อนตัดสินว่ายังควรอยู่ที่นั่นหรือไม่