Вопрос или проблема
Как узнать, сколько клиентов подключено к моему NFS серверу и их IP или имя хоста?
Быстрый метод, который должен работать везде, заключается в том, чтобы перечислить все подключенные сокеты к порту nfs
через ss
на сервере:
ss -a | grep nfs
Существуют также команды showmount:
showmount -a localhost
в руководстве:
showmount запрашивает демон монтирования на удаленном хосте, чтобы получить информацию о состоянии NFS сервера на этой машине. Без опций showmount выводит набор клиентов, которые монтируют с этого хоста. Вывод showmount предназначен для отображения так, как будто он был обработан через «sort -u».
Обратите внимание, что есть некоторые предупреждения:
Полнота и точность информации, отображаемой showmount, варьируются в зависимости от реализации сервера NFS.
Поскольку showmount сортирует и уникализирует вывод, невозможно определить из вывода, монтирует ли клиент один и тот же каталог более одного раза.
Таким образом, например, если клиент подключается несколько раз к одному и тому же монтированию, он появится только один раз в выводе showmount
.
В этом случае с ss -a
вы должны их поймать.
Начиная с ядра Linux 5.3, вы можете использовать специальный каталог под названием /proc/fs/nfsd/clients
.
Вы можете проверить версию ядра с помощью команды uname -r
.
Чтобы увидеть файлы, открытые клиентами:
# nfsdclnts
Inode number | Type | Access | Deny | ip address | Filename
8296109 | deleg | r | | [2001:db8::ff:10]:1008| .sqlite_history
15617474 | open | rw | -- | [2001:db8::ff:10]:1008| .sqlite_history
(что отображает информацию, прочитанную из /proc/fs/nfsd/clients
).
Чтобы перечислить клиентов, которые подключились, даже если они не открывали никаких файлов:
# rpcctl client
clnt-0: switch-0, xprts 1, active 1, queue 0
xprt-0: tcp, 2001:db8::ff:10 [main]
clnt-1: switch-1, xprts 1, active 1, queue 0
xprt-1: tcp, 127.0.0.1
clnt-2: switch-2, xprts 1, active 1, queue 0
xprt-2: local, /var/run/gssproxy.sock [main]
(xprt
— это сокращение от ‘транспорт’).
Ответ или решение
Определение количества клиентов, подключенных к вашему NFS-серверу, и их IP-адресов или имён хостов является важной задачей для администраторов, управляющих сетевыми файловыми системами (NFS). В современных условиях необходимо поддерживать высокую степень контроля и мониторинга, чтобы обеспечивать безопасность и стабильность работы серверов. Рассмотрим несколько методов, которые могут помочь в решении данной задачи.
Теория
NFS (Network File System) — это протокол распределенной файловой системы, который позволяет пользователям легко обмениваться файлами между компьютерами в сети. Проблема, с которой могут столкнуться администраторы, заключается в необходимости определить текущее количество клиентов, подключенных к NFS-серверу, а также собирать необходимую информацию о самих клиентах, такую как их IP-адреса или имена хостов.
Пример
- Использование команды
ss
Команда ss
позволяет просматривать информацию о сокетах. Применительно к NFS-серверу, она может быть использована для вывода списка всех подключенных сокетов, связанных с портом NFS. Например:
ss -a | grep nfs
Эта команда выводит все активные сокеты, связанные с NFS, что позволяет получить список IP-адресов, подключённых клиентов.
- Команда
showmount
showmount
— инструмент, который запрашивает демон монтирования на удалённом хосте для получения информации о состоянии NFS-сервера:
showmount -a localhost
Этот инструмент показывает, какие клиенты в настоящее время монтируют файловую систему с данного сервера. Однако есть некоторые ограничения: если клиент монтирует одну и ту же директорию несколько раз, он все равно будет отображаться только один раз.
- Директория
/proc/fs/nfsd/clients
(начиная с ядра Linux 5.3)
Эта специальная директория содержит информацию о клиентах, подключённых к NFS-серверу. Для использования этого метода сначала необходимо убедиться, что ваша система использует ядро Linux версии 5.3 или выше, запустив следующую команду:
uname -r
Если версия ядра поддерживает это, вы можете просмотреть содержимое этой директории для получения информации о подключениях клиентов.
- Команда
nfsdclnts
Эта команда выводит информацию о файлах, открытых клиентами:
nfsdclnts
Данная команда считывает информацию из /proc/fs/nfsd/clients
и предоставляет данные о номере inode, типе доступа, IP-адресе клиента и имени файла.
- Команда
rpcctl client
Для получения информации о клиентах, подключившихся к серверу, даже если они не открывали файлы, можно использовать:
rpcctl client
Этот метод поможет отследить все подключённые клиенты, включая те, которые не инициировали передачу данных, показывая протокол транспортировки (xprt
), IP-адрес и прочие параметры.
Применение
Системные администраторы должны регулярно использовать эти инструменты в своей работе для поддержания актуального состояния серверного оборудования и быстрого реагирования на нежелательные изменения. Выбор конкретного метода зависит от текущей версии используемого ядра и конкретных требований инфраструктуры.
-
Мониторинг и аудит: Запуск регулярных проверок подключённых клиентов позволяет не только отслеживать загрузку системы, но и предотвращать несанкционированный доступ.
-
Оптимизация работы системы: Зная точное количество и характер активности подключённых клиентов, администраторы могут оптимизировать конфигурацию системы, перераспределять ресурсы и улучшать общую производительность.
-
Устранение неисправностей: При возникновении проблем с производительностью системы или подозрительных действий, знание точного списка подключённых клиентов поможет быстрее диагностировать проблемы и принять необходимые меры.
В заключение, корректное использование перечисленных инструментов является критически важным элементом администрирования NFS-сервера. Это помогает поддерживать безопасность и высокую производительность системы, что особенно важно в современных условиях быстро развивающихся технологий и постоянного увеличения объёмов данных.