Установка Samba на маршрутизатор с DD-WRT

From DD-WRT Wiki

(Difference between revisions)
Jump to: navigation, search
Revision as of 11:59, 29 December 2008 (edit)
YuriKr (Talk | contribs)

← Previous diff
Current revision (21:21, 4 January 2019) (edit) (undo)
Ian5142 (Talk | contribs)
(Added TOC and headers. Added to Samba Category. Can't merge with another page because it seems to be unique.)
 
(12 intermediate revisions not shown.)
Line 1: Line 1:
 +__TOC__
 +==Установка Samba на маршрутизатор с DD-WRT==
Часто приходится видеть вопрос - "какой беспроводной роутер выбрать для дома?". И чаще всего на него отвечают: ASUS WL-500g Premium. При этом забывают упомянуть, что стоит эта железяка больше $100. Мне это кажется совершенно неоправданным. Более того, можно получить роутер с той же функциональностью и даже построенный на том же чипсете за половину от указанной суммы. Для этого потребуется купить роутер Dlink DIR-320 и воспользоваться приведенной ниже инструкцией. В результате мы получим мощный роутер, который можно использовать не только по прямому назначению, но и установить на него файл-сервер, принт-сервер, torrent-клиент и еще много-много всего. Часто приходится видеть вопрос - "какой беспроводной роутер выбрать для дома?". И чаще всего на него отвечают: ASUS WL-500g Premium. При этом забывают упомянуть, что стоит эта железяка больше $100. Мне это кажется совершенно неоправданным. Более того, можно получить роутер с той же функциональностью и даже построенный на том же чипсете за половину от указанной суммы. Для этого потребуется купить роутер Dlink DIR-320 и воспользоваться приведенной ниже инструкцией. В результате мы получим мощный роутер, который можно использовать не только по прямому назначению, но и установить на него файл-сервер, принт-сервер, torrent-клиент и еще много-много всего.
-Итак, поехали. +==Итак, поехали.==
Line 35: Line 37:
и запускаем его: и запускаем его:
sh /tmp/optware-install.sh sh /tmp/optware-install.sh
-У меня скрипт выдавал ошибку на стадии проверки конфигурации, поэтому я отредактировал его с помощью редактора vi, удалив из него соответствующий раздел. +У меня скрипт выдавал ошибку на стадии проверки конфигурации, поэтому я отредактировал его с помощью редактора vi, удалив из него соответствующий раздел. (См. далее.)
9. Изменяем пути по умолчанию: 9. Изменяем пути по умолчанию:
Line 53: Line 55:
/opt/etc/init.d/S80samba start /opt/etc/init.d/S80samba start
-Если все прошло успешно, веб-интерфейс самбы будет виден по адресу: http://192.168.1.1:901/ +Если все прошло успешно, веб-интерфейс самбы будет виден по адресу:
 +http://192.168.1.1:901/
 +логин root, пароль тот что вы задавали в веб морде dd wrt при первоначальной установке прошивки http://www.dd-wrt.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D1%88%D0%B8%D0%B2%D0%BA%D0%B0_DIR-320
-12. На вкладке Global меняем имя guest account на "root". Настраиваем общий доступ к папкам на вкладке Shares. Проверяем, как все работает. +11.1. Если Ваша подсеть отличается от 1 (например 32), то нужно еще откорректировать файл /opt/etc/xinetd.d/swat, командой:
 + 
 +vi /opt/etc/xinetd.d/swat
 + 
 +по-умолчанию содержимое файла выглядит так:
 + 
 + service swat
 + {
 + port = 901
 + socket_type = stream
 + wait = no
 + only_from = localhost 192.168.1.0/24
 + user = root
 + server = /opt/sbin/swat
 + log_on_failure += USERID
 + disable = No
 + }
 + 
 +Меняем 192.168.1.0 на 192.168.32.0 (для нашего примера), или на Вашу подсеть. И только после этого Вы получите доступ к веб-интерфейсу.
 + 
 +12. Настраиваем общий доступ к папкам на вкладке Shares (спасибо MR. Banan http://www.dd-wrt.com/phpBB2/viewtopic.php?p=249351#249351):
 + 1. заходим в веб интерфейс самбы http://192.168.1.1:901/
 + 2. на вкладке Global Variables меняем строчку Security Options > guest account на root и нажимаем кнопку commit changes
 + 3. на вкладке Share Parameters напротив кнопки create share вводим имя шары (придумываем) и нажимаем эту кнопку.
 + 4. строчкой выше вибираем созданную нами шару
 + 5. вписываем в Base Options>path путь шары (например /jffs) далее устанавливаем:
 + guest account - root
 + read only - no
 + guest ok - yes
 + Затем сохраняем настройки кнопкой commit changes.
 + 
 +Шара из под Windows будет доступна по адресу \\192.168.1.1\имя_шары
 + 
 +Проверяем, как все работает.
13. Теперь нам нужно сделать так, чтобы Самба запускалась автоматически при загрузке роутера. Для этого создаем скрипт optware.startup: 13. Теперь нам нужно сделать так, чтобы Самба запускалась автоматически при загрузке роутера. Для этого создаем скрипт optware.startup:
Line 62: Line 99:
vi /jffs/etc/config/optware.startup vi /jffs/etc/config/optware.startup
-со следующим содержимым: +Управление vi:
 + < Control-[> или клавиша < Esc> - переводят редактор в командный режим
 + a - переход в режим набора методом вставки за текущим символом
 + p - вставить в текущую позицию содержимое неименованного буфера
 + dd - стирание текущей строки
 + 
 +Вставляем из буфера в командном режиме текст со следующим содержимым:
#!/bin/sh #!/bin/sh
&nbsp; &nbsp;
Line 78: Line 121:
fi fi
-и делаем его загрузочным: + :x - выход из редактора с записью, если файл был модифицирован
 + :q или :q! - выход из редактора без сохранения изменений (если есть ошибка в том что вставили)
 + :w или w filename или w! filename - запись файла и возвращение в командный режим
 + 
 +и делаем его исполняемым:
chmod +x /jffs/etc/config/optware.startup chmod +x /jffs/etc/config/optware.startup
 +
 +Также создаем файл /opt/etc/profile
 + vi /opt/etc/profile
 +содержащий следующую строку:
 + export PATH=/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin
14. Для того, чтобы подключенные к роутеру диски корректно отключались при его перезагрузке, добавляем Shutdown скрипт через веб-интерфейс (вкладка Тех. Обслуживание->Команды): 14. Для того, чтобы подключенные к роутеру диски корректно отключались при его перезагрузке, добавляем Shutdown скрипт через веб-интерфейс (вкладка Тех. Обслуживание->Команды):
Line 103: Line 155:
Александр Александр
 +---------
 +Чтобы избавиться от ошибки скрипта (п.8), нужно сделать следующее:
 +Открываем скрипт для редактирования:
-'''Источник:'''+ vi /tmp/optware-install.sh
 + 
 +и удаляем блок, отвечающий за проверку конфигурации:
 + 
 + _check_config()
 + {
 + echo "Checking system config ..."
 + GATEWAY=$(netstat -rn |
 + sed -n 's/^0.0.0.0[ \t]\{1,\}\([0-9.]\{8,\}\).*/\1/p' )
 + if [ -n "${GATEWAY}" ]; then
 + echo "Using ${GATEWAY} as default gateway."
 + else
 + echo "Error: No default gateway set!"
 + exit 2
 + fi
 + if [ -s /etc/resolv.conf ]; then
 + echo "Using the following nameserver(s):"
 + if grep nameserver /etc/resolv.conf ; then
 + GATEWAY_SUBNET=$(echo "${GATEWAY}" |
 + sed 's/\.[0-9]\{1,3\}\.[0-9]\{1,3\}$//')
 + if [ "${GATEWAY_SUBNET}" = "192.168" ]; then
 + if grep -q ${GATEWAY} /etc/resolv.conf ; then
 + echo "Gateway ${GATEWAY} is also nameserver."
 + else
 + echo "Warning: local nameserver is different than gateway!"
 + echo "Check config or enter:"
 + if test -L /etc/resolv.conf ; then
 + echo " sed -i s/192.168.*/${GATEWAY}/ /tmp/resolv.conf"
 + else
 + echo " sed -i s/192.168.*/${GATEWAY}/ /etc/resolv.conf"
 + fi
 + echo "and try again."
 + fi
 + fi
 + else
 + echo "Error: No nameserver specified in /etc/resolv.conf"
 + exit 5
 + fi
 + else
 + echo "Error: Empty or nonexistent /etc/resolv.conf"
 + exit 3
 + fi
 + if mount | grep -q /opt ; then
 + [ -d /opt/etc ] && echo "Warning: /opt partition not empty!"
 + else
 + echo "Error: /opt partition not mounted."
 + echo "Enter"
 + echo " mkdir /jffs/opt"
 + echo " mount -o bind /jffs/opt /opt"
 + echo "to correct this."
 + exit 4
 + fi
 + }
 + 
 +и его вызов в конце скрипта:
 + _check_config
 + 
 +------
 + 
 +==Источник:==
# http://www.dd-wrt.com/phpBB2/viewtopic.php?t=43886 # http://www.dd-wrt.com/phpBB2/viewtopic.php?t=43886
 +# http://www.dd-wrt.com/phpBB2/viewtopic.php?p=239807#239807
 +# http://www.dd-wrt.com/phpBB2/viewtopic.php?p=246634#246634
 +# http://www.dd-wrt.com/phpBB2/viewtopic.php?p=249351#249351
 +
 +[[Category:Русская документация]]
 +[[Category:Samba]]

Current revision

Contents

[edit] Установка Samba на маршрутизатор с DD-WRT

Часто приходится видеть вопрос - "какой беспроводной роутер выбрать для дома?". И чаще всего на него отвечают: ASUS WL-500g Premium. При этом забывают упомянуть, что стоит эта железяка больше $100. Мне это кажется совершенно неоправданным. Более того, можно получить роутер с той же функциональностью и даже построенный на том же чипсете за половину от указанной суммы. Для этого потребуется купить роутер Dlink DIR-320 и воспользоваться приведенной ниже инструкцией. В результате мы получим мощный роутер, который можно использовать не только по прямому назначению, но и установить на него файл-сервер, принт-сервер, torrent-клиент и еще много-много всего.


[edit] Итак, поехали.

1. Скачиваем прошивку DD-WRT_mini_usb Eko c сайта dd-wrt.com

2. Прошиваем девайс согласно инструкции.

3. Если роутер прошился и работает - возрадуйтесь, половина дела сделана. Теперь настраиваем подключение к интернет и изучаем веб-интерфейс прошивки. Инструкция для поключения к Корбине (годится и для других провайдеров с PPTP Dual Access) здесь: http://homenet.corbina.net/index.php?showtopic=87133

4. Через Веб-интерфейс включаем поддержку JFFS2 (вкладка Тех. Обслуживание->Управление) и поддержку USB (вкладка Службы->Службы). В этом разделе включаем все пункты, кроме поддержки USB 1.1 (UHCI) и поддержки USB 2.0 (последнее, в принципе, работает, но глючно)

5. Подключаем к роутеру флешку или HDD с USB-интерфейсом. Если планируется подключение принтера и/или нескольких дисков, используем USB-хаб. Встроенная памаять роутера всего 4 МБ, и большая ее часть используется прошивкой, поэтому часть подключенной флешки или диска будет использована для установки дополнительных компонентов. Желательно выделить для этих целей отдельную партицию на диске или даже целую флешку, которая будет подключена к роутеру "на веки вечные". Флешку или партицию форматируем в ext.3. Под Windows, к сожалению, это сделать невозможно, поэтому ищем компьютер с линуксом или качаем образ Live CD. Я использовал Xubuntu: http://xubuntu.com/. Также можно использовать GParted Live CD (спасибо YuriKr): http://sourceforge.net/project/showfiles.php?group_id=115843&package_id=271779 или Paragon Hard Disk Manager (спасибо stylus)
Примечание: форматировать в ext.3 остальные партиции необязательно, роутер отлично работает с FAT.

6. Подключаемся к роутеру телнетом, вводим команду dmesg и ищем строки типа

/dev/scsi/host0/bus0/target0/lun0: p1 

если используется диск с несколькими партициями, то будет что-то вроде:

/dev/scsi/host0/bus0/target0/lun0: p1 p2 p3 

Это "внутренний" адрес флешки. Теперь нужно подключить ее к встроенной памяти роутера:

mount -o noatime /dev/scsi/host0/bus0/target0/lun0/part1 /jffs 

Чтобы подключение происходило автоматически при загрузке роутера, добавляем эту команду в Параметры запуска через веб-интерфейс (вкладка Тех. Обслуживание->Команды). Проверяем, подключилаcь ли флешка, командой df. Если флешка подключилась, вы увидите что-то вроде:

/dev/scsi/host0/bus0/target0/lun0/part1 233333 33365 187921 15% /jffs 

также увеличенный размер JFFS будет виден через веб-интерфейс на вкладке Статус

7. Для расширения функциональности роутера используем пакеты Optware. Сначала подготавливаем место для их установки:

mkdir /jffs/opt 
mount -o bind /jffs/opt /opt 

8. Скачиваем установочный скрипт:

wget http://www.3iii.dk/linux/optware/optware-install-ddwrt.sh -O - | tr -d "\r" > /tmp/optware-install.sh 

и запускаем его:

sh /tmp/optware-install.sh 

У меня скрипт выдавал ошибку на стадии проверки конфигурации, поэтому я отредактировал его с помощью редактора vi, удалив из него соответствующий раздел. (См. далее.)

9. Изменяем пути по умолчанию:

export PATH=/opt/bin:/opt/sbin:$PATH 
unset LD_LIBRARY_PATH 

10. Список пакетов Optware можно получить командой

ipkg-opt list | more 

Мне необходим Самба сервер для доступа к дискам, подключенным к роутеру и принт-сервер p910nd. Для примера рассмотрим настройку и установку самбы.

11. Скачиваем необходимые пакеты, устанавливаем и запускаем их:

/opt/bin/ipkg-opt update 
/opt/bin/ipkg-opt remove samba 
/opt/bin/ipkg-opt install samba2 
/opt/bin/ipkg-opt install xinetd 
/opt/etc/init.d/S10xinetd start 
/opt/etc/init.d/S80samba start 

Если все прошло успешно, веб-интерфейс самбы будет виден по адресу: http://192.168.1.1:901/ логин root, пароль тот что вы задавали в веб морде dd wrt при первоначальной установке прошивки http://www.dd-wrt.com/wiki/index.php/%D0%9F%D1%80%D0%BE%D1%88%D0%B8%D0%B2%D0%BA%D0%B0_DIR-320

11.1. Если Ваша подсеть отличается от 1 (например 32), то нужно еще откорректировать файл /opt/etc/xinetd.d/swat, командой:

vi /opt/etc/xinetd.d/swat

по-умолчанию содержимое файла выглядит так:

       service swat
       {
             port    = 901
             socket_type     = stream
             wait    = no
             only_from = localhost 192.168.1.0/24
             user    = root
             server  = /opt/sbin/swat
             log_on_failure  += USERID
             disable =  No
         }

Меняем 192.168.1.0 на 192.168.32.0 (для нашего примера), или на Вашу подсеть. И только после этого Вы получите доступ к веб-интерфейсу.

12. Настраиваем общий доступ к папкам на вкладке Shares (спасибо MR. Banan http://www.dd-wrt.com/phpBB2/viewtopic.php?p=249351#249351):

1. заходим в веб интерфейс самбы http://192.168.1.1:901/
2. на вкладке Global Variables меняем строчку Security Options > guest account на root и нажимаем кнопку commit changes
3. на вкладке Share Parameters напротив кнопки create share вводим имя шары (придумываем) и нажимаем эту кнопку.
4. строчкой выше вибираем созданную нами шару
5. вписываем в Base Options>path путь шары (например /jffs) далее устанавливаем:
guest account - root
read only - no
guest ok - yes
Затем сохраняем настройки кнопкой commit changes.

Шара из под Windows будет доступна по адресу \\192.168.1.1\имя_шары

Проверяем, как все работает.

13. Теперь нам нужно сделать так, чтобы Самба запускалась автоматически при загрузке роутера. Для этого создаем скрипт optware.startup:

mkdir /jffs/etc 
mkdir /jffs/etc/config 
vi /jffs/etc/config/optware.startup 

Управление vi:

< Control-[> или клавиша < Esc> - переводят редактор в командный режим
a - переход в режим набора методом вставки за текущим символом
p - вставить в текущую позицию содержимое неименованного буфера
dd - стирание текущей строки

Вставляем из буфера в командном режиме текст со следующим содержимым:

#!/bin/sh 
 
mount -o bind /jffs/opt /opt 
 
unset LD_LIBRARY_PATH 
unset LD_PRELOAD 
 
[ -e /opt/etc/profile ] && mount -o bind /opt/etc/profile /etc/profile 
 
if [ -d /opt/etc/init.d ]; then 
for f in /opt/etc/init.d/S* ; do 
[ -x $f ] && $f start 
done 
fi 
:x - выход из редактора с записью, если файл был модифицирован
:q или :q! - выход из редактора без сохранения изменений (если есть ошибка в том что вставили)
:w или w filename или w! filename - запись файла и возвращение в командный режим 

и делаем его исполняемым:

chmod +x /jffs/etc/config/optware.startup 

Также создаем файл /opt/etc/profile

vi /opt/etc/profile

содержащий следующую строку:

export PATH=/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/sbin 

14. Для того, чтобы подключенные к роутеру диски корректно отключались при его перезагрузке, добавляем Shutdown скрипт через веб-интерфейс (вкладка Тех. Обслуживание->Команды):

umount /mnt & 
umount /opt & 
umount /jffs & 
sleep 2 

15. Перезагружаем роутер и наслаждаемся результатами.


Сразу скажу, что перед тем, как я познакомился с DD-WRT, мои знания о линуксе были равны нулю, да и сейчас не сильно увеличились. Конечно, опытный линуксовод сделает все сам без проблем, поэтому данная инструкция предназначена скорее для таких же чайников, как я сам - надеюсь, она поможет кому-то сэкономить время и немного денег. Если ее недостаточно, дополнительную информацию можно получить в DD-WRT Wiki:

http://www.dd-wrt.com/wiki/index.php/Optware

и в форумах на том же сайте.


Буду благодарен за отзывы и комментарии


asmedin[жывотное]gmail.com
Александр


Чтобы избавиться от ошибки скрипта (п.8), нужно сделать следующее:

Открываем скрипт для редактирования:

vi /tmp/optware-install.sh 

и удаляем блок, отвечающий за проверку конфигурации:

_check_config() 
{ 
echo "Checking system config ..." 
GATEWAY=$(netstat -rn | 
sed -n 's/^0.0.0.0[ \t]\{1,\}\([0-9.]\{8,\}\).*/\1/p' ) 
if [ -n "${GATEWAY}" ]; then 
echo "Using ${GATEWAY} as default gateway." 
else 
echo "Error: No default gateway set!" 
exit 2 
fi 
if [ -s /etc/resolv.conf ]; then 
echo "Using the following nameserver(s):" 
if grep nameserver /etc/resolv.conf ; then 
GATEWAY_SUBNET=$(echo "${GATEWAY}" | 
sed 's/\.[0-9]\{1,3\}\.[0-9]\{1,3\}$//') 
if [ "${GATEWAY_SUBNET}" = "192.168" ]; then 
if grep -q ${GATEWAY} /etc/resolv.conf ; then 
echo "Gateway ${GATEWAY} is also nameserver." 
else 
echo "Warning: local nameserver is different than gateway!" 
echo "Check config or enter:" 
if test -L /etc/resolv.conf ; then 
echo " sed -i s/192.168.*/${GATEWAY}/ /tmp/resolv.conf" 
else 
echo " sed -i s/192.168.*/${GATEWAY}/ /etc/resolv.conf" 
fi 
echo "and try again." 
fi 
fi 
else 
echo "Error: No nameserver specified in /etc/resolv.conf" 
exit 5 
fi 
else 
echo "Error: Empty or nonexistent /etc/resolv.conf" 
exit 3 
fi 
if mount | grep -q /opt ; then 
[ -d /opt/etc ] && echo "Warning: /opt partition not empty!" 
else 
echo "Error: /opt partition not mounted." 
echo "Enter" 
echo " mkdir /jffs/opt" 
echo " mount -o bind /jffs/opt /opt" 
echo "to correct this." 
exit 4 
fi 
} 

и его вызов в конце скрипта:

_check_config

[edit] Источник:

  1. http://www.dd-wrt.com/phpBB2/viewtopic.php?t=43886
  2. http://www.dd-wrt.com/phpBB2/viewtopic.php?p=239807#239807
  3. http://www.dd-wrt.com/phpBB2/viewtopic.php?p=246634#246634
  4. http://www.dd-wrt.com/phpBB2/viewtopic.php?p=249351#249351