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

สองวิธีในการตัดสินใจว่าอะไรเข้าไปในอุโมงค์

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

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

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

AspectPolicy-basedRoute-based
What selects trafficNegotiated selectorsA route into the tunnel interface
Adding a networkEdit selectors on both peersAdd a route, widen the selector once
Dynamic routingAwkward to run over the tunnelRuns over the interface directly
Typical failureTunnel up, host outside the selectorTunnel up, no route or wrong source

แบบใช้นโยบาย: ตัวเลือกคือสัญญา

ตัวเลือกมีการเจรจา ไม่ใช่แค่กำหนดค่า เสนอ 10.10.0.0/16 ฝั่งหนึ่งและ 10.10.1.0/24 อีกฝั่ง จากนั้นสมาคมจะครอบคลุมสิ่งที่การเจรจาตกลงไว้ ขณะที่โฮสต์อื่นทั้งหมดอยู่ข้างนอก

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

sudo ip xfrm state
sudo ip xfrm policy
sudo swanctl --list-sas

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

แบบใช้เส้นทาง: อินเทอร์เฟซคือสัญญา

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

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

sudo ip link add xfrm0 type xfrm dev eth0 if_id 42
sudo ip route add 10.20.0.0/16 dev xfrm0
ip -s link show xfrm0
ip route get 10.20.5.10

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

จุดที่การออกแบบทั้งสองแตกต่างกันจริง

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

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

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

ย้ายระบบโดยไม่สูญเสียเส้นทางย้อนกลับ

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

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

ip route get 10.20.5.10
sudo tcpdump -ni any host 10.20.5.10 and icmp
sudo swanctl --list-conns

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

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