Openvpn
Материал из SynologyWiki
Содержание |
[править] Устанавливаем OpenVPN сервер на DiskStation
[править] Введение
VPN (сокр. от Virtual Private Network, Виртуальная частная сеть) - технология, изначально разработанная для того, чтобы позволить безопасно взаимодействовать компьютерам, расположенным в разных местах, так, как будто они расположены в одной частной сети. OpenVPN — свободная реализация этой технологии.
[править] Полезные ссылки
1. http://forum.ixbt.com/topic.cgi?id=14:40906#1
2. http://forum.ixbt.com/topic.cgi?id=14:49976
[править] Проверяем возможность установки
Последние версии прошивок Synology уже идут с необходимым модулем ядра. Модуль tun.ko находится в папке /lib/modules. Проверьте это в консоли [PuTTY]:
ls /lib/modules/tun.ko /lib/modules/tun.ko
Если команда ls вернет
ls: /lib/modules/tun.ko: No such file or directory
установите свежую прошивку.
Примечание: Ядро Synology не поддерживает L2 мосты openvpn. Настройка OpenVPN возможна только в режиме L3 туннеля dev tun.
[править] Устанавливаем пакет OpenVPN
Для установки OpenVPN на DiskStation прежде всего нужно установить IPKG.
Дальнейшая установка крайне проста. Достаточно выполнить команду
ipkg install openvpn
[править] Генерация ключей (сертификатов)
Процесс генерации ключей openvpn многократно описан на многих ресурсах. На мой взгляд проще это сделать на windows машине или linux станции. После генерации ключей перенесем нужные ключи на synology и поместим в папку
/opt/etc/openvpn
[править] Создаем скрипт запуска OpenVPN
Скрипт запуска openvpn (Sxxopenvpn.sh, где xx - цифры определяющие порядок запуска скриптов) должен быть исполняемым и расположен в папке /opt/etc/init.d Содержимое скрипта приблизительно такое:
#!/bin/sh MODULES_BASE="/lib/modules" KERNEL_VERSION=`uname -r` case "$KERNEL_VERSION" in "2.6.24") KERNEL_MODULES_OPENVPN="tun.ko" ;; esac success() { [ -n $1 ] && echo "success" || echo "$1: success" } failure() { [ -n $1 ] && echo "failed" || echo "$1: failed" } insmod_syno() { local modules=$1 local mod local err=0 for mod in $modules; do echo -n "$mod: " /opt/sbin/insmod ${MODULES_BASE}/${mod} > /dev/null 2>&1 ret=$? [ $ret -eq 0 ] && success $mod || failure $mod err=`expr $err + $ret`; done return $err } rmmod_syno() { local modules=$1 local mod local err=0 for mod in $modules; do echo -n "$mod: " /opt/sbin/rmmod ${MODULES_BASE}/${mod} > /dev/null 2>&1 ret=$? [ $ret -eq 0 ] && success $mod || failure $mod err=`expr $err + $ret`; done return $err } start() { local ret=0; echo "" echo "Loading OpenVPN kernel modules:" insmod_syno "$KERNEL_MODULES_OPENVPN" # Make sure IP forwarding is enabled echo 1 > /proc/sys/net/ipv4/ip_forward # echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp # Make device if not present (not devfs) if ( [ ! -c /dev/net/tun ] ) then # Make /dev/net directory if needed if ( [ ! -d /dev/net ] ) then mkdir -m 755 /dev/net fi mknod /dev/net/tun c 10 200 fi echo "" echo -n "Starting OpenVPN in daemon mode...." /opt/sbin/openvpn --cd /opt/etc/openvpn --daemon --config /opt/etc/openvpn/myconf.ovpn --script-security 2 --log-append /opt/var/log/openvpn/openvpn.log > /dev/null 2>&1 ret=$? [ $ret -eq 0 ] && success || failure err=`expr $err + $ret`; return $err } stop() { echo "" echo -n "Killing OpenVPN processes...." if [ -n "`pidof openvpn`" ]; then /usr/bin/killall openvpn 2>/dev/null fi ret=$? [ $ret -eq 0 ] && success || failure sleep 1 echo "" echo "Unloading OpenVPN kernel modules... " rmmod_syno "$KERNEL_MODULES_OPENVPN" return $ret } restart() { stop sleep 3 start } case "$1" in start) start RETVAL=$? ;; stop) stop RETVAL=$? ;; restart) restart RETVAL=$? ;; *) echo $"Usage: ${0##*/} {start|stop|restart}" RETVAL=2 ;; esac exit $RETVAL
Примечание: Если Вы собираетесь выделять для OpenVPN клиентов небольшой диапазон адресов из своей локальной-квартирной сети - раскоментируйте строку
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
Выделять диапазон адресов из своей сети имеет смысл для обхода spi файрвола на домашнем маршрутизаторе.
[править] Создаем файл конфигурации
Как видно из скрипта запуска, в данном случае используется файл конфигурации /opt/etc/openvpn/myconf.ovpn Создадим его и отредактируем. Мой файл конфигурации такой
port YYYY proto udp dev tun ca ca.crt cert NAS.crt key NAS.key dh dh1024.pem topology subnet local <тут локальный ip synology> server <ip openvpn серевера> <маска подсети> push "route <внутренний ip домашней сети> <маска домашней сети>" client-to-client keepalive 20 180 comp-lzo max-clients 10 user nobody group nobody persist-key persist-tun status openvpn-status.log log-append openvpn.log verb 3 mute 20
Примечание 1: Использование строки "topology subnet" экономит ip адреса. На клиентах должна быть при этом установлена свежая версия openvpn (клиента).
Примечание 2: Если адреса для openvpn клиентов выделяются из диапазона квартирной сети, следует использовать маску с небольшим числом адресов, например, 255.255.255.240.
Примечание 3: ca.crt, NAS.crt, NAS.key,dh1024.pem - это файлы с сертификатами, созданные ранее.
Примечание 4: YYYY - это номер порта, который слушает сервер. Можно выбрать любой, стандартом является 1194. Он должен быть проброшен на Вашем роутере.
[править] Запускаем OpenVPN сервер
Для запуска OpenVPN сервера выполним команду
/opt/etc/init.d/Sxxopenvpn.sh start
где xx выбранные цифры. Проверяем, что в файле /opt/etc/openvpn/openvpn.log нет сообщение об ошибках. Если ошибки есть, останавливаем сервер
/opt/etc/init.d/Sxxopenvpn.sh stop
исправляем ошибки и запускаем заново.
Примечание При перезагрузке synology openvpn сервер будет запускаться автоматически.
[править] Настраиваем OpenVPN-клиент
[править] Скачиваем и устанавливаем клиента под Windows
Последние версии OpenVPN под Windows уже содержат GUI (графическую оболочку) для запуска OpenVPN. Скачайте и установите версию под Windows с сайта http://openvpn.net/, если Вы не сделали этого ранее для генерации ключей.
[править] Создаем файл конфигурации для клиента
В папке <X>:\Program Files\OpenVPN\config создадим файл nas_client.ovpn с таким содержанием
client dev tun proto udp remote <внешний ip или ddns имя вашего сервера> YYYY resolv-retry infinite nobind ca "<X>:\\Program Files\\OpenVPN\\config\\nas\\ca.crt" cert "<X>:\\Program Files\\OpenVPN\\config\\nas\\work.crt" key "<X>:\\Program Files\\OpenVPN\\config\\nas\\work.key" comp-lzo verb 3
Тут .crt и .key - файлы с сертификатами клиента, созданные ранее. YYYY - номер порта.
[править] Соединение с сервером
Если клиент установлен под Windows, запускаем утилиту "OpenVPN GUI". В трее появится соответсвующий значок. Выберем правой кнопкой мыши файл конфигурации (nas_client). Файлов конфигурации может быть много. Если файл один - то выбирать не нужно. Далее выберем connect. Если соединение будет успешным - иконка OpenVPN GUI позеленеет. Вы успешно установили зашифрованный канал в свою домашнюю сеть.
Если соединения не произойдет - анализируем логи.
Теперь мы можем управлять DS по адресу <локальный ip в вашей домашней сети>:5000. Доступ к расшаренным папкам DS и домашних компов может быть осуществлен по внутренним ip (не по именам).
Использованы материалы форума http://forum.synology.com/enu/index.php и скрипт dino.
--Zyxmon 10:08, 23 июля 2010 (UTC)