Giới hạn phiên của tài khoản VPN dùng chung: vì sao đúng một thiết bị bị rớt
Đăng nhập dùng chung chạm giới hạn phiên đồng thời và một thiết bị bị rớt. Đọc thông báo của ứng dụng, đếm phiên trên máy chủ, rồi sửa mô hình danh tính.
Bạn thêm chiếc laptop thứ hai vào tài khoản đang chạy trên điện thoại, và đường hầm của điện thoại sụp trong vòng một phút. Hoặc thiết bị mới không bao giờ hoàn tất kết nối, và ứng dụng kết thúc bằng thông báo chính sách thay vì hết thời gian chờ. Mạng vẫn ổn trong cả hai trường hợp; quyết định được đưa ra ở tầng trên nó. Đăng nhập dùng chung là một danh tính, và phần lớn dịch vụ VPN đếm danh tính đó chứ không đếm số thiết bị bạn sở hữu. Tôi làm việc từ màn hình ứng dụng đi ra ngoài, vì nó thường cho biết tầng nào đã từ chối bạn.
Đọc thông báo của ứng dụng trước khi chạm vào mạng
Ba kiểu lỗi trông giống nhau mà không giống nhau. Hết thời gian chờ nghĩa là gói tin của bạn không đi tới đâu cả. Lỗi TLS hoặc chứng chỉ nghĩa là đầu cuối đã trả lời nhưng bắt tay thất bại. Bị từ chối vì xác thực hoặc chính sách nghĩa là cổng đã đọc thông tin của bạn rồi từ chối. Chỉ kiểu thứ ba thuộc về câu chuyện giới hạn phiên, nên hãy xác định nó trước.
Ứng dụng OpenVPN giữ những dòng đáng chú ý trong bảng nhật ký. Cuộn tới lần kết nối cuối cùng chứ không phải vòng thử lại phía sau, và tìm AUTH_FAILED hoặc chuỗi lý do được gửi về. Ứng dụng thường chỉ báo một câu từ chối chung chung mà không giải thích, nên bước tiếp theo là máy chủ, không phải cài đặt ứng dụng. Ứng dụng của nhà cung cấp còn tệ hơn: thông báo giới hạn thiết bị thì hữu ích, nhưng một kết nối sụp sau hai giây là quyết định chính sách, không phải mật khẩu sai. Dù thế nào, hãy ghi lại tên thiết bị và thời điểm chính xác; người vận hành có thể đối chiếu cặp đó với bản ghi truy cập trong vài giây.
Đếm phiên ở nơi máy chủ đếm
Bộ đếm thật sự quan trọng nằm trên cổng. OpenVPN ghi một tệp trạng thái khi máy chủ khởi động với --status, và liệt kê từng ứng dụng đã kết nối cùng tên chung, địa chỉ thật và các bộ đếm lưu lượng.
cat /var/log/openvpn-status.log
# or query the management socket directly
echo "status 2" | socat - UNIX-CONNECT:/run/openvpn/server.sock
Hai dòng có cùng tên chung là hai phiên còn sống dưới một chứng chỉ. Mặc định OpenVPN không giữ cả hai: nếu không có --duplicate-cn, kết nối thứ hai dùng cùng chứng chỉ sẽ thay thế kết nối đầu, và thiết bị cũ mất đường hầm của nó. Sự thay thế đó chính là dấu hiệu của giới hạn danh tính. Mất gói ngẫu nhiên không lịch sự ngắt đúng một thiết bị vào đúng khoảnh khắc thiết bị khác xuất hiện.
WireGuard không có bảng phiên để xem. wg show wg0 in ra các peer và lần bắt tay gần nhất của chúng, và mỗi thiết bị đã đăng ký là một peer với khóa riêng. Tài khoản dùng chung ở đó là một tệp cấu hình được sao chép sang nhiều máy, và giới hạn đến từ thứ phân phát các cấu hình đó: cổng thông tin của nhà cung cấp, số chỗ, hoặc một quy tắc gắn với địa chỉ công khai của bạn. Nếu bạn tự vận hành cổng, hướng dẫn OpenVPN 2.6 ghi rõ các tùy chọn phía máy chủ.
Tách bốn giới hạn núp sau một thông báo
Phần lớn phiếu hỗ trợ về tài khoản dùng chung là một trong bốn quyết định cho phép truy cập. Ứng dụng không phân biệt được chúng, nhưng quy luật về thiết bị nào thất bại thì có thể.
Cùng danh tính, kết nối thứ hai. Thiết bị mới chạy được và thiết bị cũ chết cùng lúc. Đây là quy tắc đồng thời theo danh tính do cổng hoặc hệ thống tài khoản áp đặt. Không có gì hỏng; dịch vụ đang làm đúng như chính sách của nó nói.
Số chỗ hoặc số thiết bị trong gói. Những thiết bị đầu vẫn kết nối và chiếc tiếp theo bị từ chối trong khi các máy khác tiếp tục. Hãy xem danh sách thiết bị của nhà cung cấp trước khi sửa ứng dụng, vì giới hạn giấy phép không thể sửa từ phía ứng dụng.
Giới hạn gắn với địa chỉ công khai của bạn. Hai laptop sau một router gia đình đều thất bại trong khi cùng đăng nhập đó chạy được từ điểm phát sóng của điện thoại. Hãy chuyển thiết bị thứ hai sang mạng khác để thử. Nếu nó kết nối được ở đó, bạn đang nhìn vào quy tắc theo địa chỉ hoặc quy tắc NAT, không phải số lượng tài khoản.
Mức trần cho cả máy chủ. Mọi người trên cổng đều thất bại trong cùng giờ cao điểm, kể cả những tài khoản hôm qua vẫn bình thường. --max-clients của OpenVPN hành xử như vậy, và nó không liên quan gì tới các thiết bị bạn đã đăng ký.
Dọn phiên cũ trước khi mua thêm chỗ
Một phiên kết thúc tệ vẫn có thể đang giữ chỗ. Kế toán RADIUS ghi một bản ghi khi phiên bắt đầu và đóng nó khi phiên dừng; khi ứng dụng biến mất, tín hiệu dừng không bao giờ đến và máy chủ giữ phiên cho tới khi bản cập nhật trung gian hoặc thời gian chờ hết hạn. Trên cổng FreeRADIUS bạn có thể thấy những bản ghi còn mở:
SELECT username, acctsessionid, acctstarttime
FROM radacct WHERE acctstoptime IS NULL;
Một bản ghi mở có thời điểm bắt đầu cũ và không có lưu lượng thuộc về thiết bị đã rời đi. Hãy đóng nó qua bảng điều khiển của người vận hành hoặc bằng một yêu cầu ngắt kết nối, trước khi cho rằng giới hạn là thật. Điện thoại kết nối lại khi Wi-Fi chuyển sang mạng di động, và một laptop có thể chạy một đường hầm trong hệ điều hành cộng thêm một đường hầm trong ứng dụng của nhà cung cấp, tính là hai phiên từ một máy.
Đừng chia sẻ một danh tính giữa các thiết bị chạy cùng nhau
Cách sửa lâu dài là thay đổi cấu trúc. Cấp cho mỗi thiết bị chứng chỉ riêng với tên chung duy nhất, hoặc tài khoản riêng, và ghi lại ai và máy nào đang giữ nó. Trên OpenVPN điều đó nghĩa là một chứng chỉ ứng dụng cho mỗi thiết bị, và --duplicate-cn vẫn tắt trừ khi bạn muốn hành vi chiếm chỗ; trên WireGuard là một cặp khóa cho mỗi thiết bị, sinh ra tại đó và không bao giờ được sao chép.
Sao chép hồ sơ để lách giới hạn thiết bị sẽ phá vỡ cơ chế thu hồi: thu hồi một bản sao cắt đứt mọi thiết bị dùng chung nó, và nhật ký không còn nói được máy nào đã làm gì. Nếu giới hạn là thương mại, cách sửa trung thực là thêm một chỗ; nếu là chính sách nội bộ, hãy xin một danh tính thứ hai có cùng quyền truy cập.
Kiểm tra theo một thứ tự cố định
Hãy thử cách sửa theo cùng một trình tự mỗi lần, để kết quả có ý nghĩa.
- Đăng xuất trên từng thiết bị và xác nhận danh sách hoạt động của máy chủ trống; một mục không được dọn là phiên cũ, không phải lỗi của ứng dụng.
- Kết nối từng thiết bị một và theo dõi danh sách giữa các lần kết nối.
- Nếu hai máy buộc phải chạy cùng nhau, xác nhận hai dòng mang danh tính khác nhau và cả hai đều giữ bắt tay mới.
- Lặp lại sau khi chuyển từ Wi-Fi sang mạng di động, vì kết nối lại có thể tạo bản ghi thứ hai.
Nếu thiết bị cũ vẫn rớt khi thiết bị mới kết nối, cổng đang áp một quy tắc theo danh tính mà bạn chưa được miễn trừ. Hãy mang tên thiết bị, dấu thời gian và danh sách phiên đang hoạt động tới người vận hành; điều đó biến một phàn nàn mơ hồ thành câu hỏi chính sách mà họ trả lời được.