synology.forum архив спільноти · 2005–2022
ai.synology.forum →
ГлавнаяДополнительные Приложения Synology › OpenVPN на iOS

OpenVPN на iOS

Chiller · 16.02.2013

Не так давно вышел клиент OpenVPN под iOS - https://itunes.apple.com/us/app/openvpn-con...d590379981?mt=8

На хабре есть небольшой мануал по настройке - http://habrahabr.ru/post/168853/

Быстро настроить у меня не получилось, сертификат который выдает OpenVPN Server на DS при подключении не проходит. Деталей много, разбираться нет времени.

Решение проблемы с сертификатом вроде бы есть в этой теме https://forums.openvpn.net/topic11986.html

 

Может кто разберется и выложит мануал по настройке?

armen · 13.03.2013

Всем добрый вечер!

Задался той же проблемой что и уважаемый 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 соединение устанавливается. Пока с ней не разбирался. Если что допишу потом решение этой проблемы позже.

 

DMITRIYST · 14.03.2013

Низкий поклон, очаровательно, всё детально!

Chiller · 14.03.2013

armen

Огромное спасибо! http://smiles.bbmix.ru/1107.gif

Пару дней мониторил тему, а потом что-то забросил (да и подписаться забыл), сегодня захожу, а тут супер-мануал! :)

Сегодня попробую.

 

p.s. когда пробовал сам разобраться, выделывал то же самое что и здесь написано, но видимо в каком-то месте что-то упустил и iOS клиент не цеплялся, хотя я в него закидывал уже готовый конфиг с генерированными сертификатами.

Chiller · 14.03.2013

Все получилось, еще раз спасибо за труд!

armen · 14.03.2013

Пожалуйста! Самое главное что заработало!

scorpek · 22.04.2013

Подскажите кто знает,как изменить номер стандартного порта vpn в диск стейшен на свой (самоназначенный)?

sstyle · 22.01.2014

armen выбрал какой-то сложный путь. все гораздо проще!!!

 

1) Поставили VPN Server.

2) Экспортировали конфигурацию.

 

Открываем штатную конфигурацию и правим

1) добавляем строку

dev tun

tls-client

setenv CLIENT_CERT 0 (как раз отсутствие этой строки и выдает ошибку по сертификатам)

remote SERVER_ADDRESS 1194

 

2) redirect-gateway раскоментируем если хотим интернет на айфоне

3) Копируем содержимое файла ca.crt и вставляем в конфигурацию

 

<ca>

-----BEGIN CERTIFICATE-----

............................

-----END CERTIFICATE-----

</ca>

 

4) Отправляем этот конфиг (один файл) себе на почту и открываем с помощью OpenVPN на айфоне

 

ВОТ И ВСЕ!!

Chiller · 23.01.2014

sstyle

Спасибо за полезную инфу!

Как проверю, отпишусь.

 

Siroc-co · 04.06.2014

А как настроить на винде?

Скачиваю конфиги, делаю всё по инструкции Synology, и нифига. Вылетает херова туча ошибок:

Wed Jun 04 14:26:11 2014 OpenVPN 2.3.4 i686-w64-mingw32 [SSL (OpenSSL)] [LZO] [PKCS11] [IPv6] built on May  2 2014
Wed Jun 04 14:26:11 2014 library versions: OpenSSL 1.0.1g 7 Apr 2014, LZO 2.05
Enter Management Password:
Wed Jun 04 14:26:26 2014 WARNING: No server certificate verification method has been enabled.  See http://openvpn.net/howto.html#mitm for more info.
Wed Jun 04 14:26:26 2014 UDPv4 link local (bound): [undef]
Wed Jun 04 14:26:26 2014 UDPv4 link remote: [AF_INET]xx.xx.xx.32:1194
Wed Jun 04 14:26:26 2014 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Wed Jun 04 14:26:26 2014 VERIFY ERROR: depth=0, error=unable to get local issuer certificate: description=Ixxxxxxxxxxxxx, C=RU, CN=www.xxxxx, emailAddress=hostmaster@xxxx
Wed Jun 04 14:26:26 2014 TLS_ERROR: BIO read tls_read_plaintext error: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Wed Jun 04 14:26:26 2014 TLS Error: TLS object -> incoming plaintext read error
Wed Jun 04 14:26:26 2014 TLS Error: TLS handshake failed
Wed Jun 04 14:26:26 2014 SIGUSR1[soft,tls-error] received, process restarting
Wed Jun 04 14:26:28 2014 WARNING: No server certificate verification method has been enabled.  See http://openvpn.net/howto.html#mitm for more info.
Wed Jun 04 14:26:31 2014 UDPv4 link local (bound): [undef]
Wed Jun 04 14:26:31 2014 UDPv4 link remote: [AF_INET]xx.xx.xx.32:1194
Wed Jun 04 14:26:31 2014 TLS Error: Unroutable control packet received from [AF_INET]xx.xx.xx.32:1194 (si=3 op=P_CONTROL_V1)
Wed Jun 04 14:26:31 2014 TLS Error: Unroutable control packet received from [AF_INET]xx.xx.xx.32:1194 (si=3 op=P_CONTROL_V1)
Wed Jun 04 14:26:32 2014 TLS Error: Unroutable control packet received from [AF_INET]xx.xx.xx.32:1194 (si=3 op=P_CONTROL_V1)
Wed Jun 04 14:26:32 2014 TLS Error: Unroutable control packet received from [AF_INET]xx.xx.xx.32:1194 (si=3 op=P_CONTROL_V1)
Wed Jun 04 14:26:33 2014 TLS Error: Unroutable control packet received from [AF_INET]xx.xx.xx.32:1194 (si=3 op=P_CONTROL_V1)
Wed Jun 04 14:26:33 2014 TLS Error: Unroutable control packet received from [AF_INET]xx.xx.xx.32:1194 (si=3 op=P_CONTROL_V1)
Wed Jun 04 14:26:33 2014 TLS Error: Unroutable control packet received from [AF_INET]xx.xx.xx.32:1194 (si=3 op=P_ACK_V1)

