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

หลักฐานสองอย่างที่ชี้ไปคนละทิศ

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

IKEv2 ทำหลักฐานฝั่งเกตเวย์ภายใน IKE_AUTH และเมื่อใช้ EAP จะรันหลักฐานฝั่งผู้ใช้ในการแลกเปลี่ยนแยกต่างหากหลังจากนั้น ข้อกำหนด IKEv2 เก็บสองส่วนนี้แยกกัน ซึ่งเป็นเบาะแสที่ชัดเจนว่าควรมองที่ไหนเมื่อข้อความเดียวครอบคลุมทั้งสองรอบ

อ่านขั้นตอน ไม่ใช่ข้อความ

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

Stage that failedEvidence you can inspectWhat a password change cannot fix
The machine proofno security association in the state lista mismatched pre-shared key or an untrusted chain
The user proofan association is up while PPP or EAP reports failurean expired token, a locked account, a missing client key
The client's method supportthe client offers no method the gateway acceptsa client without the required EAP or key material
The server's policythe gateway rejects before any user exchange startsa policy that requires a certificate the profile lacks

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

โปรโตคอลสองความลับเผยไพ่

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

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

sudo swanctl --list-sas
sudo ip xfrm state list
sudo journalctl -u xl2tpd -n 50 --no-pager

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

การเข้าถึงด้วยรหัสผ่านอย่างเดียวขึ้นกับอะไรจริง ๆ

การเข้าถึงด้วยรหัสผ่านอย่างเดียวเป็นเรื่องปกติสำหรับ L2TP, PPTP, SSTP และ IKEv2 ที่ใช้ EAP WireGuard ไม่มีตัวเลือกเช่นนั้นเลย เพราะเพื่อนร่วมเครือข่ายเป็นคีย์ไม่ใช่ผู้ใช้ สำหรับ OpenVPN คำตอบมาจากข้อกำหนดใบรับรองไคลเอนต์ของเซิร์ฟเวอร์: เกตเวย์ที่ต้องการทั้งใบรับรองและรหัสผ่านจะยังคงปฏิเสธไคลเอนต์ที่ใช้รหัสผ่านอย่างเดียว ไม่ว่าจะพิมพ์อะไรในฟิลด์

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

เปลี่ยนอย่างเดียว แล้วทดสอบใหม่

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

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

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