Настройка NFS под FreeBSD


Неоднокрано у меня появлялись задачи, когда нужно достаточно тесно переплести
несколько серверов, чтобы они могли видеть и обмениваться файлами между собой. Там
где есть только Unix(Linux), samba как-то особо не нужна и, к тому же, есть простое
и эффективное решение - NFS (Network File System). Решение это обладает ограниченной
областью применимости, а именно: по разным сообщениям технология RPC, используемая в
NFS достаточно дырявая, и ее желательно использоваться только для trusted-хостов,
которые должны быть соответственным образом прописаны. Об этом по ходу действа я
еще вспомню.

== Настройка NFS-сервера ==

Итак, на одном из серверов я хочу предоставлять некоторую папку в общий доступ. Для
этого необходимо обратиться к демонам: nfsd, mountd, rpcbind, т.е. прописать их как
полагается в /etc/rc.conf:

rpcbind_enable="YES"
nfs_server_enable="YES"
nfs_server_flags="-u -t -n 4 -h 192.168.1.1"
mountd_enable="YES"
mountd_flags="-r -n"
nfs_client_enable="YES"

Последняя строка говорит о том, что мой сервер сам является клиентом для другого
сервера - это не всегда нужно. Хотелось бы обратить внимание на флаги nfs_server_flags
 - здесь я привязываюсь к конкретному интерфейсу, который, к тому же, является
внутренним для моей сети. Т.е. NFS через интернет не даю никому - так безопаснее. Для
интернет, в конце концов, есть другие протоколы. 

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

# rpcinfo -p

Папки, которые будут "расшарены" нужно прописать в файл /etc/exports примерно так:

/home/share -alldirs -maproot=root 192.168.1.2

Как видно последним параметром в строке идут IP-адреса тех хостов, которым дозволено
монтировать хозяина. Это важно. Есть еще нюанс с безопасностью: rpcbind нужно
разрешить в файле /etc/hosts.allow:

rpcbind : 192.168.1.2/255.255.255.0 : allow
rpcbind : ALL : deny

Мысль всё та же - я разрешаю NFS только конкретным хостам и никому более.

Как всегда, рестартуем:

# /etc/rc.d/mountd restart
# /etc/rc.d/rpcbind restart
# /etc/rc.d/nfsd restart

Теперь, если всё сделано правильно, можно перейти к настройке клинта -
это намного проще.

== Настройка NFS-клиента ==

Настройку клиента лучше всего начать с настройки файервола - я сначала об этом забыл
и потом сломал мозг, разбираясь почему папка не монтируется. Потому что других
настроек крайне мало. Как уже говорилось в /etc/rc.conf нужно прописать:

nfs_client_enable="YES"

Дальше стартуем локальный асинхронный сервер с заданным числом соединений:

# nfsiod -n 4

И делаем самое главное:

# mount -t nfs 192.168.1.1:/home/share /mnt

Оки-оки!