Клиент OpenVPN

OpenVPN — один из самых популярных протоколов для организации VPN-соединения. С его помощью можно создать виртуальную частную сеть или объединять локальные сети. OpenVPN имеет открытый исходный код и бесплатно распространяется под лицензией GNU GPL. OpenVPN можно назвать одним из самых безопасных протоколов. Все передаваемые данные надежно защищены при помощи библиотеки шифрования OpenSSL и протоколов SSLv3/TLSv1, что обеспечивает высокую безопасность и анонимность.

В интернет-центре Keenetic интегрирована поддержка OpenVPN-клиента. Для подключения OpenVPN реализованы такие возможности как режим TCP и UDP, аутентификация TLS, использование сертификатов и ключей шифрования для повышения уровня безопасности VPN-подключения.
Для настройки OpenVPN обязательно нужно установить компонент системы "Клиент OpenVPN". С этим компонентом интернет-центр Keenetic можно использовать как клиент и как сервер OpenVPN. Подробное описание режима сервера вы найдете в статье "Сервер OpenVPN". Установить компонент системы можно на странице "Общие настройки" в разделе "Обновления и компоненты", нажав "Изменить набор компонентов".

 openvpn-c-01.png

NOTE: Важно! В интернет-центре Keenetic используются строгие требования к конфигурации OpenVPN. Ниже перечислены основные требования:

— Конфигурация должна быть выполнена в виде одного файла.
— Сертификаты, ключи и т.п. должны быть включены в этот файл.
— Как правило подходят файлы конфигурации с расширением .ovpn
— Если провайдер предлагает файлы для различных роутеров или систем, в большинстве случаев можно воспользоваться файлом для OpenWRT.
— В конфигурации необходимо использовать только опции, перечисленные в документе: https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
— В конфигурации не должны присутствовать директивы или неизвестные команды, которые не могут быть обработаны.
Некоторые опции, из описанных по ссылке выше, могут не поддерживаться. Например, в нашей реализации OpenVPN не поддерживаются опции, относящиеся к IPv6.
— Порядок следования опций и включенных сертификатов и ключей не имеет значения.
— Файл конфигурации OpenVPN не сохраняется в резервной копии конфигурации устройства startup-config. Для получения резервной копии настроек интерфейса клиента OpenVPN его нужно сохранить отдельно.

Важно! Число клиентских подключений ограничивается выделенным служебным размером раздела памяти объемом 24 Кбайта для хранения VPN-конфигураций. Особенно это актуально для OpenVPN-соединений, т.к. суммарный размер их конфигураций не должен превышать 24 Кбайта.

VPN-провайдеры могут предоставлять разные варианты конфигураций для OpenVPN-подключения. Ниже рассмотрим некоторые из них.

Вариант 1. Скачайте файл конфигурации с сайта сервера OpenVPN, к которому планируете подключаться.
Например, на www.vpngate.net выберите сервер и нажмите на "OpenVPN Config file".

openvpn-c-02.png

Далее выберите одну из конфигураций этого сервера. Например, с использованием доменного имени DDNS и TCP 1781.

openvpn-c-03.png

При этом на компьютер загрузится файл конфигурации с расширением .ovpn. Откройте его в любом текстовом редакторе (например, в Блокноте) и скопируйте всё содержимое в буфер обмена, нажав на клавиатуре последовательно комбинацию клавиш Ctrl A и Ctrl C.

После этого перейдите на страницу "Другие подключения" и в разделе "VPN-подключения" нажмите "Добавить подключение". В окне "Параметры VPN-подключения" в поле "Тип (протокол)" выберите значение "OpenVPN".
Затем в поле "Имя подключения" впишите имя соединения и в поле "Конфигурация OpenVPN" вставьте скопированную конфигурацию из буфера обмена, нажав Ctrl V. Сохраните настройки.

openvpn-c-04.png

Для настройки расписания работы или определения интерфейса, через который будет работать подключение, нажмите "Показать дополнительные настройки".

После создания подключения переведите переключатель в состояние Включено.
На этой же странице будет отображаться статус данного подключения.

openvpn-c-05.png

TIP: Совет: Если данное подключение нужно использовать для выхода в Интернет, назначьте этому соединению самый высокий приоритет. Информацию о приоритетах вы найдете в статье "Приоритеты подключений".

Вариант 2. На некоторых сайтах с настройками OpenVPN, помимо файла конфигурации указывают логин и пароль. Например, на vpnbook.com.

openvpn-c-06.png

В этом случае, прежде чем скопировать содержимое в буфер обмена из файла конфигурации, необходимо удалить строку:

CLI: auth-user-pass

и добавить секцию, вписав нужные значения логина и пароля. Например:

CLI: <auth-user-pass>
vpnbook
r3d23xs
</auth-user-pass>

openvpn-c-07.png

Вариант 3. Другие провайдеры, например altvpn.com, предоставляют сертификаты и ключи в виде отдельных файлов. В этом случае нужно:

