Назад | Перейти на главную страницу

Проблема клиента NFS в CentOS 6: rpcbind не прослушивает порт 111

Я пытаюсь настроить клиент NFS на новом сервере CentOS 6.6 на существующий сервер NFS, и у меня возникают проблемы, которые я не могу понять. При запуске rpcbind/nfs Я получил:

# /etc/init.d/rpcbind start
# /etc/init.d/nfs start
    Starting NFS services:                                     [  OK  ]
    Starting NFS quotas: Cannot register service: 
         RPC: Unable to receive; errno = Connection refused
         rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
                                                               [FAILED]
    Starting NFS mountd:                                       [  OK  ]
    Starting NFS daemon:                                       [  OK  ]

rpcinfo -p работает отлично

# rpcinfo -p
program vers proto   port  service
100000    4   tcp    111  portmapper
    .. snip
100021    4   tcp  47627  nlockmgr

но rpcinfo -p 127.0.0.1 (или localhost) возвращает ошибку:

# rpcinfo -p 127.0.0.1
rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused

При проверке портов с помощью (netstat -an) кажется, что portmap / rpcbind не прослушивает порт 111. Ничего не прослушивает порт 111, а rpcbind прослушивает порт 3421 (редактирование: не случайно, как я изначально думал).

Вот что я проверял или пробовал:

На данный момент у меня действительно не осталось никаких вариантов или вещей, которые нужно проверить, и мне нужны некоторые идеи. На этом этапе я почти все попробую, так как сервер без NFS относительно бесполезен.

Обновление 1:

Бег rpcinfo -s localhost на клиенте работает но rpcinfo -s server не работает. Мне интересно, есть ли проблема с тем, чтобы клиент был CentOS 6, а сервер - CentOS 5.

Обновление 2:

Выход из showmount идентичен на новом клиенте и сервере NFS:

# showmount -e 10.2.212.10
Export list for 10.2.212.10:
/shared/uesp/maps           67.205.112.104
/shared/uesp/skins          67.205.112.104
/shared/phpsessions         10.2.212.30,[...snip...],10.2.212.11
/shared/uesp/filecache      10.2.212.30,[...snip...],10.2.212.11
/shared/uesp/wikiimages     10.2.212.30,[...snip...],10.2.212.11
/shared/eqwiki/filecache    10.2.212.30,[...snip...],10.2.212.11
/shared/eqwiki/wikiimages   10.2.212.30,[...snip...],10.2.212.11
/shared/davewiki/filecache  10.2.212.30,[...snip...],10.2.212.11
/shared/davewiki/wikiimages 10.2.212.30,[...snip...],10.2.212.11

Я вырезал длинный список IP-адресов, но 10.2.212.30 - новый клиент. Попытка смонтировать общий ресурс NFS на новом клиенте приводит к следующему:

# mount -v 10.2.212.10:/shared/phpsessions /mnt/phpsessions
mount: no type was given - I'll assume nfs because of the colon
mount.nfs: timeout set for Thu Jan 15 18:53:43 2015
mount.nfs: trying text-based options 'vers=4,addr=10.2.212.10,clientaddr=10.2.212.30'
mount.nfs: mount(2): Operation not permitted
mount.nfs: trying text-based options 'addr=10.2.212.10'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: portmap query retrying: RPC: Unable to receive
mount.nfs: prog 100003, trying vers=3, prot=17
mount.nfs: portmap query failed: RPC: Unable to receive - Connection refused
mount.nfs: trying text-based options 'vers=4,addr=10.2.212.10,clientaddr=10.2.212.30'
mount.nfs: mount(2): Operation not permitted
mount.nfs: trying text-based options 'addr=10.2.212.10'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: portmap query retrying: RPC: Unable to receive
mount.nfs: prog 100003, trying vers=3, prot=17
mount.nfs: portmap query failed: RPC: Unable to receive - Connection refused
...

Последние несколько строк повторяются до истечения времени ожидания.

Обновление 3:

Итак, если я использую iptables перенаправить порт 111 на порт rpcbind используется на клиенте, тогда я могу получить rpcinfo -p localhost работать над клиентом. Однако это никак не влияет на проблемы с монтированием. Я пытался заставить NFS использовать v2, например:

# mount -v -t nfs -o nfsvers=3 10.2.212.10:/shared/phpsessions /mnt/phpsessions

но это приводит к тому же сообщению об ошибке, что и выше. Дело в том, что при запуске на клиенте я получаю:

# rpcinfo -s server
rpcinfo: can't contact rpcbind: : RPC: Unable to receive; errno = Connection refused

что такое же сообщение об ошибке от mount. Я предполагаю, что монтирование на клиенте CentOS 6 пытается использовать «новый» rpcbind на сервере CentOS 5, на котором запущена «старая» карта портов, поэтому он не работает. Я предполагаю, что можно каким-то образом смешивать версии CentOS, подобные этой.

Обновление 4:

Я создал тестовый общий ресурс NFS на клиенте и смог успешно смонтировать его на сервере. Это похоже на теорию о том, что это как-то связано с несоответствием portmap / rpcbind. Клиент может действовать как сервер NFS, поскольку rpcbind (rpc v3 / 4) обратно совместим с portmap (rpc v2), но portmap не совместим с rpcbind.

Обновление 5 (возможное решение)

Посмотрев на клиента внимательнее, я заметил rpcbind кажется, всегда находится на порте 3421 (изначально я думал, что это было случайно). На сервере я использовал iptables перенаправить порт 3421 на порт 111. После этого я смог успешно смонтировать общий ресурс NFS с сервера на клиенте. Это может быть правильным решением, поскольку у меня будет несколько серверов CentOS 5/6 только в течение нескольких недель, поскольку я обновляю все серверы до CentOS 6.

Если не появится лучший ответ, я отвечу на свой вопрос через несколько дней.

Основная проблема оказалась в несоответствии портов для portmap/rpcbind. На CentOS 6 моя rpcbind прослушивал порт 3421 вместо ожидаемого 111, как portmap работает в CentOS 5. Это вызвало проблемы с запуском nfs и установка долей между двумя машинами.

Решением было использовать itpables для перенаправления порта 111 в CentOS 6 на порт 3421:

iptables -t nat -I PREROUTING -p tcp --dport 111 -j REDIRECT --to-ports 3421
iptables -t nat -I PREROUTING -p udp --dport 111 -j REDIRECT --to-ports 3421
iptables -t nat -I OUTPUT -p tcp -o lo --dport 111 -j REDIRECT --to-ports 3421
iptables -t nat -I OUTPUT -p udb -o lo --dport 111 -j REDIRECT --to-ports 3421

То же самое было сделано на сервере CentOS 5, за исключением обратного перенаправления порта 3421 на 111. После этого я смог успешно смонтировать общий ресурс NFS с сервера CentOS 5 на клиенте CentOS 6.

Чтобы получить nfs полностью работая на сервере CentOS 6, мне также пришлось раскомментировать все строки, связанные с портом, в /etc/sysconfig/nfs использовать фиксированные адреса портов. До этого у меня периодически возникали проблемы с lockd служба не отвечает.