Ноя
28
2009
По давней и не очень хорошей привычке (еще
с тех пор когда в доме водились компьютеры с Windows системами) я
использую для организации домашней сети SAMBA. Причины просты, хорошо
знакомы большинство настроек, хорошая совместимость с Windows
системами. Вот и на днях стала задача, быстро и без проблем расшарить
несколько папок с головного компьютера. По привычки и примутил SAMBA.
Но так уж получилось, что разработчики Ubuntu сейчас немного заняты и
им некогда обращать внимание на такие мелочи как говёно работающая
SAMBA между Linux машинами с предустановленной Ubuntu 9.10 на обоих. И
если на 9.04 нареканий не было то на 9.10 мне удалось завести херова
работающую Самбу после часа мучений. Я считаю это полный непорядок. Это
при том, что я даже не брезговал настраивать Самбу с помощью GUI
утилиты system-config-samba, которая до селе прекрасно справлялось с
поставленной перед ней задачей. Короче я взбесился, накатал длиннющий
bug-report разработчикам и подумал о других путях организации домашней
сети. Что из этого вышло читаем ниже.
Понятное дело, на что, стразу упал взгляд. Это NFS – Network File System,
хреновена из начально придуманная Sun Microsystems. Далее как по
учебнику, первым делом я полез на Википедию, почитать что за зверь
такой, проникнуться историей создания и т.д. Сказать что в русской
Википедии статья о NFS херовая, значит ничего не сказать. Из трёх
строчек понятное дело тяжело что либо понять.
Здесь стоит сделать отступление. Я никогда не занимался настройкой
сети Linux — Linux. Это всегда были сети типа Windows — Linux ну или
наоборот. По этому для меня NFS штука новая и от того еще более
интересная.
Далее я побрел на официальный сайт и по дороге заглянул на сайт NFS for FreeBSD.
Убедившись что сайт на английском языке, а мне на тот момент было в
падло изучать 100 страничный мануал, нужно было просто папку расшарить.
И я начал искать что же пишут об NFS в русскоязычном интернете. По
началу я обрадовался огромному количеству how to однако после посещения
уже третьего сайта стало понятно весь русский инет забит скопированным
было how to который даже у школьника вызовет истерический хохот. Это
было уже не смешно, все, абсолютно все блоги забиты одним и тем же
copy\past гавном написанным тучу лет тому назад.
Сложилось такое впечатление, что английский это язык Атлантиды и на
нем говорят гумоноиды, неужели так трудно написать хоть одно
человеческое how to, подробное и работающее. Пришлось возвратиться к
офф. сайту и начать штудировать how to.
Установка NFS пакетов
Лезем в репозитарий Убунты и смотрим чего там есть полезного:
$ aptitude search nfs v nfs-client - i nfs-common - NFS support files common to client and server i nfs-kernel-server - support for NFS kernel server v nfs-server -
Это именно то, что нужно, ставим (и на клиенте и на сервере):
$ sudo aptitude isntall nfs-server nfs-kernel-server nfs-common nfs-client
Настройка сервера
Создаем папку которую будем расшаривать (если еще нет)
user@server:$ mkdir share
Правим файл /etc/exports:
user@server$ sudo nano /etc/exports /home/user/share/ 192.168.1.102(rw,sync,no_subtree_check)
Опции доступа:
/home/user/share/ – расшариваемая папка на сервере
192.168.1.102 – IP адрес компьютера которому будет предоставлен доступ к шаре.
Открыть доступ всем машинам в сети:
/home/user/share/ *(rw,sync,no_subtree_check)
Открыть доступ нескольким машинам в сети:
/home/user/share/ 192.168.1.101(rw,sync,no_subtree_check) 192.168.1.102(ro,sync,no_subtree_check)
Обратите внимание, что машине 192.168.1.101 достались права на чтение\запись, а машине 192.168.1.102 только на чтение.
Можно пойти еще дальше и дать доступ к шаре целой сети:
/home/user/share/ 192.168.0.0/255.255.255.0(rw,sync,no_subtree_check)
rw – дать права на запись\чтение
ro – дать права только на чтение
no_root_squash – рут на клиентской машине имеет тот
уровень доступа к файлам в расшариной паке, что и рут на сервере. По
умолчанию опция отключена, так как представляет собой реальную угрозу
безопасности.
no_subtree_check – если монтируется только часть тома,
то сервер будет выполнять проверку принадлежности файла запрошенного
клиентом, именно к той части с тома которая примонтирована. Это
замедляет передачу данных, по этому зачастую данная опция включена в
список параметров, как у меня выше. Т.е. эта опция блокируют проверку,
за ее не надобностью.
sync – синхронное поведение файловой системы по
отношению к клиенту и серверу. (грубо говоря в режиме реального
времени, закинул файл в шару на серваке и вы тут же его видите на
клиенте)
async – асинхронное поведение файловой системы по отношению к клиенту и серверу.
Список хостов, доступ которым разрешен к системе, обратный файл это /etc/hosts.deny
Правим файл /etc/hosts.allow
user@server$ sudo nano /etc/hosts.allow portmap: 192.168.1.102/24 lockd: 192.168.1.102/24 rquotad: 192.168.1.102/24 mountd: 192.168.1.102/24 statd: 192.168.1.102/24
Рестартуем сервер:
user@server$ sudo /etc/init.d/nfs-kernel-server restart
Если вы внесли какие либо изменения в файл /etc/exports, нет необходимости рестартовать сервер, достаточно выполнить:
и новые настройки вступят в силу.
Настройка клиента
Настройка клиента заключается по сути в том, что бы создать точку
монтирования удаленной файловой системы и правильно выполнить
монтирование.
Создаем точку монтирования:
user@client$ mkdir /home/user/data/
Монтируем удаленную файловую систему:
user@client$ sudo mount.nfs 192.168.1.100:/home/booch/share /home/mothes/data/ -rw
Опции монтирования:
Тут все понятно, 192.168.1.100 – адрес сервера.
/home/booch/share – папка на сервере которую надо прикрутить.
/home/mothes/data/ – папка куда монтируем на клиенте.
-rw – монтируем файловую систему с правами доступа чтение\запись.
Тут стоит обратить внимание, что даже если на серваке папка открыта
с правами rw, вы из соображений безопасности можете прикрутить папку
только в режиме чтения.
Готово. УФС подмантировалась успешно, можно работать.
Дополнительные опции
Проверить что NFS запущена можно командой:
rpcinfo -p program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 41419 status 100024 1 tcp 47959 status 100021 1 udp 39786 nlockmgr 100021 3 udp 39786 nlockmgr 100021 4 udp 39786 nlockmgr 100021 1 tcp 39968 nlockmgr 100021 3 tcp 39968 nlockmgr 100021 4 tcp 39968 nlockmgr 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100005 1 udp 59137 mountd 100005 1 tcp 53161 mountd 100005 2 udp 59137 mountd 100005 2 tcp 53161 mountd 100005 3 udp 59137 mountd 100005 3 tcp 53161 mountd
Если вам надо, чтобы УФС монтировалась автоматически после загрузки системы правим /etc/fstab
Сделать это можно вот так:
# device mountpoint fs-type options dump fsckorder ... /home/user/ /mnt nfs rw 0 0 ...
Или вот так:
# device mountpoint fs-type options dump fsckord ... /home/user/ /mnt/home nfs rw,hard,intr 0 0 ...
Второй вариант использует опцию hard, с ней надо быть поосторожней,
так как это «жесткое» монтирование. Отвалиться сервак = зависнет
клиент.
Проверить качество соединения:
tracepath 192.168.1.100 1: alexlinux.local (192.168.1.100) 0.192ms pmtu 16436 1: alexlinux.local (192.168.1.100) 0.084ms reached 1: alexlinux.local (192.168.1.100) 0.080ms reached Resume: pmtu 16436 hops 1 back 64
Где 192.168.1.100 IP сервера или клиента.
Просмотреть загруженность сети (полезно если много шар и большой файлообмен)
Проброс по SSH:
Первое нужно добавить localhost:
user@server:$ sudo nano /etc/exports /home 127.0.0.1(rw)
Далее выполняем на клиентской машине проброс:
user@client:$ ssh root@192.168.0.42 -L 250:localhost:2049 -f sleep 60m user@client:$ ssh root@192.168.0.42 -L 251:localhost:32767 -f sleep 60m
192.168.0.42 – IP адрес сервера.
250 – порт на клиенте
2049 – порт на сервера
Вы можете менять порты, поставив свои.
-f sleep 60m – хитрючая команда, которая позволяет присоединиться к
серверу в режиму background, т.е. не открывать там Shell и не сообщать
о своем присутствии. Т.е. Shell у нас будет открыт со стороны клиента.
Т.е. все команды будут выполняться в режиме background на сервере.
Соединение будет удерживаться в течении 60 минут.
Монтируем УФС на клиенте:
user@client:$ sudo nano /etc/fstab localhost:/home /mnt/home nfs rw,hard,intr,port=250,mountport=251 0 0
Прочесть больше о пробросе NFS через SSH можно тут Источник
|