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

เริ่มจากช่วง ไม่ใช่คำนำหน้า

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

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

ทั้งสองทิศทางของความผิดพลาดสำคัญ สำหรับเส้นทางเข้าอุโมงค์ ที่อยู่ส่วนเกินจะถูกดึงเข้า VPN สำหรับข้อยกเว้นการข้าม ที่อยู่ส่วนเกินจะข้ามมันไป ไม่มีผลลัพธ์ใดปรากฏในตารางเส้นทางที่แสดงเฉพาะคำนำหน้าที่คุณติดตั้ง

กรณีแรก: ช่วงบังเอิญจัดแนวพอดี

ใช้ 198.51.100.64 ถึง 198.51.100.127 ที่อยู่แรกจัดแนวบนขอบ 64 ที่อยู่ และช่วงมี 64 ที่อยู่พอดี ดังนั้น /26 เดียวอธิบายได้โดยไม่เหลือเศษ

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

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

กรณีที่สอง: ไม่จัดแนว จึงต้องแบ่ง

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

การครอบที่แม่นยำคือสองบล็อก /30: 198.51.100.100/30 ครอบ 100 ถึง 103 และ 198.51.100.104/30 ครอบ 104 ถึง 107 รวมแปดที่อยู่ ไม่มีอะไรนอกช่วง และการแตกนั้นไม่ซ้ำสำหรับช่วงที่กำหนด

python3 -c "from ipaddress import ip_address, summarize_address_range as s; print(*s(ip_address('198.51.100.100'), ip_address('198.51.100.107')), sep='\n')"

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

วัดว่าคำนำหน้าที่กว้างกว่าจะจับอะไร

ก่อนยอมรับทางลัด ให้คำนวณว่ามันมีต้นทุนเท่าไร /28 ที่เริ่มที่ 198.51.100.96 ครอบ 96 ถึง 111 ซึ่งเป็นสิบหกที่อยู่แทนที่จะเป็นแปด ที่อยู่เกินมาแปดรายการคือ 96 ถึง 99 และ 108 ถึง 111 และทุกตัวจะสืบทอดเส้นทาง

python3 -c "from ipaddress import ip_network as n; w=set(n('198.51.100.96/28')); t=set(n('198.51.100.100/30'))|set(n('198.51.100.104/30')); print(len(w), len(t), sorted(w-t))"

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

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

ติดตั้งชุดที่แม่นยำและตรวจสอบขอบ

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

sudo ip route add 198.51.100.100/30 via 10.90.0.1 dev tun0
sudo ip route add 198.51.100.104/30 via 10.90.0.1 dev tun0
ip route get 198.51.100.101
ip route get 198.51.100.97

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

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

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