Всем добрый вечер!
Задался той же проблемой что и уважаемый Chiller.
Действительно недавно вышел клиент для iOS. Есть определенные нюансы в настройке подключения к OpenVPN серверу. И да, он не принимает те сертификаты и ключи которые лежат на сервере в /var/packages/VPNCenter/target/etc/openvpn/keys/. В этой папке лежат все конфиги, ключи и сертификаты для iOS, Android, Mobile, PC ...
Хочу сразу оговорится, я не профессионал в этих вопросах, но расскажу обо всех проблемах с которыми столкнулся и о том как получилось их решить. Поэтому не обессудьте и не пинайте слишком сильно.
Потратил на разбор забугорных форумов несколько дней (вечеров), испробовал несколько разных вариантов - но помог только один.
ОГРОМНОЕ спасибо умным людям:
http://synology.forum/wiki/index.php/Openvpn
http://habrahabr.ru/post/168853/
https://www.kolja-engelmann.de/blog/2013/01...te-x509-fehler/
http://forum.synology.com/enu/viewtopic.ph...78&start=15
http://frednotes.wordpress.com/2013/02/09/...dsm4-2-and-vpn/
http://forum.synology.com/enu/viewtopic.ph...78&start=15
У меня - DS112j, DSM4.2, iPhone 5, iPad mini, iOS 6.1.2 - везде заработало.
Для чего это нужно?
Я думаю каждый для себя определит сам.
Но вариантов много, как например: закрыть все порты на роутере извне (в целях безопасности), оставить какой нибудь "левый" один порт, пробросить на роутере на порт, нужный для коннекта к OpenVPN серверу (1194), и радоваться БЕЗОПАСНЫМ доступом ко всей локалке домашней. Также можно использовать сервер для выхода в нет в местах халявного доступа к Вай Фай или наоборот на работе, где все порты закрыты, GRE тоже закрыт (тунель не прокинуть) и есть всего пара открытых портов типа 80, 443, 53.
Какие могут возникнуть проблемы:
1)Если например использовать ключи, сертификаты и конфиги которые есть на DS, то вы получите почти 100 процентно следующую ошибку:
Transport Error: PolarSSL: SSL read error : X509 - Certificate verification failed, e.g. CRL, CA or signature check failed
2)Потом еще могут быть проблемы при передаче файла конфига для iOS-клиента и сертификата к нему. Дело в том что "можно" передать их отдельно конфиг и отдельно сертификат по почте например или через тунца, но у меня например так и не получилось. Согласно посту на ХАБРЕ нужно упаковать ios.crt, ios_rsa.key, ca.crt в ios.p12, эдакий контейнер понятный для iOS. Но во всех случаях получал либо первую ошибку, либо невозможно было выбрать сертификат в OpenVPN-клиенте, то есть сертификат устанавливался в систему, но в выборе го не было.
3)Также могут возникнуть проблемы с таймаутом (это когда у вас нет проблем с сертификатами и ключами):
EVENT: CONNECTION_TIMEOUT [ERR]
EVENT: DISCONNECTED
4)Многим нужен не просто доступ в свою локалку, но и чтобы ИП на выходе светился "домашний".
Начнем с банального:
1) Перво наперво, заходим в наш DS -> Центр пакетов.
2) Качаем и устанавливаем OpenVPN сервер.
3) Включаем его и делаем банальные настройки, как это описано здесь - http://www.synology.com/support/tutorials_show.php?q_id=459
4) Теперь нам нужно зайти в DS, через терминал, для этого качаем например PuTTY или SequreCRT. Устанавливаем, запускаем и устанавливаем соединение под рутом, так как многие команды там будет не выполнить без прав рута. Не забудьте в Панели управления DS включить службу ssh.
ИП(DS)192.168.0.100 (в моем случае), протокол ssh, порт 22.
login as: root
[email protected]'s password:
5) Нужно поправить конфиг СЕРВЕРА.
Переходим в папку с конфигом
cd /usr/syno/etc/packages/VPNCenter/openvpn/
дальше открываем его редактором
vi openvpn.conf
Теперь нужно поправить в конфиге все так как описано ниже (то есть нужно закомментировать "родные" пути к ключам и сертификатам и прописать "наши" пути)
------------------------------------------------
push "route 192.168.0.0 255.255.255.0"
push "route 192.168.1.0 255.255.255.0"
dev tun
management 127.0.0.1 1195
server 192.168.1.0 255.255.255.0
dh /var/packages/VPNCenter/target/etc/openvpn/keys/dh1024.pem
ca /usr/syno/etc/packages/VPNCenter/openvpn/keys/my-ca.crt
cert /usr/syno/etc/packages/VPNCenter/openvpn/keys/syn.crt
key /usr/syno/etc/packages/VPNCenter/openvpn/keys/syn.key
#ca /var/packages/VPNCenter/target/etc/openvpn/keys/ca.crt
#cert /var/packages/VPNCenter/target/etc/openvpn/keys/server.crt
#key /var/packages/VPNCenter/target/etc/openvpn/keys/server.key
max-clients 3
comp-lzo
persist-tun
persist-key
verb 3
log-append /var/log/openvpn.log
keepalive 10 60
#Здесь решается проблема №3, выставляем 3600
reneg-sec 3600
plugin /var/packages/VPNCenter/target/lib/radiusplugin.so /var/packages/VPNCenter/target/etc/openvpn/radiusplugin.cnf
client-cert-not-required
username-as-common-name
duplicate-cn
--------------------------------------------------
6) Чтобы продолжить работу нам понадобится конфиг файл для openssl.
Делаем следующее.
Лезем в папку
cd /usr/syno/
Создаем папку
mkdir ssl
Переходим в нее
cd ssl
Качаем конфиг файл
wget http://123adm.free.fr/home/pages/documents...ers/openssl.cnf
7) Теперь нужно поправить этот конфиг под нас.
vi openssl.cnf
-----------------------------------------------------------------------
####################################################################
[ CA_default ]
dir = /volume1/share/ # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/my-ca.crt # The CA certificate
serial = $dir/serial # The current serial number
#crlnumber = $dir/crlnumber # the current crl number must be
# commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/my-ca.key # The private key
RANDFILE = $dir/private/.rand # private random number file
x509_extensions = usr_cert # The extentions to add to the cert
............
default_days = 36500 # how long to certify for
---------------------------------------------------------------------
8) Теперь нужно создать еще несколько папок
cd /
mkdir /volume1/share/
mkdir /volume1/share/newcerts/
mkdir /volume1/share/private/
9) Лезем в папку и создаем там два файла, один пустой, а во второй нужно будет добавить текст - 01
cd volume1/share/
touch index.txt (этот файл оставляем пустым)
touch serial (сюда добавляем текст - 01)
10) Создаем свой собственный сертификат и закрытый ключ сроком на 10 лет
Убедитесь что находитесь в папке /volume1/share/
cd /volume1/share/
при этом отвечаем на все вопросы
openssl req -nodes -new -x509 -keyout my-ca.key -out my-ca.crt -days 3650
11) Дальше копируем созданный ключ my-ca.key в /volume1/share/private/
cp my-ca.key private/
12) Теперь нам нужно создать открытые и закрытые ключи для клиента и сервера, и подписать их.
СЕРВЕР.
openssl req -nodes -new -keyout syn.key -out syn.csr
openssl ca -out syn.crt -in syn.csr
КЛИЕНТ.
openssl req -nodes -new -keyout my-iOS.key -out my-iOS.csr
openssl ca -out my-iOS.crt -in my-iOS.csr
Здесь может всплыть небольшая проблемка.
failed to update database
TXT_DB error number 2
Делаем следующее, в файле index.txt.attr
Строчку
unique_subject = yes
меняем на unique_subject = no
13) Теперь нужно скопировать созданные ключи и сертификаты в те папки, которые мы указывали в конфиг файле нашего сервера.
cp my-ca.crt /usr/syno/etc/packages/VPNCenter/openvpn/keys/
cp syn.crt /usr/syno/etc/packages/VPNCenter/openvpn/keys/
cp syn.key /usr/syno/etc/packages/VPNCenter/openvpn/keys/
14) Теперь нужно рестартовать наш VPN сервер через панель управления DS.
В настройка включения сервера снимаем галку, а потом ее снова ставим.
Теперь наш сервер подцепит отокорректированный конфиг файл со всеми исправлениями и нашими сертификатами и ключами.
15) Теперь осталось самое простое.
Там же в панели управления, можно экспортировать канфиг для клиента и сертификат. Что мы и делаем, распаковываем архив, где все это лежит и сразу забываем про сертификат, так как он нам не подходит, нам нужен наш сертификат.
Опыты показали, что отправлять на iДевайс отдельно два файла (конфиг и сертификат), к успеху не приводят.
Поэтому делаем следующее, нам нужно сертификат сервера, сертификат клиента и ключ клиента добавить в наш конфиг файл.
16) До редакции конфиг клиента выглядит следующим образом:
------------------------------------------------------------
dev tun
tls-client
remote YOUR_SERVER_IP 1194
# The "float" tells OpenVPN to accept authenticated packets from any address,
# not only the address which was specified in the --remote option.
# This is useful when you are connecting to a peer which holds a dynamic address
# such as a dial-in user or DHCP client.
# (Please refer to the manual of OpenVPN for more information.)
#float
# If redirect-gateway is enabled, the client will redirect it's
# default network gateway through the VPN.
# It means the VPN connection will firstly connect to the VPN Server
# and then to the internet.
# (Please refer to the manual of OpenVPN for more information.)
#Если хотите ходить в инет через домашнюю сеть и чтобы ИП на выходе был домашний, раскомментируйте строку ниже
#redirect-gateway
# dhcp-option DNS: To set primary domain name server address.
# Repeat this option to set secondary DNS server addresses.
#dhcp-option DNS DNS_IP_ADDRESS
pull
proto udp
script-security 2
#Как видим здесь дана ссылка на сертификат
ca ca.crt
comp-lzo
#Здесь нужно 0 будет поменять на 3600
reneg-sec 0
auth-user-pass
------------------------------------------------------
17) А теперь правим конфиг как написано ниже, то есть наша с вами задача добавить само содержимое сертификатов и ключа в конфиг файл.
- В тег <ca> нужно будет вставить содержимое my-ca.crt
для этого выполняем такую команду
cat my-ca.crt
- В тег <cert> нужно вставить содержимое my-iOS.crt
cat my-iOS.crt
- В тег <key> нужно вставить содержимое my-iOS.key
cat my-iOS.key
Это должно будет выглядеть так
-------------------------------------------------------
dev tun
tls-client
remote blabla.dyndns.org 1194
redirect-gateway
pull
proto udp
script-security 2
comp-lzo
reneg-sec 3600
auth-user-pass
<ca>
-----BEGIN CERTIFICATE-----
............................
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
...............................
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
...............................
-----END PRIVATE KEY-----
</key>
18) Ну вот почти и все, теперь получившийся конфиг клиента отправляем почтой или тунцом к себе на iДевайс, открываем его OpenVPN клиентом и наступит счастье.
19) Итог:
если сделали все как написано, то должно будет заработать, во всяком случае у меня работает. Я вижу локальную сеть домашнюю, в инет выхожу под своим домашним внешним ИПом, все приложения DS типа видео, музыка, фото, менеджер загрузки все у меня коннектиться по локальному ИПу 192.168.0.100. При этом снаружи на роутере у меня закрыты все порты, проброшен только 1194 и все. Все безопасно и красиво.
Желаю удачи, надеюсь кому нибудь моя писанина поможет.
P.S. Осталась пока одна нерешенная проблема, если например попытаться приконнектиться с серверу по 3G скоростям или тем более GPRS/EDGE, то срабатывает ошибка о таймауте. Но периодически при наличии хорошей связи по 3G соединение устанавливается. Пока с ней не разбирался. Если что допишу потом решение этой проблемы позже.