ขีดจำกัดเซสชันของบัญชี VPN ที่แชร์ร่วมกัน: ทำไมอุปกรณ์หนึ่งจึงหลุด
การเข้าสู่ระบบแบบแชร์ร่วมกันถึงขีดจำกัดเซสชันพร้อมกันและอุปกรณ์หนึ่งหลุด อ่านข้อความจากไคลเอนต์ นับเซสชันฝั่งเซิร์ฟเวอร์ แล้วแก้โมเดลตัวตน
คุณเพิ่มแล็ปท็อปเครื่องที่สองในบัญชีที่โทรศัพท์ใช้อยู่ แล้วอุโมงค์ของโทรศัพท์ก็หลุดภายในหนึ่งนาที หรืออุปกรณ์ใหม่เชื่อมต่อไม่สำเร็จเลย และไคลเอนต์จบด้วยข้อความเรื่องนโยบายแทนที่จะเป็นการหมดเวลา เครือข่ายปกติดีทั้งสองกรณี เพราะการตัดสินใจเกิดขึ้นเหนือชั้นเครือข่าย การเข้าสู่ระบบแบบแชร์ร่วมกันคือตัวตนเดียว และบริการ VPN ส่วนใหญ่นับตัวตนนั้น ไม่ได้นับจำนวนอุปกรณ์ที่คุณมี ผมเริ่มจากหน้าจอไคลเอนต์แล้วค่อยไล่ออกไป เพราะโดยปกติมันบอกว่าชั้นไหนปฏิเสธคุณ
อ่านข้อความของไคลเอนต์ก่อนแตะเครือข่าย
ความล้มเหลวสามแบบดูคล้ายกันแต่ไม่เหมือนกัน การหมดเวลาหมายถึงแพ็กเก็ตของคุณไปไม่ถึงไหนเลย ข้อผิดพลาด TLS หรือใบรับรองหมายถึงปลายทางตอบกลับแต่การจับมือล้มเหลว การปฏิเสธการยืนยันตัวตนหรือนโยบายหมายถึงเกตเวย์อ่านข้อมูลของคุณแล้วปฏิเสธ มีเพียงแบบที่สามที่เกี่ยวกับขีดจำกัดเซสชัน ดังนั้นยืนยันแบบนั้นก่อน
ไคลเอนต์ OpenVPN เก็บบรรทัดที่น่าสนใจไว้ในแผงบันทึก เลื่อนไปที่ความพยายามเชื่อมต่อครั้งล่าสุด ไม่ใช่รอบการลองใหม่ที่ตามมา และมองหา AUTH_FAILED หรือข้อความเหตุผลที่ส่งกลับมา ไคลเอนต์มักรายงานการปฏิเสธแบบกว้าง ๆ โดยไม่บอกเหตุผล ดังนั้นขั้นต่อไปคือเซิร์ฟเวอร์ ไม่ใช่การตั้งค่าไคลเอนต์ แอปของผู้ให้บริการแย่กว่า: ข้อความเรื่องขีดจำกัดอุปกรณ์มีประโยชน์ แต่การเชื่อมต่อที่พังหลังสองวินาทีคือการตัดสินใจเชิงนโยบาย ไม่ใช่รหัสผ่านผิด ไม่ว่ากรณีใดให้จดชื่ออุปกรณ์และเวลาที่แน่นอนไว้ ผู้ดูแลสามารถจับคู่ข้อมูลคู่นั้นกับบันทึกการเข้าถึงได้ในไม่กี่วินาที
นับเซสชันในที่ที่เซิร์ฟเวอร์นับ
ตัวนับที่สำคัญอยู่ที่เกตเวย์ OpenVPN เขียนไฟล์สถานะเมื่อเซิร์ฟเวอร์เริ่มด้วย --status และแสดงไคลเอนต์ที่เชื่อมต่อทุกตัวพร้อมชื่อทั่วไป ที่อยู่จริง และตัวนับทราฟฟิก
cat /var/log/openvpn-status.log
# or query the management socket directly
echo "status 2" | socat - UNIX-CONNECT:/run/openvpn/server.sock
สองบรรทัดที่มีชื่อทั่วไปเดียวกันคือสองเซสชันที่มีชีวิตภายใต้ใบรับรองเดียว โดยค่าเริ่มต้น OpenVPN ไม่เก็บทั้งสองไว้: หากไม่มี --duplicate-cn การเชื่อมต่อที่สองซึ่งใช้ใบรับรองเดียวกันจะแทนที่อันแรก และอุปกรณ์เครื่องเก่าจะเสียอุโมงค์ของมัน การแทนที่นั้นคือลายเซ็นของขีดจำกัดตัวตน การสูญหายของแพ็กเก็ตแบบสุ่มไม่ได้ตัดอุปกรณ์เพียงเครื่องเดียวอย่างสุภาพในจังหวะเดียวกับที่อีกเครื่องปรากฏขึ้น
WireGuard ไม่มีตารางเซสชันให้ตรวจสอบ wg show wg0 พิมพ์รายชื่อเพื่อนร่วมเครือข่ายและการจับมือครั้งล่าสุดของแต่ละราย และอุปกรณ์ที่ลงทะเบียนทุกเครื่องคือเพื่อนร่วมเครือข่ายที่มีคีย์ของตัวเอง บัญชีที่แชร์ร่วมกันในระบบนั้นคือไฟล์กำหนดค่าที่คัดลอกไปยังหลายเครื่อง และขีดจำกัดมาจากสิ่งที่แจกจ่ายไฟล์เหล่านั้น: พอร์ทัลของผู้ให้บริการ จำนวนที่นั่ง หรือกฎที่ผูกกับที่อยู่สาธารณะของคุณ คู่มือ OpenVPN 2.6 อธิบายตัวเลือกฝั่งเซิร์ฟเวอร์หากคุณดูแลเกตเวย์เอง
แยกขีดจำกัดสี่อย่างที่ซ่อนอยู่หลังข้อความเดียว
ตั๋วส่วนใหญ่เกี่ยวกับบัญชีที่แชร์ร่วมกันคือหนึ่งในสี่การตัดสินใจเรื่องการเข้าถึง ไคลเอนต์แยกไม่ออก แต่รูปแบบว่าอุปกรณ์ใดล้มเหลวบ่งชี้ได้
ตัวตนเดียวกัน การเชื่อมต่อที่สอง อุปกรณ์ใหม่ทำงานและเครื่องเก่าตายในจังหวะเดียวกัน นี่คือกฎการพร้อมกันต่อตัวตนที่เกตเวย์หรือระบบบัญชีบังคับใช้ ไม่มีอะไรเสียหาย บริการทำตามที่นโยบายระบุ
จำนวนที่นั่งหรืออุปกรณ์ในแพ็กเกจ อุปกรณ์ชุดแรกยังเชื่อมต่ออยู่และเครื่องถัดไปถูกปฏิเสธในขณะที่เครื่องอื่นทำงานต่อ ตรวจรายการอุปกรณ์ของผู้ให้บริการก่อนแก้ไขไคลเอนต์ เพราะขีดจำกัดสัญญาอนุญาตแก้จากฝั่งไคลเอนต์ไม่ได้
ขีดจำกัดที่ผูกกับที่อยู่สาธารณะของคุณ แล็ปท็อปสองเครื่องหลังเราเตอร์บ้านตัวเดียวล้มเหลว ขณะที่การเข้าสู่ระบบเดียวกันทำงานจากฮอตสปอตโทรศัพท์ ย้ายอุปกรณ์เครื่องที่สองไปยังเครือข่ายอื่นเพื่อทดสอบ หากเชื่อมต่อได้ที่นั่น คุณกำลังดูกฎต่อที่อยู่หรือกฎ NAT ไม่ใช่จำนวนบัญชี
เพดานของเซิร์ฟเวอร์ทั้งระบบ ทุกคนบนเกตเวย์ล้มเหลวในชั่วโมงเร่งด่วนเดียวกัน รวมถึงบัญชีที่ปกติดีเมื่อวานนี้ --max-clients ของ OpenVPN ทำงานแบบนั้น และไม่เกี่ยวกับอุปกรณ์ที่คุณลงทะเบียนเลย
ล้างเซสชันที่ค้างอยู่ก่อนซื้อที่นั่งเพิ่ม
เซสชันที่จบไม่ดีอาจยังครองที่นั่งอยู่ การบัญชี RADIUS เขียนระเบียนเมื่อเซสชันเริ่มและปิดเมื่อเซสชันหยุด เมื่อไคลเอนต์หายไป การหยุดไม่เคยมาถึง และเซิร์ฟเวอร์เก็บเซสชันไว้จนกว่าการอัปเดตระหว่างกาลหรือการหมดเวลาจะสิ้นสุด บนเกตเวย์ FreeRADIUS คุณจะเห็นระเบียนที่เปิดค้างได้:
SELECT username, acctsessionid, acctstarttime
FROM radacct WHERE acctstoptime IS NULL;
ระเบียนที่เปิดค้างซึ่งมีเวลาเริ่มเก่าและไม่มีทราฟฟิกเป็นของอุปกรณ์ที่จากไปแล้ว ปิดระเบียนนั้นผ่านคอนโซลของผู้ดูแลหรือคำขอตัดการเชื่อมต่อ ก่อนสันนิษฐานว่าขีดจำกัดนั้นเป็นเรื่องจริง โทรศัพท์เชื่อมต่อใหม่เมื่อ Wi-Fi ส่งต่อให้เครือข่ายมือถือ และแล็ปท็อปอาจมีอุโมงค์หนึ่งในระบบปฏิบัติการบวกอีกหนึ่งในแอปของผู้ให้บริการ ซึ่งนับเป็นสองเซสชันจากเครื่องเดียว
เลิกแชร์ตัวตนเดียวระหว่างอุปกรณ์ที่ทำงานร่วมกัน
การแก้ที่ยั่งยืนคือเชิงโครงสร้าง ให้แต่ละอุปกรณ์มีใบรับรองของตัวเองพร้อมชื่อทั่วไปที่ไม่ซ้ำ หรือมีบัญชีของตัวเอง และบันทึกว่าใครและเครื่องไหนถือครองอยู่ บน OpenVPN นั่นหมายถึงใบรับรองไคลเอนต์หนึ่งใบต่ออุปกรณ์ โดยปิด --duplicate-cn ไว้เว้นแต่คุณต้องการพฤติกรรมการยึดครอง บน WireGuard คือคู่คีย์หนึ่งคู่ต่ออุปกรณ์ สร้างขึ้นที่นั่นและไม่เคยถูกคัดลอก
การโคลนโปรไฟล์เพื่อหลบขีดจำกัดอุปกรณ์ทำให้การเพิกถอนเสียหาย: การเพิกถอนสำเนาหนึ่งชุดตัดอุปกรณ์ทุกเครื่องที่แชร์สำเนานั้น และบันทึกก็ไม่สามารถบอกได้อีกว่าเครื่องไหนทำอะไร หากขีดจำกัดเป็นเรื่องเชิงพาณิชย์ ทางออกที่ตรงไปตรงมาคือที่นั่งเพิ่ม หากเป็นนโยบายภายในองค์กร ให้ขอตัวตนที่สองที่มีสิทธิ์เข้าถึงเท่ากัน
ตรวจสอบตามลำดับที่แน่นอน
ทดสอบการแก้ไขด้วยวิธีเดียวกันทุกครั้ง ผลลัพธ์จึงจะมีความหมาย
- ออกจากระบบบนทุกอุปกรณ์และยืนยันว่ารายการเซสชันที่ใช้งานบนเซิร์ฟเวอร์ว่างเปล่า ระเบียนที่ไม่ถูกล้างคือเซสชันค้าง ไม่ใช่ข้อบกพร่องของไคลเอนต์
- เชื่อมต่ออุปกรณ์ทีละเครื่องและเฝ้าดูรายการระหว่างการเชื่อมต่อ
- หากสองเครื่องต้องทำงานร่วมกัน ยืนยันว่าทั้งสองบรรทัดมีตัวตนต่างกันและทั้งคู่มีการจับมือที่สดใหม่
- ทำซ้ำหลังเปลี่ยนจาก Wi-Fi ไปเครือข่ายมือถือ เพราะการเชื่อมต่อใหม่สามารถสร้างระเบียนที่สองได้
หากเครื่องเก่ายังหลุดเมื่อเครื่องใหม่เชื่อมต่อ แปลว่าเกตเวย์บังคับใช้กฎต่อตัวตนซึ่งคุณยังไม่ได้รับข้อยกเว้น ส่งชื่ออุปกรณ์ เวลาที่เกิดเหตุ และรายการเซสชันที่ใช้งานให้ผู้ดูแล นั่นเปลี่ยนข้อร้องเรียนที่คลุมเครือเป็นคำถามเชิงนโยบายที่พวกเขาตอบได้