3.1. Закомментировать строки с именами файлов сертификатов и ключа символом #:

CLI: #ca ca.crt
#cert xxxxxxxxxx.crt
#key xxxxxxxxxx.crt

3.2. В конец файла конфигурации добавить секции сертификатов и ключа, и вставить в них содержимое соответствующих файлов:

CLI: <ca>
-----BEGIN CERTIFICATE-----
...       <--сюда вставить тело сертификата из файла ca.crt
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
...    <--сюда вставить тело сертификата из файла xxxx.crt 
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN RSA PRIVATE KEY-----
...          <--сюда вставить тело ключа из файла xxxx.key
-----END RSA PRIVATE KEY-----
</key>

Вариант 4. У провайдера privateinternetaccess.com в файле конфигурации присутствуют файлы ca.rsa.2048.crt и crl.rsa.2048.pem, содержимое которых нужно вставить между секциями <crl-verify></crl-verify> и <ca></ca> соответственно.

Конфигурационный файл openvpn при этом примет следующий вид:

CLI: client
dev tun
proto udp
remote sweden.privateinternetaccess.com 1198
resolv-retry infinite
nobind
persist-key
persist-tun
cipher aes-128-cbc
auth sha1
tls-client
remote-cert-tls server
<auth-user-pass>
xxxxx - тут указать ваш логин сервиса
xxxxx - тут указать пароль сервиса
</auth-user-pass>​
comp-lzo
verb 1
reneg-sec 0
disable-occ

<crl-verify>
-----BEGIN X509 CRL-----
...   <--сюда вставить тело ключа из файла crl.rsa.2048.pem
-----END X509 CRL-----
</crl-verify>

<ca>
-----BEGIN CERTIFICATE-----
...
<--сюда вставить тело сертификата из файла ca.rsa.2048.crt
-----END CERTIFICATE-----
</ca>

TIP: Типовые ошибки и пути решения:

1. auth-user-pass without inline credentials data is not supported

В файле конфигурации осталась строка для онлайн ввода логина/пароля, который не поддерживается Keenetic. Ошибка в журнале Keenetic:

OpenVPN0 auth-user-pass without inline credentials data is not supported
OpenVPN0 Exiting due to fatal error

Удалите или закомментируйте все строки вида:

auth-user-pass

2. Ошибка опции block-outside-dns

В журнале Keenetic сообщение об ошибке:

OpenVPN0 Unrecognized option or missing or extra parameter(s) in configuration: (line X): block-outside-dns (2.4.4)
OpenVPN0 Exiting due to fatal error

Подробную информацию об ошибке и её решение вы найдете в статье "Ошибка "Unrecognized option or missing or extra parameter(s) in configuration" при установке OpenVPN-подключения".

3. Ошибка при соединении с серверами PrivateTunnel

При попытке соединения выдается ошибка:

OpenVPN0 Unrecognized option or missing or extra parameter(s) in configuration: (line 3): client-ip (2.4.4)

Добавьте в файл конфигурации клиента OpenVPN строку:

ignore-unknown-option client-ip block-ipv6

4. При использовании опции askpass /storage/key.txt возникает ошибка:

Error: private key password verification failed

Это ограничение текущей реализации OpenVPN в Keenetic. Можно использовать только ключ без пароля или с фиксированным паролем: "password".

 

Была ли эта статья полезной?

Пользователи, считающие этот материал полезным: 62 из 66

Еще есть вопросы? Отправить запрос

Комментарии

