Вопрос или проблема
Когда я запускаю:
showmount -e <IP>
rpc mount export: RPC: Не удалось получить; errno = Соединение сброшено передней стороной
mount <IP>:/path /mnt
mount.nfs: Соединение сброшено передней стороной
Но
mount -t nfs -c vers=3 <IP>:/path /mnt
работает
Клиент и сервер (freenas 9.3) находятся в одной подсети. Как это исправить?
Убедитесь, что пакеты не блокируются брандмауэром. Я бы порекомендовал выполнить iptables -L -v
до и после выполнения команды showmount
. Если вы видите, что счетчики слева увеличиваются для правила DROP, вероятно, вам нужно вставить правило, чтобы разрешить NFS-клиентам подключаться. Вот некоторая информация с http://www.cyberciti.biz/faq/centos-fedora-rhel-iptables-open-nfs-server-ports/:
Портмапер динамически назначает каждый NFS-сервис порту во время запуска сервиса. Как мне разрешить законным NFS-клиентам получить доступ к NFS-серверу, используя брандмауэр iptables в RHEL / Fedora / CentOS Linux 5.x?
Вам нужно открыть следующие порты: a] TCP/UDP 111 – RPC 4.0 портмапер
b] TCP/UDP 2049 – NFSD (nfs сервер)
c] Статические порты Portmap – различные TCP/UDP порты, определенные в файле /etc/sysconfig/nfs. Настройте службы NFS на использование фиксированных портов
Однако NFS и портмапер – довольно сложные протоколы. Фаервол должен быть настроен на каждом узле и на пограничных фаерволах, чтобы защитить демоны NFS от удаленного доступа, так как NFS-серверы никогда не должны быть доступны извне организации. Однако по умолчанию портмапер динамически назначает каждый NFS-сервис порту во время запуска сервиса.
Динамические порты не могут быть защищены брандмауэрами с фильтрацией портов, такими как iptables. Сначала вам нужно настроить службы NFS на использование фиксированных портов. Откройте /etc/sysconfig/nfs, введите:
# vi /etc/sysconfig/nfs
Измените директиву конфигурации следующим образом, чтобы задать неиспользуемые TCP/UDP порты:
# TCP порт rpc.lockd, на котором должен слушать. LOCKD_TCPPORT=номер-порта-lockd # UDP порт rpc.lockd, на котором должен слушать. LOCKD_UDPPORT=номер-порта-lockd # Порт rpc.mountd, на котором должен слушать. MOUNTD_PORT=номер-порта-mountd # Порт rquotad, на котором должен слушать. RQUOTAD_PORT=номер-порта-rquotad # Порт rpc.statd, на котором должен слушать. STATD_PORT=номер-порта-statd # Исходящий порт statd, который должен быть использован. По умолчанию порт случайный STATD_OUTGOING_PORT=номер-исходящего-порта-statd
Вот пример списка с одного из моих производственных NFS-серверов:
LOCKD_TCPPORT=32803 LOCKD_UDPPORT=32769 MOUNTD_PORT=892 RQUOTAD_PORT=875 STATD_PORT=662 STATD_OUTGOING_PORT=2020
Сохраните и закройте файлы. Перезапустите службы NFS и портмапера:
# service portmap restart # service nfs restart # service rpcsvcgssd restart Обновите файлы /etc/sysconfig/iptables
Откройте /etc/sysconfig/iptables, введите:
# vi /etc/sysconfig/iptables
Добавьте следующие строки, убедившись, что они появляются перед последними строками LOG и DROP для цепи RH-Firewall-1-INPUT:
-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 111 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 111 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 2049 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 32803 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 32769 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 892 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 892 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 875 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 875 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 662 -j ACCEPT -A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 662 -j ACCEP
Сохраните и закройте файл. Замените 192.168.1.0/24 на вашу фактическую подсеть /маска. Вам нужно использовать статические значения портов, определенные в файле конфигурации /etc/sysconfig/nfs. Перезапустите службу iptables:
# service iptables restart
Ответ или решение
Когда вы выполняете команду showmount -e <IP>
и получаете ошибку:
rpc mount export: RPC: Unable to receive; errno = Connection reset by peer
а также сообщение об ошибке при попытке монтирования через NFS:
mount <IP>:/path /mnt
mount.nfs: Connection reset by peer
в то время как команда:
mount -t nfs -c vers=3 <IP>:/path /mnt
успешно выполняется, это указывает на конкретные проблемы с настройками и сетевыми правилами. Разберем возможные причины и пути их решения.
Возможные причины и их решения
-
Блокировка пакетов фаерволлом:
Убедитесь, что ваши сетевые пакеты не блокируются фаерволлом. Для диагностики выполните команду:iptables -L -v
Сделайте это перед и после выполнения команды
showmount
. Если видите увеличение счетчиков для правил DROP, это может указывать на то, что фаерволл блокирует подключения NFS-клиентов.Чтобы разрешить доступ клиентам NFS, необходимо открывать следующие порты:
- TCP и UDP 111 — для RPC (portmapper)
- TCP и UDP 2049 — для NFSD
- Статические порты для других служб, описанных в файле
/etc/sysconfig/nfs
.
Пример настройки статических портов можно найти ниже:
LOCKD_TCPPORT=32803 LOCKD_UDPPORT=32769 MOUNTD_PORT=892 RQUOTAD_PORT=875 STATD_PORT=662 STATD_OUTGOING_PORT=2020
После внесения изменений перезапустите службы NFS и portmapper:
service portmap restart service nfs restart
-
Проблемы с конфигурацией NFS:
Убедитесь, что ваш NFS-сервис правильно настроен и работает, особенно если вы видите, что монтирование с указанием версииvers=3
работает. В случае проблем сshowmount
, возможно, стоит проверить настройки экспорта в файле/etc/exports
. -
Проблемы сети:
Поскольку клиент и сервер находятся в одной подсети, проверьте настройки сетевых интерфейсов и маршрутизацию, чтобы убедиться, что они могут общаться друг с другом. Проверьте доступность сервера NFS из клиента с помощью командыping <IP>
. -
Убедитесь в целостности программного обеспечения:
Наличие устаревших компонентов или неправильных версий программ может также вызвать проблемы. Обновите пакет NFS на клиенте и сервере до самой последней стабильной версии. -
Логи системы:
Проверьте системные логи на сервере и клиенте, такие как/var/log/messages
или/var/log/syslog
, чтобы узнать, нет ли дополнительных сообщений, указывающих на причину проблемы.
Заключение
Если проблема не устраняется после выполнения вышеописанных рекомендаций, возможно, стоит обратиться к документации FreeNAS или на форумы сообщества для получения более специфической помощи. Убедитесь, что все изменения, связанные с настройками сети и безопасности, согласованы с вашими корпоративными стандартами безопасности.