NFS через SSH · 3 min read · Feb 08, 2026
[Debian-Sarge] Туннелирование NFS через SSH
[Debian-Sarge] Туннелирование NFS через SSH
Последнее обновление: 27-09-2006 @ ~21:40
Причина: Добавлены фиксированные порты для nfs сервера, чтобы упростить жизнь :)
Добро пожаловать
Цель этого руководства - создать NFS сервер, который работает через SSH туннель. Таким образом, весь трафик между вашими хостами и файловым сервером зашифрован и, следовательно, более безопасен :)
Обычно вам нужно вводить пароль каждый раз, когда вы пытаетесь установить SSH соединение, но поскольку мы можем монтировать при загрузке, мы используем ssh-keygen для создания пары ключей, чтобы войти без ввода пароля. Однако мы ограничим эту сессию входа выполнением всего лишь одной команды ;)
Мы будем использовать новую чистую установку Debian Sarge для начала.
В этом руководстве я буду использовать вымышленный домен “linux.lan”.
Установка программного обеспечения
Мы начнем с NFS сервера.
apt-get -y install nfs-kernel-serverСначала настройте его для работы на фиксированных портах, это упростит создание брандмауэра, но также важно, что это поможет упростить монтирование клиентами.
echo “STATDOPTS=–port 2231” > /etc/default/nfs-common
echo “options lockd nlm_udpport=2232 nlm_tcpport=2232” >> /etc/modules.conf
echo “RPCNFSDCOUNT=8 RPCMOUNTDOPTS=’-p 2233’” > /etc/default/nfs-kernel-server
Вот и все, теперь мы можем использовать порт 2233 позже, когда будем монтировать общие ресурсы :) проверьте, сработало ли это с rpcinfo -p. Если nlockmgr все еще использует случайные порты, это настройка, встроенная в компиляцию. Настройте это в grub/lilo как параметры ядра:
“lockd.udpport=2232 lockd.tcpport=2232”.
Создайте нового пользователя с именем sleeper для настройки SSH туннеля с других хостов. Мы сгенерируем ключ для этой учетной записи, чтобы вы могли войти с помощью файла ключа вместо того, чтобы вводить свой пароль каждый раз. Учетная запись также будет ограничена выполнением ‘sleep’ таким образом. Другие команды просто потерпят неудачу.
adduser sleeper
su sleeper
Теперь переключитесь на клиент, который будет использовать наш файловый сервер.
Сначала нам нужен ключ:
ssh-keygen -t rsa -b 2048(используйте значения по умолчанию и БЕЗ пароля!)
Теперь скопируйте файл .pub в домашний каталог sleeper на сервере:
scp -P 12345 ~/.ssh/id_rsa.pub [email protected]:~/Теперь вернемся на сервер: Как пользователь ‘sleeper’ нам нужно настроить/установить ключ:
mkdir ~/.ssh
cd ~/.ssh
mv ../id_rsa.pub ./id_rsa.pub
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
Добавьте это в начало authorized_keys (перед ssh-rsa […]):
client="client.linux.lan",command="/bin/sleep 600d"замените “client” на правильное имя хоста вашего клиента или используйте IP-адреса.
(но убедитесь, что каждая запись остается в 1 строке!)
Каждый клиент, которому нужен доступ к файловому серверу, должен сохранить свои данные безопасности (из файла id_rsa.pub) в файле authorized_keys, поэтому вам следует повторить это для каждого хоста.
Монтирование NFS через SSH на ваших клиентах
Выполните эти команды, чтобы запустить туннели для nfs и mountd:
(синтаксис: ssh -f -c encryption -L localport:nfsserver:nfsport -l username nfsserver remotecommand)
Также обратите внимание, что номер порта для mountd отличается при каждом перезапуске NFS сервера… Имейте это в виду.
ssh -f -i /root/.ssh/id_rsa -c blowfish -L 61001:10.0.0.241:2049 -l sleeper 10.0.0.241 sleep 600d
ssh -f -i /root/.ssh/id_rsa -c blowfish -L 62001:10.0.0.241:2233 -l sleeper 10.0.0.241 sleep 600d
Это создает соединение, которое будет оставаться активным почти 2 года… :)
Теперь отредактируйте ваш fstab и смонтируйте: echo “localhost:/export/data /mnt nfs tcp,rsize=8192,wsize=8192,intr,rw,bg,nosuid,port=61001,mountport=62001,noauto” >> /etc/fstab mount /mnt
Конечно, нам нужно определить некоторые монтируемые папки (общие ресурсы) на NFS сервере:
mkdir /export
mkdir /export/data
mkdir /export/www-virtual
mkdir /export/www-conf
mkdir /export/mail-virtual
mkdir /export/mail-conf
Добавьте их в /etc/exports:
/home/export/data 10.0.0.241(rw,root_squash,sync)Обратите внимание, что IP-адрес - это сам NFS сервер? Это потому, что вы будете монтировать их с localhost, когда установите SSH туннель.
Некоторые настройки безопасности, поскольку мы не хотим, чтобы кто-либо из вне нашей сети получал доступ к серверу: echo “portmap: ALL” > /etc/hosts.deny
echo “portmap: 10.0.0.0/255.255.255.0” > /etc/hosts.allow
Перезапустите NFS: /etc/init.d/nfs-kernel-server restart
Вот и все! Теперь вы можете монтировать файловую систему на ваших клиентах без необходимости вводить пароль. И, конечно, весь трафик будет зашифрован :)
Get new posts in your inbox
No spam. Unsubscribe anytime.