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

การทิ้งนั้นตรงกับอะไรจริง ๆ

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

ดังนั้นขอบเขตของ blackhole จึงแม่นยำและบอกได้ง่าย: ครอบคลุมคำนำหน้า ในตาราง สำหรับตระกูลที่อยู่ที่นั้น ไม่ครอบคลุมปลายทางที่ตารางอื่นจะชนะ และไม่ครอบคลุม IPv6 เพียงเพราะคำนำหน้า IPv4 ถูกทิ้ง

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

blackhole ไม่เหมือน unreachable หรือ prohibit

ลินุกซ์มีเส้นทางสามชนิดที่คล้ายการทิ้ง และแตกต่างกันในสิ่งที่ผู้ส่งสังเกตเห็น blackhole ทิ้งแพ็กเก็ตโดยไม่ตอบกลับ ไคลเอนต์จึงเห็นการหมดเวลา เส้นทาง unreachable ส่งข้อความ ICMP unreachable กลับ การเชื่อมต่อจึงล้มเหลวอย่างรวดเร็วด้วยข้อผิดพลาดของโฮสต์หรือเครือข่าย เส้นทาง prohibit ส่งข้อผิดพลาดการห้ามโดยผู้ดูแล ซึ่งใกล้กับการปฏิเสธนโยบายโดยเจตนา

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

อย่าสันนิษฐานว่ารายการทิ้งทุกรายการใช้แทนกันได้เมื่อวินิจฉัยการเชื่อมต่อ ข้อความข้อผิดพลาด เวลา และการดักจับแพ็กเก็ตต่างกัน และชนิดเส้นทางในตารางบอกคุณว่ากำลังดูอันไหน คู่มือ ip-route แสดงรายการชนิดและพฤติกรรมเมื่อเกิดข้อผิดพลาด

เปรียบเทียบกับการตัดการเชื่อมต่ออย่างไร

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

MechanismWhat it blocksWhat it missesHow failure looks
Blackhole routeDestinations matching the prefix and tableOther tables, other address families, traffic with a different routeSilent timeout
Firewall kill switchEgress not bound to the tunnel interfaceRules that are too broad can break the endpoint or DHCPDropped packets with counters
WireGuard AllowedIPsDestinations not routed into the interfaceTraffic that never enters the interface at allNo 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 และตารางที่มันมาจาก คำสั่งที่สามกำหนดเวลาลบในหนึ่งนาที ซึ่งเป็นเวลาที่พอจะยืนยันนโยบายและสั้นพอจะกู้คืนจากข้อผิดพลาดบนโฮสต์ระยะไกล เมื่อยืนยันพฤติกรรมแล้ว ทำให้รายการคงอยู่ผ่านการจัดการการกำหนดค่าเดียวกันที่เป็นเจ้าของเส้นทางอื่น

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

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