อายุแฮนด์เชกของ WireGuard ไม่ใช่เวลาหมดอายุของเซสชัน
ตัวจับเวลาการเปลี่ยนคีย์ควบคุมคีย์ ไม่ใช่การเข้าถึงของผู้ใช้ การอ่าน latest-handshakes บอกสถานะโปรโตคอลของพีร์หนึ่งตัว ไม่ได้บอกว่าสิทธิ์ของมันหมดอายุแล้วหรือไม่
พีร์ที่หยุดส่งทราฟฟิกไม่ได้สูญเสียคีย์ของตนเพราะเหตุนั้น และแฮนด์เชกใหม่ก็ไม่ได้พิสูจน์ว่าใครได้ต่ออายุสิทธิ์ในการใช้งานมัน ตัวจับเวลาของ WireGuard ทำให้คีย์สดใหม่และแพ็กเก็ตไหลอยู่ตลอด พวกมันไม่ได้จำลองผู้ใช้ที่ออกจากระบบหลังจากผ่านไปตามจำนวนนาทีที่กำหนด คำถามสามข้อถูกปนกันตรงนี้ และแต่ละข้อมีหลักฐานต่างกัน การแยกแยะนี้เป็นตัวกำหนดว่าเราจะหยิบเครื่องมือใดขึ้นมาใช้
สามคำถาม เอาต์พุตคำสั่งเดียว
ผู้ดูแลระบบถามว่าพีร์เข้าถึงได้หรือไม่ เคยทำงานหรือไม่ และยังได้รับอนุญาตอยู่หรือไม่ ข้อแรกคือสถานะโปรโตคอล ข้อที่สองคือตัวนับทราฟฟิก และข้อที่สามคือการอนุญาต มีเพียงสองข้อแรกที่อ่านได้จากอินเทอร์เฟซ WireGuard และมักถูกใช้ตอบทั้งสามข้อ
| Question | Evidence it needs | What does not answer it |
|---|---|---|
| Is the peer reachable now? | A recent handshake and a working return path | An interface that exists |
| Has it been active? | Transfer counters moving over time | A handshake timestamp alone |
| Is access still granted? | The configuration or controller that authorizes it | Any protocol timer |
อ่านแต่ละแถวเป็นการสอบสวนแยกกัน สองแถวแรกมีต้นทุนต่ำและตอบได้จากตัวนับของอินเทอร์เฟซเอง แถวที่สามต้องใช้การกำหนดค่าที่ให้สิทธิ์เข้าถึง ซึ่งอยู่ในไฟล์อื่นหรือระบบอื่น การเลือกแถวผิดคือการขอให้ตัวจับเวลาของโปรโตคอลทำงานของนโยบาย
ตัวจับเวลาควบคุมอะไรจริง ๆ
โปรโตคอลกำหนดค่าคงที่สำหรับการลองแฮนด์เชกซ้ำ การหมุนเวียนคีย์ขนส่ง และการปฏิเสธแพ็กเก็ตที่ป้องกันด้วยคีย์เก่า พวกมันตอบสนองต่อทราฟฟิกและสถานะ ไม่ใช่ปฏิทินหรือนโยบายที่บอกว่าบุคคลหนึ่งเชื่อมต่อได้ถึง 17:00 นั่นคือเหตุผลที่พีร์ที่ไม่ได้ใช้งานอาจดูไม่ทำงานเป็นชั่วโมงแต่ยังได้รับอนุญาต
PersistentKeepalive มักถูกเข้าใจผิดว่าเป็นเวลาหมดอายุที่ขาดหายไป มันส่งแพ็กเก็ตว่างที่ผ่านการพิสูจน์ตัวตนเพื่อรักษาการแมป NAT ให้คงอยู่ และการตั้งค่าเป็นศูนย์จะหยุดแพ็กเก็ตเหล่านั้นโดยไม่เพิกถอนสิ่งใด
อ่านสถานะขณะทำงานของแต่ละพีร์ โดยใช้คีย์สาธารณะแทนความคิดเห็น:
wg show wg0 latest-handshakes
wg show wg0 transfer
แฮนด์เชกล่าสุดบอกว่าแฮนด์เชกหนึ่งครั้งเสร็จสมบูรณ์ มันไม่ได้บอกว่าบริการส่วนตัวหลังอุโมงค์เข้าถึงได้ และตราเวลาที่เก่าอาจเป็นของพีร์ที่เพียงแค่เงียบ
ทำไมพีร์ที่ไม่ได้ใช้งานจึงไม่ใช่พีร์ที่ออกจากระบบ
WireGuard ไม่มีออบเจ็กต์เซสชันที่มีจุดเริ่มต้นและจุดสิ้นสุด พีร์คือคีย์สาธารณะพร้อมที่อยู่ที่อนุญาต และแฮนด์เชกที่ปกป้องทราฟฟิกของมันจะถูกแทนที่เมื่อจำเป็นโดยไม่มีการล็อกอินที่ผู้ใช้มองเห็น การถือว่าการไม่มีทราฟฟิกล่าสุดเป็นการออกจากระบบคือการกลับทิศของแบบจำลอง
ถ้าข้อร้องเรียนจริงคือการเชื่อมต่อล้มเหลวหลังจากปล่อยไว้เฉย ๆ สาเหตุก็มักอยู่ที่อื่น การแมป NAT ที่หมดอายุ อุปกรณ์ที่หลับ หรือไฟร์วอลล์ที่ทิ้งสถานะ ทดสอบโดยส่งทราฟฟิกจากอีกฝั่งและเริ่มการไหลใหม่ แล้วเปรียบเทียบว่าอะไรเปลี่ยนไป
วางกำหนดเวลาไว้ที่ที่การอนุญาตอยู่
ถ้าการเข้าถึงต้องสิ้นสุดลงในเวลาที่กำหนด กำหนดเวลาก็เป็นของการอนุญาตที่ให้สิทธิ์นั้น ตัวควบคุมที่ออกการกำหนดค่าพีร์อาจต้องการการอนุมัติที่ต่ออายุใหม่ก่อนจะมอบอันใหม่ให้ และนั่นเป็นคุณสมบัติของตัวควบคุม ไม่ใช่พารามิเตอร์ที่ซ่อนอยู่บนอินเทอร์เฟซ
สำหรับพีร์ที่จัดการด้วยมือ การลบต้องไปถึงสองที่ อินเทอร์เฟซที่กำลังทำงานและการกำหนดค่าที่บันทึกไว้ การลบพีร์เฉพาะขณะทำงานจะถูกย้อนกลับโดยการรีสตาร์ตหรือลูปการกระทบยอด ซึ่งคืนตัวตนที่คุณคิดว่าหมดอายุไปแล้ว:
sudo wg set wg0 peer <public-key> remove
sudo wg-quick save wg0
จากนั้นทดสอบขอบเขตแทนที่จะทดสอบป้ายกำกับ ยืนยันว่าพีร์ถูกปฏิเสธหลังกำหนดเวลา ยืนยันว่าเส้นทางการต่ออายุทำงาน และยืนยันว่าสถานะอยู่รอดจากการโหลดตัวจัดการใหม่ อายุของแฮนด์เชกเป็นสัญญาณปฏิบัติการที่มีประโยชน์ และมันไม่ใช่บันทึกการเข้าถึง