Rpcbind linux что это
rpcbind - это сервер, преобразующий номера программ RPC в универсальные адреса. Он должен работать, чтобы можно было делать вызовы удаленных процедур (RPC calls).
При запуске службы RPC, она сообщает rpcbind, по какому адресу она принимает информацию и какие номера программ RPC она готова обслуживать. Когда клиент желает выполнить вызов удаленной процедуры, он сначала связывается с rpcbind на сервере для определения адреса, куда необходимо посылать пакеты RPC.
rpcbind допускает частичный успех. Т.е., если ему удается запуститься как минимум на одном интерфейсе закольцовывания (loopback provider), он продолжит работу, даже если запуск на других интерфейсах закольцовывания и транспортах типа tcp, udp, spx и ipx закончится неудачей.
ИСПОЛЬЗОВАНИЕ
rpcbind может запускаться только пользователями с идентификатором, совпадающим с root.
Опции
rpcbind воспринимает следующие опции:
Предупреждения
Если происходит сбой rpcbind, все серверы RPC необходимо перезапустить.
Если не удалось запустить демон rpcbind, причина может быть в том, что имя машины отличается от указанного в файлах /etc/net/*/hosts. Так может происходить, если имя машины изменено с помощью команды uname(1).
Чтобы проверить, работает ли rpcbind, введите
nfsping -o rpcbind
Если они не совпадают, значит, имя вашей машины было изменено с помощью команды uname, и придется вручную изменить имена хоста в записях файлов /etc/net/*/hosts.
Например, если имя хоста для машины было hulk (используйте uname -n), первая запись в каждом из файлов /etc/net/*/hosts должна выглядеть следующим образом:
Если первая запись в каждом из файлов /etc/net/*/hosts не совпадает с именем хоста машины, необходимо обновить первую запись в файлах /etc/net/*/hosts и перезапустить демон rpcbind. Чтобы перезапустить rpcbind, введите:
ССЫЛКИ
Copyright 1994 Novell, Inc.
Copyright 1999 В. Кравчук, OpenXS Initiative, перевод на русский язык
Утилита rpcbind [3] отображает службы RPC на порты, которые они прослушивают. Процессы RPC уведомляют rpcbind при запуске, регистрируя порты, которые они прослушивают, и номера программ RPC, которые они ожидают обслуживать. Затем клиентская система связывается с сервером rpcbind с определенным номером программы RPC. Служба rpcbind перенаправляет клиента на правильный номер порта, чтобы он мог связываться с запрошенной службой
Чтобы проверить это, я настроил NFS-сервер и клиент и отслеживал трафик между ними. Из того, что я увидел, клиент уже знал, что служба NFS на сервере прослушивала порт 2049.
Так когда же в игру вступит rcpbind? Когда я делаю rpcinfo на сервере, я получаю следующее:
что 0.0.0.0.8.1 значит в этом случае? И как это переводится на порт 2049?
rpcbind является близким аналогом BIND, или на самом деле, любого DNS-сервера. Если я правильно помню, вы выбираете или получаете номер протокола при компиляции объявления интерфейса RPC в код заглушки сервера и клиента с помощью rpcgen .
Когда клиент регистрируется для данного интерфейса на определенном хосте, обычно с помощью clnt_create() вызова, код заглушки задает rpcbind на этом хосте вопрос, что-то вроде «на каком порту UDP или TCP прослушивает протокол номер X?» rpcbind в отличие от большинства других сервисов ONC, прослушивает порты TCP и UDP 111, поэтому, учитывая имя хоста или IP-адрес, программа может просто запросить rpcbind этот хост или IP-адрес. rpcbind отвечает с соответствующим номером порта, если сервер зарегистрировался на этом хосте. Эта регистрация выполняется серверным процессом при вызове svc_create() .
В вашем примере 100003 - это номер протокола NFS. Некоторые процессы зарегистрировались rpcbind , указав свой номер протокола (100003) и какой бы порт TCP или UDP они ни приобрели. Это зависит от rpcbind правильности выдачи этого номера порта, 2049 в вашем случае, на любой вызов по нему для «того, какой порт я должен использовать для протокола номер 100003».
Теперь мы попадаем на более странную территорию. «0.0.0.0.8.1» находится в столбце «адрес» rpcinfo вывода. Поскольку это «универсальный адрес» процесса сервера NFS, я уверен, что префикс «0.0.0.0» - это IP-адрес (в данном случае INADDR_ANY), который сервер использовал при bind() системном вызове при получении номера порта. Я не уверен, что такое суффикс "8.1", но, глядя на rpcinfo вывод, он должен иметь какое-то отношение к тому, что сервер NFS в основном является потоком ядра.
Утилита rpcbind [3] отображает службы RPC в порты, на которых они Слушать. RPC-процессы уведомляют rpcbind, когда они начинаются, регистрируя порты, которые они прослушивают, и номера программ RPC, которые они ожидают обслуживать. Затем клиентская система связывается с rpcbind на сервере с помощью конкретный номер программы RPC. Служба rpcbind перенаправляет клиент к соответствующему номеру порта, чтобы он мог связываться с запрошенная услуга
Чтобы проверить это, я настроил сервер и клиент NFS и контролировал трафик между ними. Из того, что я увидел, клиент уже знал, что служба NFS на сервере прослушивает порт 2049.
Итак, когда rcpbind вступает в игру? Когда я делаю rpcinfo на сервере, я получаю следующее:
что означает 0.0.0.0.8.1 означает в этом случае? И как это перевести на порт 2049?
1 ответ
rpcbind является близким аналогом BIND или действительно любым DNS-сервером. Если я правильно помню, вы выбираете или присваиваете номер протокола при компиляции декларации интерфейса RPC в код сервера и клиента с кодом rpcgen .
Когда клиент подписывается для определенного интерфейса на конкретном хосте, обычно с вызовом clnt_create() , код заглушки запрашивает ---- +: = 3 =: + ---- на этом хосте вопрос, что-то вроде «на каком UDP или TCP-порту есть номер протокола X?» rpcbind , в отличие от большинства других служб ONC, прослушивает TCP и UDP-порт 111, поэтому, учитывая имя хоста или IP-адрес, программа может просто спросите rpcbind на этом хосте или IP-адресе. rpcbind отвечает соответствующим номером порта, если сервер зарегистрировался на нем на этом хосте. Эта регистрация выполняется серверным процессом, когда он вызывает rpcbind .
В вашем примере 100003 является номером протокола для NFS. Некоторые процессы зарегистрировались с помощью svc_create() , указав свой номер протокола (100003) и любой TCP или UDP-порт, который они приобрели. Это до rpcbind , чтобы правильно указать номер порта, 2049 в вашем случае, любому вызову на него для «какого порта я должен использовать для протокола номер 100003 ".
Теперь мы попадаем в более туманную территорию. «0.0.0.0.8.1» находится в столбце «адрес» вывода rpcbind . Поскольку это «универсальный адрес» процесса NFS-сервера, я уверен, что префикс «0.0.0.0» - это IP-адрес (INADDR_ANY в этом случае), который используется сервером в rpcinfo при получении номера порта. Я не уверен, что такое суффикс «8.1», но, глядя на вывод bind() , он должен иметь какое-то отношение к NFS сервер в основном является ядром.
rpcbind - это сервер, преобразующий номера программ RPC в универсальные адреса. Он должен работать, чтобы можно было делать вызовы удаленных процедур (RPC calls).
При запуске службы RPC, она сообщает rpcbind, по какому адресу она принимает информацию и какие номера программ RPC она готова обслуживать. Когда клиент желает выполнить вызов удаленной процедуры, он сначала связывается с rpcbind на сервере для определения адреса, куда необходимо посылать пакеты RPC.
rpcbind допускает частичный успех. Т.е., если ему удается запуститься как минимум на одном интерфейсе закольцовывания (loopback provider), он продолжит работу, даже если запуск на других интерфейсах закольцовывания и транспортах типа tcp, udp, spx и ipx закончится неудачей.
ИСПОЛЬЗОВАНИЕ
rpcbind может запускаться только пользователями с идентификатором, совпадающим с root.
Опции
rpcbind воспринимает следующие опции:
Предупреждения
Если происходит сбой rpcbind, все серверы RPC необходимо перезапустить.
Если не удалось запустить демон rpcbind, причина может быть в том, что имя машины отличается от указанного в файлах /etc/net/*/hosts. Так может происходить, если имя машины изменено с помощью команды uname(1).
Чтобы проверить, работает ли rpcbind, введите
nfsping -o rpcbind
Если они не совпадают, значит, имя вашей машины было изменено с помощью команды uname, и придется вручную изменить имена хоста в записях файлов /etc/net/*/hosts.
Например, если имя хоста для машины было hulk (используйте uname -n), первая запись в каждом из файлов /etc/net/*/hosts должна выглядеть следующим образом:
Если первая запись в каждом из файлов /etc/net/*/hosts не совпадает с именем хоста машины, необходимо обновить первую запись в файлах /etc/net/*/hosts и перезапустить демон rpcbind. Чтобы перезапустить rpcbind, введите:
ССЫЛКИ
Copyright 1994 Novell, Inc.
Copyright 1999 В. Кравчук, OpenXS Initiative, перевод на русский язык
Читайте также: