Файл состояния считает сессии, а не LAN за ними
Снимок перечисляет сессии VPN и состояние маршрутизации, а не каждую машину за площадкой. Читайте заголовки, типы записей и возраст файла вместе.
Кто-то спрашивает, сколько машин в VPN, и файл состояния предъявляют как доказательство. Он отвечает на более узкий вопрос: сколько сессий существует в этом снимке и какие виртуальные адреса маршрутизирует сервер. Именно в зазоре между этими вопросами живёт большинство ошибок отчётности, и закрыть его можно, начав с чтения собственных заголовков файла.
Что на самом деле содержит снимок
Файл записывается через интервал, когда для этого экземпляра сервера настроен вывод состояния, поэтому это периодическая картина, а не живой поток. Его разделы отдельно перечисляют сессии и внутреннее состояние маршрутизации, а версия формата определяет раскладку столбцов.
status /run/openvpn/office.status 30
status-version 3Версия 3 пишет поля, разделённые табуляцией, со строкой заголовка, тогда как старые форматы отличаются, а более поздние версии могут добавлять поля. Читайте заголовок вместо жёсткого задания номера столбца, потому что скрипт, предполагающий позиции, тихо ломается при следующем обновлении.
| Record | What it describes | What it cannot tell you |
|---|---|---|
| Client list | A session in this snapshot | How many people or machines that session represents |
| Real address | The outer peer address and port | Which device is behind it |
| Routing rows | Virtual addresses and route ownership | Which downstream hosts are alive |
Считайте сессии, а не людей или машины
Одно соединение площадки может нести трафик нескольких разрешённых машин за собой. Один человек тоже может держать больше одной сессии одновременно, с ноутбука и телефона. Ни одна из этих схем не видна в числе, поэтому подключённые пользователи обретают смысл только после определения единицы. Спросите, какая единица нужна отчёту, прежде чем кто-либо начнёт считать.
Если число важно для лицензирования или ёмкости, определите единицу в том же документе, что и отчёт. Отчёт, который не указывает, считает он сессии, идентичности или устройства, будет прочитан как та единица, которую ожидал читатель.
Внешний адрес — не идентификатор
Поле реального адреса — это адрес и порт партнёра такими, какими их видит сервер. Несколько клиентов за одним транслированным публичным адресом делят этот адрес, поэтому группировка по нему сливает несвязанные сессии. Порт тоже меняется между соединениями, что делает пару бесполезной как стабильный ключ. Отчёт, сгруппированный так, выглядит точным и является неверным.
Для группировки используйте эффективную идентичность клиента, а адрес считайте деталью транспорта. Когда две строки делят идентичность, это обычно означает одновременные сессии, а не дублирующую запись.
Строки маршрутизации — не инвентарь хостов
Запись маршрутизации может называть подсеть, за которую отвечает один партнёр, а подсеть — не список её хостов. Сервер знает, что должен отправлять этот диапазон конкретной сессии, и не имеет представления, какие из этих машин включены, аутентифицированы в приложении или кому-то полезны. Таблица маршрутизации описывает достижимость, а не занятость. Именно эта разница и есть вся причина, по которой VPN не может ответить на вопрос инвентаризации.
Несколько строк тоже могут указывать на одного партнёра, потому что площадка может объявлять больше одного диапазона. Подсчёт строк и называние результата количеством устройств завышает развёртывание на произвольный коэффициент.
Если требование действительно об инвентаре активов, используйте процесс инвентаризации, которому принадлежит эта сеть. VPN может определить, какой партнёр несёт маршрут, и это другой факт, чем то, какие хосты существуют за ним.
Возраст, права и живой просмотр
Сохраняйте время изменения файла с каждым ответом. Сервер, остановившийся несколько часов назад, оставляет свой последний снимок на месте, а устаревший файл, выданный за актуальный, хуже отсутствия отчёта.
Каталог должен существовать и быть доступным для записи учётной записи, от имени которой служба действительно работает, что легко забыть после этапа ужесточения. Файл обычно содержит имена и адреса, поэтому держите его в административном месте, а не где угодно, откуда веб-сервер может его отдать. Проверяйте права из учётной записи службы, а не из своей оболочки. Снимок, который тихо перестал обновляться, выглядит точно как спокойная сеть.
Для событийных нужд используйте поддерживаемый интерфейс управления вместо более частого опроса. Относитесь к этому интерфейсу как к управлению, а не как к метрикам, и никогда не открывайте его в интернет только для подсчёта сессий.