ดูการเชื่อมต่อ PPTP ที่ขึ้นมา และเป็นเรื่องง่ายที่จะเชื่อว่าส่วนที่ยากจบแล้ว: ไคลเอนต์ตรวจสอบสิทธิ์ มีอะแดปเตอร์ ppp0 หรือ WAN Miniport ปรากฏขึ้น และหน้าต่างสถานะกลายเป็นสีเขียว จากนั้นคำขอแรกไปยังโฮสต์ภายในก็หมดเวลา และโปรไฟล์ก็ถูกตำหนิ ในทางปฏิบัติมีสองชั้นที่เป็นอิสระต่อกันที่ต้องจัดการ: การขนส่งชั้นนอกที่บรรทุก TCP 1723 และ GRE และนโยบายชั้นในที่ตัดสินว่าโฮสต์ปลายทางใดใช้ส่วนเชื่อมต่อ PPP สถานะสีเขียวพิสูจน์เพียงว่าชั้นแรกได้เจรจาแล้ว ไม่ได้บอกอะไรเกี่ยวกับชั้นที่สอง

ติดตามไคลเอนต์จากโปรไฟล์ไปจนถึงซ็อกเก็ตควบคุม

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

ยืนยันการเชื่อมต่อควบคุมบนสายก่อนที่จะแตะเส้นทางใดๆ บนไคลเอนต์หรือพอร์ตกระจก ให้ดักจับ TCP 1723 สำหรับการเชื่อมต่อหนึ่งครั้ง:

sudo tcpdump -ni any 'tcp port 1723' -c 20

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

GRE เป็นโปรโตคอลที่สอง ไม่ใช่พอร์ต

PPTP บรรทุกเพย์โหลด PPP ภายใน GRE แบบขยาย ซึ่งเป็นโปรโตคอล IP 47 ที่ไม่มีหมายเลขพอร์ตให้เราเตอร์ติดตาม นั่นคือเหตุผลที่กฎที่อนุญาต TCP 1723 ยังคงทิ้งอุโมงค์ไว้โดยไม่มีเส้นทางข้อมูล อุปกรณ์ NAT แบบมีสถานะต้องเข้าใจ ID การเรียกภายใน GRE เพื่อแมปคำตอบกลับ และหลายตัวไม่ทำเช่นนั้น ข้อกำหนด PPTP เก็บช่องทางควบคุมและเพย์โหลด GRE เป็นชิ้นส่วนแยกกัน และแผนการทดสอบของคุณก็ต้องทำเช่นนั้น

เฝ้าดูโปรโตคอล 47 ในการดักจับเดียวกัน จากนั้นเปรียบเทียบสิ่งที่ออกไปกับสิ่งที่กลับมา:

sudo tcpdump -ni any 'proto gre' -c 20

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

พิสูจน์ว่าอุโมงค์ขนย้ายแพ็กเก็ตหนึ่งได้

เมื่อ GRE ไหล การเจรจา PPP จะกำหนดที่อยู่ให้กับส่วนเชื่อมต่อของไคลเอนต์ อ่านการกำหนดแทนที่จะสันนิษฐาน:

ip -4 addr show ppp0

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

ทำสิ่งนี้ก่อนเพิ่มเส้นทางแยกใดๆ การเปลี่ยนเส้นทางที่ทำขณะการขนส่งเสียจะสร้างตัวแปรที่สองและซ่อนตัวแรก

เขียนนโยบายแยก รวมถึง DNS

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

ตรวจสอบการตัดสินใจที่เคอร์เนลทำสำหรับที่อยู่หนึ่งรายการในแต่ละหมวดหมู่:

ip route get 10.20.5.10
ip route get 203.0.113.25

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

การตรวจสอบที่ทำซ้ำได้ในห้าขั้นตอน

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

เวอร์ชันกะทัดรัดสำหรับไคลเอนต์ Linux มีลักษณะเช่นนี้:

sudo tcpdump -ni any 'tcp port 1723 or proto gre' -c 40
ip -4 addr show ppp0
ping -c 3 192.0.2.1
ip route get 10.20.5.10

บน Windows ลำดับเดียวกันใช้กับ route print และสถานะอะแดปเตอร์ที่แสดงในไคลเอนต์ PPTP เป็นโปรโตคอลรุ่นเก่า และหากเซิร์ฟเวอร์เสนอ SSTP หรือ IKEv2 การย้ายมักเป็นการใช้เวลาที่ดีกว่าการปรับแต่งเส้นทางที่ขึ้นกับการผ่านของโปรโตคอล 47 ในทุกฮอป ตรวจสอบใบรับรองและสัญญาการตรวจสอบสิทธิ์ของตัวแทนแทนการคัดลอกโปรไฟล์เก่าไปยังรีลีสใหม่

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