Комментариев: 7
  • Мой корпоративный OpenVPN сервер в своих параметрах имеет вот такой фрагмент:

    push "dhcp-option DNS x.x.x.x"

    Он передаёт клиентам IP адрес локального DNS сервера для резолвинга доменных имён в локальной сети, к которой мы подключаемся. Клиенты Windows и Linux умеют обрабатывать этот параметр, а вот Keenetic OS - нет. В результате в логе мы видим:

    [E] May 30 14:35:39 OpenVPN0: Unrecognized option or missing or extra parameter(s) in configuration: (line 4): register-dns (2.4.6)
    [E] May 30 14:35:39 OpenVPN0: Exiting due to fatal error
    [E] May 30 14:35:39 ndm: Service: "OpenVPN0": unexpectedly stopped.

    Для решения этой проблемы необходимо в конфиг клиента OpenVPN на Keenetic добавить опцию

    pull-filter ignore "register-dns"

    1
    Действия с комментариями Постоянная ссылка
  • А как вообще можно сделать, чтобы при подключении к OpenVpn скрыть свой dns,а высвечивался dns openvpn? А то подключаюсь к vpn и на сайте whoer.net высвечивается мой dns

    0
    Действия с комментариями Постоянная ссылка
  • Виктор, отключите использование DNS-провайдера https://help.keenetic.com/hc/ru/articles/360008609399 и https://help.keenetic.com/hc/ru/articles/213966649

    1
    Действия с комментариями Постоянная ссылка
  • Скажите, до поля "Конфигурация OpenVPN", возможно добраться через CLI?
    Или только через веб интерфейс.

    0
    Действия с комментариями Постоянная ссылка
  • Андрей, только через веб-интерфейс.

    0
    Действия с комментариями Постоянная ссылка
  • Может быть, кому-то будет полезно... Полноценно добраться до конфигурации OpenVPN через CLI пока невозможно. А мне нужно было раз в неделю автоматически (ну не руками же!) обновлять имя пользователя и пароль от рабочего сервиса VPN как раз в этом разделе конфигурации. Так родился (в муках) скрипт (см. ниже), который логинится в веб-интерфейс Кинетика, получает оттуда текущие настройки OpenVPN в формате .ovpn, патчит их:

    client
    dev tun
    proto udp
    cipher AES-256-CBC
    ...
    <auth-user-pass>
    old@TestVPN <!-- replace me
    oldPassword <!-- replace me
    </auth-user-pass>

     

    (между откывающим и закрывающим тэгами auth-user-pass заменяет 2 строки: логин и пароль VPN на новые) и загружает обратно на роутер, автоматом применяя. Не через CLI, обыкновенным CURL. Проверен на Keenetic Giga III (current KeeneticOS version: 3.3.1). Прямо из-под Keenetic Entware.

    Код скрипта: https://pastebin.com/T82QaRkR 

    #!/bin/sh

    HOST=192.168.0.1 # Keenetic IP address
    PORT=80 # Keenetic web-interface port
    USER=admin # Keenetic web-interface user
    PASS=pa$$word # and their password

    VPN_IFACE=OpenVPN0 # OpenVPN service interface ID, see 'show interfaces' CLI
    VPN_DESC=TestVPN # OpenVPN service description, any string
    VPN_USER=new@TestVPN # A new VPN user name
    VPN_PASS=newPassword # A new VPN password

    JAR=/tmp/ovpn-jar
    TMP=/tmp/ovpn-tmp
    TMP2=/tmp/ovpn-patched

    # compute password hash required to log into Keenetic's
    # web-interface: acquire new session cookie,
    # new password challenge and a realm from the router
    OPTS='-s -c '$JAR' -b '$JAR
    AUTH=`curl -v $OPTS http://$HOST:$PORT/auth 2>&1`
    CHALLENGE=`printf "$AUTH" | grep 'X-NDM-Challenge' | cut -d ':' -f2 | sed 's/ //' | tr -d '\r'`
    REALM=`printf "$AUTH" | grep 'X-NDM-Realm' | cut -d ':' -f2 | sed 's/ //' | tr -d '\r'`

    # compute password hash
    printf "$USER:$REALM:$PASS" > $TMP
    HASH=`md5sum $TMP | cut -d ' ' -f1`
    printf "$CHALLENGE$HASH" > $TMP
    HASH=`sha256sum $TMP | cut -d ' ' -f1`

    # now, use user and password hash to log into the router
    curl $OPTS -X POST http://$HOST:$PORT/auth \
    -H 'Content-Type: application/json;charset=UTF-8' \
    --data-binary "{\"login\":\"$USER\",\"password\":\"$HASH\"}"

    # get existing OpenVPN config via REST, and patch it to insert new VPN credentials
    curl $OPTS http://$HOST:$PORT/rci/interface | jq '.'"$VPN_IFACE"'.openvpn.config.config' > $TMP
    sed 's/pass>.*</pass>\\n'$VPN_USER'\\n'$VPN_PASS'\\n</' < $TMP > $TMP2

    # post new OpenVPN config back to the router, effectively applying it
    VPN_CONFIG=`cat $TMP2`
    # VPN_DATA must fit into a single line (!):
    VPN_DATA='[{"interface":{"'"$VPN_IFACE"'":{"authentication":{"no":true}}}},{"interface":{"'"$VPN_IFACE"'":{"description":"'"$VPN_DESC"'","role":["misc"],"ip":{"tcp":{"adjust-mss":{"pmtu":true}},"address":{"no":true},"name-server":false,"mtu":{"no":true}},"openvpn":{"accept-routes":true,"config":{"config":'"$VPN_CONFIG"'},"connect":{"via":"","no":false}},"schedule":{"no":true}}}},{"system":{"configuration":{"save":true}}}]'
    curl $OPTS http://$HOST:$PORT/rci/ \
    -H 'Content-Type: application/json;charset=UTF-8' \
    --data-binary "$VPN_DATA"

    # clean up
    rm $TMP2 $TMP $JAR

     

    2
    Действия с комментариями Постоянная ссылка
  • Ilya Molchanov ,

    Большое спасибо! Было очень полезно!
    Сэкономил наверно неделю времени.

    0
    Действия с комментариями Постоянная ссылка

Войдите в службу, чтобы оставить комментарий.