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

ไฟเขียวสองดวงไม่ใช่การเปรียบเทียบ

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

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

ตรึงความคาดหวังก่อนการรันครั้งแรก

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

TunnelOwnerClient interface inside the namespaceProof commandRequired on disconnect
vpn-athe identity that owns profile A, recorded by nameits own tun device, never the host'sip -n vpn-a -4 route get 10.55.10.20traffic stops; no host-side fallback
vpn-ba separate owner, even when both run on one boxits own tun device in its own namespaceip -n vpn-b -4 route get 10.55.20.20verified separately, never inferred from A

การเดินสายของตัวแก้ชื่อควรมีบรรทัดของตัวเองในบันทึกนั้น เพราะเป็นช่องที่มีแนวโน้มจะโกหกมากที่สุด ไฟล์ที่ผูกกับเนมสเปซ เช่น /etc/netns/vpn-a/resolv.conf จะปรากฏในเส้นทางปกติเมื่อคำสั่งทำงานภายในเนมสเปซ ตามที่ เอกสารอ้างอิงของ iproute2 เรื่องเนมสเปซ อธิบายไว้ แต่การกำหนดค่าการสลับบริการชื่อและตัวแก้ชื่อภายในเครื่องใด ๆ ที่มันเริ่มขึ้นยังดึงการค้นหากลับมาที่โฮสต์ได้

ครั้งละหนึ่งอุโมงค์ อีกอันตัดการเชื่อมต่อ

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

sudo ip -n vpn-a -4 rule show
sudo ip -n vpn-a -4 route show table all
sudo ip -n vpn-a -4 route get 10.55.10.20
sudo ip netns exec vpn-a getent ahostsv4 svc-a.lab.internal

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

ทั้งสองขึ้น แล้วลดทีละอัน

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

sudo ip netns exec vpn-a tcpdump -ni any port 443 -c 5
sudo ip netns exec vpn-b getent ahostsv4 svc-b.lab.internal
sudo ip -n vpn-b -4 route get 10.55.20.20

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

บันทึกนี้กล่าวอ้างได้และไม่ได้อะไร

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

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

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

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