Тема: Устанавливаем OpenVPN сервер на Synology
Введение
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 (optware).
Дальнейшая установка крайне проста. Достаточно выполнить команду
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.