Определяем IP-адрес сервера 1С и подключённых клиентов
Содержание
Адрес самого сервера проще всего посмотреть прямо на нём: команда ipconfig в командной строке Windows покажет IP-адрес сетевой карты. А вот чтобы узнать, с какого компьютера зашёл конкретный клиент 1С, адрес напрямую нигде не хранится — платформа фиксирует имя компьютера, а IP вы получаете уже из этого имени через DNS или ping.
Разберём все рабочие способы: от утилит Windows и консоли администрирования серверов до встроенного языка 1С, журнала регистрации и анализа портов через netstat. В конце — как правильно открыть порты кластера на файрволе, чтобы клиенты вообще достучались до сервера.
Важно понимать разницу. В клиент-серверном варианте «сервер 1С» — это служба ragent на машине с установленным сервером приложений. Её адрес и порт нужны клиентам для подключения. «Клиент» — рабочая станция пользователя. Её адрес обычно нужен администратору, чтобы найти, кто держит блокировку или грузит базу.
С какого адреса работает сам сервер: средства Windows
Начнём с самого сервера приложений. Зайдите на машину, где крутится служба сервера 1С, и откройте командную строку (cmd).
- Команда
ipconfigвыводит IP-адреса всех сетевых интерфейсов. Нужный — строкаIPv4-адресу активного адаптера (обычноEthernet). ipconfig /allдобавляет имя компьютера, MAC-адрес, адреса DNS и шлюза — пригодится, если адаптеров несколько.hostnameпоказывает сетевое имя машины. Именно это имя, а не IP, клиенты обычно указывают в строке «Кластер серверов » при добавлении базы.
Если нужно узнать IP чужой машины по её имени — например, рабочей станции пользователя:
ping ИМЯ_КОМПЬЮТЕРА— в ответах будет виден IP-адрес, на который резолвится имя.nslookup ИМЯ_КОМПЬЮТЕРА— запрос к DNS-серверу, покажет адрес без отправки пакетов (удобно, если на машине закрыт ICMP иpingмолчит).
IP-адрес, полученный через DHCP, может смениться после перезагрузки. Для сервера 1С всегда настраивайте статический адрес или резервирование по MAC на DHCP-сервере — иначе клиенты в один прекрасный день перестанут подключаться.
Кто подключён к серверу: консоль администрирования
Консоль администрирования серверов 1С — главный инструмент, когда нужно увидеть всех подключённых клиентов разом. Открывается оснастка Администрирование серверов 1С Предприятия (MMC) или современная клиентская утилита администрирования.
Порядок:
- Разверните центральный сервер → кластер → пункт Сеансы.
- В списке сеансов для каждого пользователя есть колонка с компьютером-клиентом. Платформа показывает сетевое имя машины, с которой открыт сеанс.
- Чтобы перевести имя в IP, скопируйте его и прогоните через
pingилиnslookup(см. раздел выше).
Рядом есть пункт Соединения — там видно соединения на уровне рабочих процессов. Для поиска «кто сейчас в базе» обычно хватает списка сеансов.
Консоль подключается к серверу через агента кластера — по умолчанию это порт 1540. Если оснастка не видит сервер, проверьте, что в её свойствах указаны правильные имя машины и порт агента, и что порт не режет файрвол.
Если консоль не запускается с ошибкой вроде «класс не зарегистрирован», помогает перерегистрация библиотеки администрирования. В каталоге bin установленной платформы выполните от администратора regsvr32 radmin.dll (версия платформы должна совпадать с версией сервера).
Аналогичные данные даёт консольная утилита rac. Сначала узнайте идентификатор кластера, затем запросите список сеансов:
rac cluster list
rac session list --cluster=ИДЕНТИФИКАТОР_КЛАСТЕРА
В выводе по каждому сеансу будет поле с именем клиентского компьютера. Точный набор опций команды смотрите в справке rac help session — синтаксис немного меняется от версии к версии платформы.
Получаем данные о клиентах кодом 1С
Если нужно собрать адреса программно — например, в обработке для админа, — используйте встроенный язык.
Имя машины, на которой выполняется код, даёт глобальная функция:
ИмяТекущегоКомпьютера = ИмяКомпьютера();
Сообщить(ИмяТекущегоКомпьютера);
На клиенте она вернёт имя рабочей станции, на сервере (в серверной процедуре) — имя сервера приложений.
Чтобы получить список всех активных клиентов, в клиент-серверном варианте работает метод ПолучитьСеансыИнформационнойБазы(). Он доступен пользователю с правами администрирования:
Сеансы = ПолучитьСеансыИнформационнойБазы();
Для Каждого Сеанс Из Сеансы Цикл
Пользователь = "";
Если Сеанс.Пользователь <> Неопределено Тогда
Пользователь = Сеанс.Пользователь.Имя;
КонецЕсли;
Сообщить(Пользователь + " | " + Сеанс.Компьютер + " | " + Сеанс.ИмяПриложения);
КонецЦикла;
Свойство Компьютер — это сетевое имя клиентской машины, то же самое, что показывает консоль. Прямого свойства с IP-адресом у объекта сеанса нет: его нужно получить отдельно, разрезолвив имя через DNS.
В файловом варианте базы метод вернёт один сеанс — ваш собственный. Разбор по компьютерам имеет смысл только в клиент-серверном режиме, где пользователей много.
Журнал регистрации: откуда заходили пользователи
Когда нужно не «кто сейчас», а «кто и откуда заходил вчера», поможет журнал регистрации. Он хранит компьютер-источник для каждого события.
В пользовательском режиме откройте НСИ и администрирование → Администрирование → Журнал регистрации (в типовых конфигурациях на БСП путь похожий; если раздела нет — журнал открывается из меню функций администратора).
Что сделать:
- Задайте период и, при необходимости, отбор по пользователю или событию.
- В настройке состава колонок включите колонку Компьютер — в ней будет имя клиентской машины, с которой выполнено действие.
- Для разовой задачи удобно отобрать события «Сеанс. Начало» — по ним видно, с каких компьютеров люди логинились.
Журнал, как и сеансы, хранит имя компьютера, а не IP. Логика та же: нашли имя — при необходимости перевели в адрес.
Если база опубликована на веб-сервере и пользователи заходят через тонкий или веб-клиент по HTTP(S), в сеансах и журнале вы увидите адрес веб-сервера, а не рабочей станции. Сервер 1С «общается» с веб-сервером, а тот уже с браузером пользователя. Реальные адреса клиентов в этом случае смотрят в логах веб-сервера (Apache или IIS), а не в консоли 1С.
Журнал регистрации может весить гигабайты. Не открывайте его без отбора по периоду на большой базе — форма будет долго грузиться и съест память клиента.
netstat: какие соединения и порты открыты
Иногда вопрос стоит иначе: не «чей адрес», а «кто вообще сейчас соединён с сервером и по каким портам». Здесь работает штатная утилита Windows netstat.
На сервере приложений выполните от администратора:
netstat -ano | findstr "1540 1541 156"
-a— все соединения,-n— в числовом виде (без разрешения имён),-o— с идентификатором процесса (PID).findstrотфильтрует строки по портам кластера.
В колонке Внешний адрес вы увидите IP-адреса и порты клиентов, подключённых к серверу. Колонка PID связывает соединение с процессом — сопоставьте его в диспетчере задач с ragent.exe или rphost.exe.
Чтобы сразу видеть имя процесса, добавьте ключ -b (требует прав администратора):
netstat -anob
Это самый прямой способ получить именно IP-адреса клиентов, а не их имена: в сетевых соединениях фигурируют адреса.
Есть и обратная задача — проверить с клиентской машины, доходит ли она до сервера. На рабочей станции выполните netstat -an | findstr 1541 при открытой базе: если соединение в состоянии ESTABLISHED есть, значит, клиент достучался до менеджера кластера. Пусто или SYN_SENT — пакеты до сервера не доходят, разбирайтесь с сетью и файрволом.
Порты кластера и правила файрвола
Чтобы клиент дошёл до сервера, на файрволе сервера должны быть открыты порты кластера. Порядок подключения такой: клиент обращается к агенту кластера (порт 1540), затем к менеджеру кластера (1541), после чего работает с рабочими процессами (rphost).
Диапазон портов рабочих процессов по умолчанию — 1560–1591. Он задаётся в свойствах рабочего сервера в консоли администрирования, там же настраиваются требования назначения функциональности и параметры отказоустойчивости.
Минимальный набор правил для входящих подключений на сервере:
| Служба / назначение | Порт по умолчанию | Протокол |
|---|---|---|
| Агент кластера (ragent) | 1540 | TCP |
| Главный менеджер кластера | 1541 | TCP |
| Рабочие процессы (rphost) | 1560–1591 | TCP |
Правило в брандмауэре Windows можно создать командой (пример для диапазона):
netsh advfirewall firewall add rule name="1C Server" dir=in action=allow protocol=TCP localport=1540-1591
ipconfig прямо на сервере приложений. Для подключения клиентов лучше использовать не IP, а имя сервера со статической привязкой.netstat -ano на сервере. В сеансах будет имя компьютера, в netstat — IP и порт.Открывайте порты точечно и только во внутренней сети. Выставлять порты сервера 1С напрямую в интернет нельзя — это прямой путь к взлому базы. Удалённый доступ организуйте через VPN или терминальный сервер, а не пробросом портов на роутере.
Для безопасности дополнительно ограничьте, с каких адресов разрешены подключения: в правиле файрвола укажите разрешённые IP (область «Удалённый IP-адрес»), а не «любой». Так даже внутри сети к серверу не подключатся с посторонних машин.
Частые вопросы
Почему в консоли и журнале показано имя компьютера, а не IP-адрес?
ping или nslookup, а напрямую адреса видны только в netstat на уровне сетевых соединений.Клиент не видит сервер по имени, а по IP подключается. Что не так?
hosts). Либо настройте, чтобы имя сервера корректно резолвилось в его адрес, либо пропишите в строке кластера IP напрямую — но тогда при смене адреса подключение снова отвалится.Какой порт указывать клиенту при подключении к серверу?
1540 (часто порт вообще не указывают — берётся значение по умолчанию). Остальные порты кластер согласует сам, их нужно лишь открыть на файрволе.Как узнать внешний IP-адрес сервера для удалённого доступа?
Можно ли одной командой увидеть IP всех подключённых клиентов?
netstat -ano с фильтром по портам кластера покажет внешние адреса и порты всех активных соединений. Имена пользователей это не даёт — их сопоставляют со списком сеансов в консоли администрирования.