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

ขั้นแรก: บันทึกช่วงเวลาและข้อความข้อผิดพลาด

เริ่มจากบันทึกของไคลเอนต์เองไม่ใช่แดชบอร์ดของผู้ให้บริการ บนไคลเอนต์ Linux บันทึกของบริการบวกสถานะสดของอุโมงค์ครอบคลุมส่วนใหญ่ไว้แล้ว:

journalctl -u openvpn-client@client --since '3 hours ago' | tail -60
journalctl -u wg-quick@wg0 --since '3 hours ago' | tail -40
wg show
ip -s link show wg0

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

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

ขั้นที่สอง: เปลี่ยนตัวแปรหนึ่งอย่าง ไม่ใช่โปรไฟล์

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

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

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

ขั้นที่สาม: จับคู่ช่วงเวลากับชั้น

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

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

ในกรณีว่างงาน การตั้งค่าขึ้นกับโปรโตคอลและปลายทั้งสองข้างสำคัญ keepalive 10 60 ของ OpenVPN ฝั่งเซิร์ฟเวอร์ส่ง ping ทุก 10 วินาที และเริ่มลิงก์ใหม่เมื่อไม่มี ping 60 วินาที ส่วนไคลเอนต์ WireGuard หลัง NAT ใช้ PersistentKeepalive = 25 ในบล็อกเพื่อนOpenVPN ยังเจรจาช่องข้อมูลใหม่ตามตัวจับเวลาด้วย reneg-sec ซึ่งค่าเริ่มต้นคือ 3600 วินาทีใน 2.x

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

ขั้นที่สี่: เปรียบเทียบทางเลือกที่รองรับหนึ่งทาง

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

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

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

ตรวจสอบการแก้ไข และเก็บทางถอยกลับไว้

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

wg show wg0 latest-handshakes
curl -m 5 -sS https://ifconfig.me
cp client.ovpn client.ovpn.bak   # before editing timers

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

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

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