การตั้งค่า VPN สาธารณะเลิกทำงานแล้วหรือ? อ่านขั้นตอนที่ล้มเหลว
โปรไฟล์ที่ดาวน์โหลดมาอธิบายโฮสต์หนึ่งเครื่องในหนึ่งวัน อ่านว่าข้อสมมติใดพัง ตรวจสอบใบรับรองที่อีกฝ่ายนำเสนอ และอย่าปิดการตรวจสอบเด็ดขาด
โปรไฟล์ทำงานได้เมื่อวันอังคาร และวันศุกร์ไคลเอนต์หมุนสามสิบวินาทีแล้วยอมแพ้ ไม่มีอะไรเปลี่ยนบนเครื่องของคุณ นั่นคือประเด็น: การตั้งค่าที่ดาวน์โหลดมาอธิบายโฮสต์หนึ่งเครื่อง ณ ขณะหนึ่ง และผู้ให้บริการอีกด้านไม่มีความผูกพันที่จะทำให้คำอธิบายนั้นเป็นจริงตลอดไป สิ่งล่อใจคือเริ่มแก้การตั้งค่าความปลอดภัยจนกว่าอุโมงค์จะกลับมา สัญชาตญาณนั้นคือเหตุผลที่ผู้คนลงเอยด้วยการรันโปรไฟล์ที่ปิดการตรวจสอบใบรับรอง ซึ่งแย่กว่าการไม่มีอุโมงค์เลย
ไฟล์อธิบายช่วงเวลาหนึ่ง ไม่ใช่สัญญา
ไฟล์การตั้งค่าคือชุดของข้อสมมติ: ชื่อโฮสต์นี้รับฟังบนพอร์ตนี้ด้วยโปรโตคอลนี้ นำเสนอใบรับรองที่ตรงกับชื่อนี้ และยอมรับข้อมูลรับรองเหล่านี้ เมื่อข้อใดข้อหนึ่งเลิกเป็นจริง ไฟล์ก็ล้าสมัย และการแก้ไขเป็นเรื่องของฝั่งผู้ให้บริการที่ขอบเขต ไม่ใช่การตั้งค่าของคุณ
รายการโหนดสาธารณะ ทำให้เรื่องนี้ชัดเจนโดยธรรมชาติของมัน โหนดดำเนินการโดยอาสาสมัคร ปรากฏและหายไป ที่อยู่ถูกนำกลับมาใช้ใหม่ และพอร์ตถูกบล็อกโดยเครือข่ายที่มันอยู่ข้างหลัง รายการคือภาพรวม ณ ขณะหนึ่งที่สร้างใหม่ และสำเนาบนดิสก์ของคุณคือภาพถ่ายของภาพรวมที่เก่ากว่า
บริการเชิงพาณิชย์เปลี่ยนช้ากว่า แต่ไม่ใช่ไม่เคยเปลี่ยน หน่วยงานออกใบรับรองหมุนเวียน ตัวรับฟังย้ายจากที่อยู่ร่วมไปยังที่อยู่เฉพาะ โปรโตคอลเก่าถูกยกเลิก และรายการรหัสลับใหม่มาถึง แต่ละอย่างมองไม่เห็นจนกว่าไคลเอนต์ของคุณจะลองเชื่อมต่อและได้คำตอบต่างจากที่ไฟล์คาดไว้
อ่านขั้นตอนที่ล้มเหลวก่อนแตะการตั้งค่า
ข้อความแสดงข้อผิดพลาดบอกว่าข้อสมมติใดพัง และแต่ละข้อสมมติมีการแก้ไขที่ต่างกันโดยสิ้นเชิง การแก้รหัสลับเมื่อชื่อโฮสต์แก้ไม่ได้แล้วทำให้เสียเวลาบ่ายหนึ่งและไม่ได้สอนอะไรใคร
| What happens | The assertion that broke | Supported response |
|---|---|---|
| Name never resolves | The host still exists under that name | Get a current endpoint from the operator |
| TCP connect times out | The listener is on that port and reachable | Check the current published port, then the local network |
| TLS or key exchange fails | The peer presents the expected identity | Compare the certificate, not the cipher list |
| Authentication rejected | The account is still valid | Get credentials reissued or stop using the service |
dig +short vpn.example.net
curl -sS -o /dev/null -w 'connect=%{time_connect} tls=%{time_appconnect}\n' --max-time 8 https://vpn.example.net:443/
openssl s_client -connect vpn.example.net:443 -servername vpn.example.net -brief </dev/nullบรรทัดกลางแยกเส้นทางที่ถูกบล็อกจากแฮนด์เชกที่เสีย และบรรทัดที่สามแสดงผู้ออกและวันหมดอายุของใบรับรองที่นำเสนอจริง หากผู้ออกนั้นไม่ใช่ผู้ออกที่โปรไฟล์ปักหมุดไว้ ใบรับรองก็เปลี่ยนไปแล้ว และไม่มีตัวเลือกใดฝั่งไคลเอนต์ที่จะทำให้การปักหมุดเก่ากลับมาถูกต้อง
การเปลี่ยนแปลงใบรับรองและตัวตนคือสิ่งที่เงียบ
ความล้มเหลวส่วนใหญ่ประกาศตัวเอง การเปลี่ยนแปลงตัวตนไม่ประกาศ เพราะไคลเอนต์ที่ปักหมุดชื่อใบรับรองจะปฏิเสธใบรับรองใหม่ที่ดีสมบูรณ์ด้วยข้อความที่หลายคนอ่านว่าเป็นบั๊ก อุโมงค์ปกติดี การปักหมุดล้าสมัย
มองหาตัวเลือกด้านตัวตนก่อนสรุปอะไร:
grep -nE '^(remote|proto|auth|verify-x509-name|tls-crypt|key-direction|ca) ' profile.ovpn
openssl x509 -in profile-ca.crt -noout -subject -datesหากโปรไฟล์มี CA ฝังอยู่และผู้ให้บริการย้ายไปยังหน่วยงานใหม่ ไฟล์เก่าไม่สามารถตรวจสอบเซิร์ฟเวอร์ใหม่ได้ การแทนที่บล็อก CA ด้วยบล็อกที่ผู้ให้บริการเผยแพร่เป็นการแก้ไขที่ชอบธรรม การลบคำสั่งตรวจสอบไม่ใช่ และเป็นการกดแป้นเดียวกันด้วยผลลัพธ์ที่ต่างกันมาก
การอัปเกรดไคลเอนต์อาจทำให้เกิดอาการเดียวกันโดยไม่มีการเปลี่ยนแปลงใดจากผู้ให้บริการ ตัวเลือกที่เคยถูกอดทนอย่างเงียบ ๆ กลับถูกปฏิเสธ หรือโปรโตคอลที่เลิกใช้แล้วถูกนำออก นั่นคือขีดจำกัดความเข้ากันได้ในซอฟต์แวร์ของคุณ และควรลองโปรไฟล์ที่สองกับไคลเอนต์เดียวกันก่อนโทษเซิร์ฟเวอร์
มีเพียงผู้ให้บริการเท่านั้นที่เผยแพร่สิ่งทดแทนที่ถูกต้องได้
เมื่อโหนดหายไป สิ่งทดแทนต้องมาจากแหล่งเดียวกับที่เผยแพร่ต้นฉบับ โปรไฟล์ที่มาในข้อความส่วนตัวเพราะ «ใช้ชื่อเซิร์ฟเวอร์เดียวกัน» คือการตั้งค่าที่ไม่ได้ตรวจสอบจากฝ่ายที่ไม่รู้จัก และการนำเข้ามันมอบการควบคุมเส้นทางของคุณให้ฝ่ายนั้น
การตรวจสอบมีต้นทุนต่ำ ดึงไฟล์ปัจจุบันจากตำแหน่งที่เผยแพร่ เปรียบเทียบปลายทางและโปรโตคอลกับรายการ และยืนยันลายนิ้วมือของวัสดุ CA แทนที่จะเชื่อชื่อไฟล์:
curl -sS -o current.ovpn https://example.org/nodes/current.ovpn
sha256sum current.ovpn profile.ovpn
grep -nE '^(remote|proto) ' current.ovpnหากแฮชสองตัวต่างกันเพียงช่องว่าง นั่นคือการเปลี่ยนรูปแบบ หากต่างกันที่ปลายทาง ผู้ให้บริการย้ายอะไรบางอย่าง และไฟล์ที่เผยแพร่คือผู้มีอำนาจ หากไฟล์ที่เผยแพร่เก่ากว่าไฟล์ที่คุณถืออยู่ คุณกำลังดูแคชอยู่ และคำตอบที่ล้าสมัยจะส่งคุณไปผิดทาง
ปลดระวางรายการเก่าและบันทึกว่าเกิดอะไรขึ้น
เมื่อตรวจสอบสิ่งทดแทนที่ใช้งานได้แล้ว ให้ลบโปรไฟล์เก่าแทนที่จะเก็บไว้เป็นตัวสำรอง รายการเก่าที่เชื่อมต่อได้ครึ่ง ๆ เป็นกับดัก: มันจะถูกเลือกในช่วงที่ระบบล่ม มันจะล้มเหลวอย่างช้า ๆ และคนที่แก้ปัญหาจะใช้สิบนาทีแรกกับไฟล์ผิด
เก็บบันทึกสั้น ๆ ไว้นอกการตั้งค่า: วันที่ ปลายทางเก่า ขั้นตอนที่ล้มเหลว และสิ่งที่มาแทนที่ รายการโหนดสาธารณะหมุนเวียน และหกสัปดาห์ต่อมาคำถามเดิมก็มาพร้อมคนอื่น หนึ่งบรรทัดในไฟล์บันทึกตอบคำถามนั้นได้ในไม่กี่วินาที
หากจากเครือข่ายหนึ่ง ทุกโหนดล้มเหลวในแบบเดียวกัน และจากอีกเครือข่ายหนึ่งไม่ล้มเหลวเลย ให้หยุดแก้โปรไฟล์และดูเส้นทางภายใน เครือข่ายแบบ captive portal ช่วงพอร์ตที่ถูกกรอง หรือพร็อกซีที่ดักจับจะสร้างข้อผิดพลาดเหมือนกันในผู้ให้บริการที่ไม่เกี่ยวข้องกัน และรูปแบบนั้นคือสัญญาณเดียวว่าปัญหาไม่เคยอยู่ที่ไฟล์