Лимит сеансов общей учётной записи 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 на мобильную сеть, так как переподключение может создать вторую запись.
Если старое устройство всё ещё отключается при подключении нового, шлюз применяет правило по идентичности, на которое вам не дали исключения. Принесите оператору имена устройств, метки времени и список активных сеансов; это превращает расплывчатую жалобу в вопрос политики, на который он может ответить.