И что это Wed Jun 04 14:26:31 2014 UDPv4 link local (bound): [undef] за строчка?

Почему в журнал ничего не пишется, но отображается при просмотре подключенных клиентов с именем пользователя undef.

Всё делал по хелпу синолоджи.

DMagister · 04.06.2014
И что это Wed Jun 04 14:26:31 2014 UDPv4 link local (bound): [undef] за строчка?

такое впечатление, что у Вас на самой synology что-то неправильно настроено. такое впечатление, что включено агрегирование линков, но адрес этому транку не назначен. или Вы какой-то конфиг руками правили и указали несуществующий интерфейс для туннеля.

Siroc-co · 05.06.2014
такое впечатление, что у Вас на самой synology что-то неправильно настроено. такое впечатление, что включено агрегирование линков, но адрес этому транку не назначен. или Вы какой-то конфиг руками правили и указали несуществующий интерфейс для туннеля.

Проверил всё. Агрегирования нет. Сетевой интерфейс выбран верно. Руками никуда не лез, ничё на сервере не настраивал, только установил впн сервер.

Попробую впихнуть туда самодельные сертификаты. Вдруг прокатит.

Chiller · 29.06.2014
armen выбрал какой-то сложный путь. все гораздо проще!!!

 

1) Поставили VPN Server.

2) Экспортировали конфигурацию.

 

Открываем штатную конфигурацию и правим

1) добавляем строку

dev tun

tls-client

setenv CLIENT_CERT 0 (как раз отсутствие этой строки и выдает ошибку по сертификатам)

remote SERVER_ADDRESS 1194

 

2) redirect-gateway раскоментируем если хотим интернет на айфоне

3) Копируем содержимое файла ca.crt и вставляем в конфигурацию

 

<ca>

-----BEGIN CERTIFICATE-----

............................

-----END CERTIFICATE-----

</ca>

 

4) Отправляем этот конфиг (один файл) себе на почту и открываем с помощью OpenVPN на айфоне

 

ВОТ И ВСЕ!!

добавлю, что:

1. после п.2 вышеуказанной инструкции, сначала удаляем строку "ca ca.crt", а потом на ее место вставляем содержимое файла ca.crt между тэгов <ca> </ca>.

2. сейчас работает без добавления "setenv CLIENT_CERT 0"

 

в итоге openvpn.ovpn у меня выглядит так:

dev tun
tls-client
remote ваш_ай_пи 1194
redirect-gateway
pull
proto udp
script-security 2
<ca>
-----BEGIN CERTIFICATE-----
код сертификата
-----END CERTIFICATE-----
</ca>
comp-lzo
reneg-sec 0
auth-user-pass

Neona · 27.11.2014
добавлю, что:

1. после п.2 вышеуказанной инструкции, сначала удаляем строку "ca ca.crt", а потом на ее место вставляем содержимое файла ca.crt между тэгов <ca> </ca>.

2. сейчас работает без добавления "setenv CLIENT_CERT 0"

 

в итоге openvpn.ovpn у меня выглядит так:

dev tun
tls-client
remote ваш_ай_пи 1194
redirect-gateway
pull
proto udp
script-security 2
<ca>
-----BEGIN CERTIFICATE-----
код сертификата
-----END CERTIFICATE-----
</ca>
comp-lzo
reneg-sec 0
auth-user-pass

Добрый день. Подскажите, я сделал настройки описанные выше и установил соединение по openvpn. Но вот зайти через веб морду никак не получается, ровно как и получить доступ к расшаренным ресурсам. В чем может быть проблема ? Спасибо.

Chiller · 30.11.2014
Но вот зайти через веб морду никак не получается

Странно, какой адрес для веб-морды набираете, локальный ?