Инструменты пользователя

Инструменты сайта


openvpn

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

openvpn [2018/07/16 03:31] (текущий)
Строка 1: Строка 1:
 +====== Настройка сервера OpenVPN ======
 +
 +~~Title: OpenVPN ~~
 +{{htmlmetatags>​
 +metatag-description=(Когда лучше использовать OpenVPN сервер. Практические примеры настройки OpenVPN. Описание и использование клиентов OpenVPN. Настройка OpenVPN windows.)
 +}}
 +
 +Homepage: [[http://​openvpn.net/​index.php/​open-source.html|OpenVPN Community Software]]
 +
 +**OpenVPN** — это приложение для создания безопасного IP-туннеля через единый [[UDP]]- или [[TCP]]-порт 1194. Для обеспечения безопасности управляющего канала и потока данных,​ OpenVPN использует библиотеку OpenSSL (точнее протоколы SSLv3/​TLSv1) т.е. доступны все возможности шифрования,​ аутентификации и сертификации библиотеки OpenSSL (любой шифр, размер ключа). Также может использоваться пакетная авторизация [[HMAC]], для обеспечения большей безопасности,​ и **аппаратное ускорение** для улучшения производительности шифрования.
 +
 +OpenVPN используется на Solaris, OpenBSD, FreeBSD, NetBSD, GNU/Linux, Apple Mac OS X и Microsoft Windows.
 + 
 +
 +  * **OpenVPN предлагает пользователю несколько видов аутентификации:​**
 +  - Предустановленный ключ, — самый простой метод.
 +  - Сертификатная [[аутентификация]],​ — наиболее гибкий в настройках метод.
 +  - С помощью логина и пароля,​ — может использоваться без создания клиентского сертификата (серверный сертификат все равно нужен).
 +
 +OpenVPN может использовать статические,​ предустановленные ключи или обмен динамическими ключами на основе [[TLS]]. Он также поддерживает соединения VPN с динамическими удалёнными узлами (DHCP или клиенты dial-up), туннели поверх [[NAT]] или через полноценный межсетевой экран (например,​ [[iptables]] в Linux).
 +<​note>​Настройки конфигурационного файла клиента идентичны по синтаксису и написанию как для Linux, так и для Windows.</​note>​
 +
 +===== Компоненты сети OpenVPN =====
 +
 +{{ :​what-is-openvpn.jpg?​nolink&​400 |}}
 +
 +Основные компоненты сети OpenVPN и объекты
 +  * **Удостоверяющий центр CA**. Выдает сертификаты по запросу узлов сети VPN, подписанные сертификатом удостоверяющего центра. Предоставляет узлам сети VPN свой собственный сертификат для проверки удостоверяющей стороны. **Управляет списком отзыва сертификатов CRL.**
 +  * **Сервер OpenVPN**. ПО сервера OpenVPN создает туннель внутри незащищенной сети, например,​ Интернета. Этот туннель обеспечивает безопасный зашифрованный трафик между узлами — участниками обмена данными в сети OpenVPN.
 +  * **Клиент OpenVPN**. ПО клиента OpenVPN устанавливается на все узлы, которым необходим защищенный канал передачи данный с сервером OpenVPN. При соответствующей настройка сервера OpenVPN возможна защищенная передача данных между клиентами OpenVPN, а не только между клиентами и сервером OpenVPN.
 +  * **Сертификаты (публичные ключи) X.509**. Сертификаты X.509 представляют собой публичные ключи, заверенные удостоверяющим центром CA. Они используются для зашифровывания данных. Факт заверения сертификата удостоверяющим центром CA позволяет идентифицировать сторону,​ передающую зашифрованные данные. Файл запроса на сертификат создается на узлах сети, затем он переносится на узел удостоверяющего центра и там подписывается. Созданный в результате подписанный сертификат переносится обратно на запросивший его узел сети OpenVPN.
 +  * **Приватные ключи**. Приватные ключи секретные. Они должны создаваться и храниться на каждом узле сети OpenVPN, предназначены для расшифрования данных и никогда не должны передаваться по сети. Приватные ключи создаются на узлах сети OpenVPN одновременно с файлом запроса на получение сертификата.
 +  * **Список отзыва сертификатов CRL**. Содержит список сертификатов,​ утративших доверие. Он создается и редактируется на узле удостоверяющего центра CA. Чтобы отключить узел от сети, достаточно занести его сертификат в список CRL. **После создания и каждого изменения список CRL переносится на серверы OpenVPN.**
 +  * **Файл Диффи-Хелмана**. Используется,​ чтобы в случае похищения ключей исключить расшифрование трафика,​ записанного еще до этого похищения. Создается на сервере OpenVPN.
 +  * **Статический ключ [[HMAC]]**.
 +====== Безопасность и шифрование ======
 +Безопасность и шифрование в OpenVPN обеспечивается библиотекой [[OpenSSL]] и протоколом транспортного уровня Transport Layer Security ([[TLS]]). Вместо OpenSSL в новых версиях OpenVPN можно использовать библиотеку PolarSSL. Протокол TLS представляет собой усовершенствование протокола защищенной передачи данных уровня защищенных сокетов Secure Socket Layers ([[SSL]]). ​
 +
 +В OpenSSL может использоваться симметричная и ассиметричная криптография. ​
 +
 +В первом случае перед началом передачи данных на все узлы сети необходимо поместить одинаковый секретный ключ. При этом возникает проблема безопасной передачи этого ключа через небезопасный Интернет. ​
 +
 +Во втором случае у каждого участника обмена данными есть два ключа — публичный (открытый) и приватный (секретный). ​
 +
 +Публичный ключ используется для зашифрования данных,​ а приватный — для расшифрования. В основе шифрования лежит довольно сложная математика. Выбранный в SSL/TLS алгоритм зашифрования публичным ключом обеспечивает возможность расшифрования только с помощью приватного ключа.
 +
 +Приватный ключ секретный,​ и должен оставаться в пределах узла, на котором он создан. Публичный ключ должен передаваться участникам обмена данными.
 +
 +Для безопасной передачи данных необходимо идентифицировать стороны,​ принимающие участие в обмене данными. В противном случае можно стать жертвой так называемой "​атаки посредника"​ (Man in the Middle, MITM). В ходе такой атаки злоумышленник подключается к каналу передачи данных и прослушивает его. Он также может вмешиваться,​ удалять или изменять данные.
 +
 +Чтобы обеспечить аутентификацию (проверку подлинности пользователя) протокол TLS использует инфраструктуру публичных ключей (Public Key Infrastructure,​ PKI) и асимметричную криптографию.
 +
 +Нужно осознавать,​ что расшифрование данных без наличия приватного ключа тоже возможно,​ например,​ методом последовательного перебора. Хотя такой метод и требует больших вычислительных ресурсов,​ это только вопрос времени,​ когда данные смогут быть расшифрованы. ​
 +
 +Хотя размер ключа влияет на сложность расшифрования,​ никакой ключ не дает гарантии полной безопасности данных. Кроме того, существует возможность похищения уже расшифрованных данных и ключей за счет уязвимостей и закладок в операционной системе или прикладном ПО, а также в аппаратном обеспечении серверов и рабочих станций.
 +
 +Шифрование данных увеличивает трафик и замедляет обмен данными. Чем больше длина ключа, применяемого для шифрования данных,​ тем труднее будет его подобрать,​ но и тем заметнее получится замедление обмена данными.
 +
 +===== OpenVPN Debian Wheezy/sid =====
 +<​file>​
 +# aptitude install openvpn
 +# mkdir /​etc/​openvpn/​easy-rsa
 +# cp -R /​usr/​share/​doc/​openvpn/​examples/​easy-rsa/​2.0/​* /​etc/​openvpn/​easy-rsa/​
 +</​file>​
 +Изменяем параметры по умолчанию для сертификатов
 +<​file>​
 +# nano /​etc/​openvpn/​easy-rsa/​vars ​
 +...
 +export KEY_COUNTRY="​US"​
 +export KEY_PROVINCE="​CA"​
 +export KEY_CITY="​SanFrancisco"​
 +export KEY_ORG="​Fort-Funston"​
 +export KEY_EMAIL="​me@myhost.mydomain"​
 +</​file>​
 +Создадим переменные окружения [[bash]], если это не сделать,​ при генерации ключей клиентов переменные будут взяты из /​etc/​openvpn/​easy-rsa/​openssl.cnf а не из файла vars
 +<​file>​
 +# cd /​etc/​openvpn/​easy-rsa
 +# source ./vars
 +NOTE: If you run ./​clean-all,​ I will be doing a rm -rf on /​etc/​openvpn/​easy-rsa/​keys
 +# ./clean-all
 +# ./build-dh
 +</​file>​
 +Создадим сертификат для сервера с именем vpnspar
 +<​file>​
 +# ./pkitool --initca
 +# ./pkitool --server vpnspar
 +</​file>​
 +Создадим сертификат для клиента с именем farm1c. Отдельный ключ для каждого клиента.
 +<​file>​
 +# ./pkitool farm1c
 +</​file>​
 +<​file>​
 +# mkdir /​etc/​openvpn/​keys
 +# cp keys/ca.crt /​etc/​openvpn/​keys
 +# cp keys/​dh1024.pem /​etc/​openvpn/​keys
 +# cp keys/​vpnspar.crt /​etc/​openvpn/​keys
 +# cp keys/​vpnspar.key /​etc/​openvpn/​keys
 +</​file>​
 +В директории ccd хранятся индивидуальные настройки для каждого клиента. Имя файла должно соответствовать имени сгенерированного клиентского сертификата. Файлы конфигурации клиентов являются текстовыми файлами и содержат команды,​ выполняемые сервером при подключении клиентов. Обычно файл клиента содержать команды:​
 +  - добавляет клиенту маршрут к локальной подсети центрального офиса(push "route 192.168.1.0 255.255.255.0"​)
 +  - определяет адрес локальной подсети,​ находящейся за клиентом (например iroute 192.168.2.0 255.255.255.0)
 +  - привязка к статическому IP (ifconfig-push 192.168.14.21 192.168.14.22),​ где ifconfig-push <​IP-адрес клиента>​ <​IP-адрес сервера>​. Выбранные пары IP-адресов,​ во-первых,​ должны быть уникальными,​ во-вторых,​ должны входить в состав последовательных подсетей,​ ограниченных маской /30 (255.255.255.252),​ и, в-третьих,​ должны находиться в пределах пула IP-адресов,​ выделенного для виртуальной частной сети (определяется параметром server файла конфигурации сервера OpenVPN). ​
 +<​file>​
 +# mkdir /​etc/​openvpn/​ccd
 +# nano ccd/farm1c
 +push "route 192.168.1.0 255.255.255.0"​
 +#push "route 192.168.35.0 255.255.255.0"​
 +# static IP
 +ifconfig-push 192.168.14.21 192.168.14.22
 +#iroute 192.168.2.0 255.255.255.0
 +</​file>​
 +==== server.conf ====
 +
 +Конфигурируем сервер в файле server.conf
 +<​file>​
 +# cp /​usr/​share/​doc/​openvpn/​examples/​sample-config-files/​server.conf.gz /​etc/​openvpn/​
 +# gunzip server.conf.gz
 +# nano /​etc/​openvpn/​server.conf
 +</​file><​file bash server.conf>​
 +local ххх.196.98.ххх ​           # IP на котором сервер слушает входящие сообщения
 +port 1194                       # порт на котором сервер слушает входящие сообщения
 +proto udp
 +dev tun
 +# Включение интерфейса управления OpenVPN. Доступен при помощи telnet localhost 7505
 +management localhost 7505
 +
 +ca keys/​ca.crt ​                   # местонахождение самоподписного доверенного сертификата (CA)
 +cert keys/​vpnspar.crt ​            # местонахождение сертификата сервера
 +key keys/​vpnspar.key ​             # местонахождение закрытого ключа сервера
 +dh keys/​dh1024.pem ​               # местонахождение файла параметров Диффи-Хэлмана
 +# Настройка режима сервера и адреса VPN-сети, ​
 +# из которой OpenVPN будет раздавать адреса клиентам.
 +# Сервер возьмет себе 192.168.14.1,​
 +# остальные адреса будут доступны для клиентов.
 +# Каждый клиент сможет связаться с сервером по адресу 192.168.14.1.
 +server 192.168.14.0 255.255.255.0
 +# в файле ipp.txt хранится информация о соединении,​ например на случай обрыва соединения
 +# и его дальнейшего восстановления
 +ifconfig-pool-persist ipp.txt
 +
 +# маршруты которые будут передаваться каждому клиенту.
 +# push - команда OpenVPN, передаваемая клиенту и выполняемая клиентом
 +# (в данном случае добавляем на стороне клиента два маршрута к виртуальной частной сети)
 +push "route 192.168.1.0 255.255.255.0"​
 +push "route 192.168.35.0 255.255.255.0"​
 +
 +# Перенаправлять default gateway на vpn-сервер. Если не нужно - закомментировать или ​
 +# добавить в ccd для конкретного клиента
 +push "​redirect-gateway def1"
 +
 +# указываем где будут хранятся файлы с настройками IP-адресов клиентов
 +client-config-dir ccd
 +
 +# добавляем маршрут сервер-клиент.
 +# route - добавляет на стороне сервера маршруты к локальным подсетям,​ находящимся за клиентами
 +route 192.168.14.0 255.255.255.252
 +
 +# разрешить общение клиентов подключенных к серверу OpenVPN общение между собой
 +client-to-client
 +
 +# Директива проверки работоспособности,​ включающая отсылку
 +# ping-подобных сообщений туда и обратно через
 +# соединение для того, чтобы каждая сторона знала когда
 +# другая сторона внезапно пропадет (gone down).
 +# Пинг каждые 10 секунд,​ с предположением,​ что удаленный
 +# узел недоступен,​ если не получено на одного пинга за период времени
 +# равный 120 секундам.
 +keepalive 10 120
 +comp-lzo
 +max-clients 10
 +user nobody
 +group nogroup
 +persist-key
 +persist-tun
 +# Содержимое небольшого файла состояния,​ показывающего
 +# текущие соединения,​ усекается
 +# и перезаписывается раз в минуту.
 +status /​var/​log/​openvpn-status.log
 +log         /​var/​log/​openvpn.log
 +verb 3                             # уровень отладки
 +</​file>​
 +<​file>​
 +# /​etc/​init.d/​openvpn start
 +</​file>​
 +
 +===== Аннулировать сертификат клиента =====
 +  * [[http://​openvpn.net/​index.php/​open-source/​documentation/​howto.html#​revoke|Revoking Certificates]]
 +  * **Пример**. Аннулируем сертификат пользователя farm1c<​file>​
 +# cd /​etc/​openvpn/​easy-rsa
 +# source ./vars
 +# ./​revoke-full farm1c
 +Using configuration from /​etc/​openvpn/​easy-rsa/​openssl.cnf
 +Revoking Certificate 02.
 +Data Base Updated
 +</​file>​После команды revoke-full изменится в файл /​etc/​openvpn/​easy-rsa/​keys/​index.txt строка соответствующая сертификату пользователя farm1c.
 +
 +====== Инсталляция OpenVPN + OpenVZ ======
 +**Окружение:​**
 +  * [[OpenVZ]] Hardware Node(HD) [[CentOS]] 6.5 (Final),
 +  * Virtual Environment(VE) [[Ubuntu]] 14.04.1 LTS,
 +  * OpenVPN 2.3.2,
 +  * Easy-RSA 2.2.
 +
 +===== Инсталляция VE(VPS, VDS) =====
 +
 +  * Инсталлируем VE Ubuntu для OpenVZ<​file>​
 +# cd /​vz/​template/​cache/​
 +# wget -c http://​download.openvz.org/​template/​precreated/​ubuntu-14.04-x86_64-minimal.tar.gz
 +# vzctl create 111 --layout simfs --ostemplate ubuntu-14.04-x86_64-minimal
 +CT configuration saved to /​etc/​vz/​conf/​111.conf
 +</​file>​
 +  * Настраиваем VE 111.conf.
 +  * [[openvz?&#​ustanovka_tun_tap_dlja_openvpn_na_openvz_ve|Установка tun/tap для OpenVPN на OpenVZ VE]]
 +  * Все остальные настройки производим уже в установленной VE<​file>​
 +# vzctl enter 111
 +</​file>​
 +===== Создание ключей =====
 +  * Создание ключей при помощи утилиты Easy-RSA. Ранее эта утилита входила в дистрибутив сервера OpenVPN, сейчас она отдельный проект. Последнюю версию утилиты можно скачать с сайта OpenVPN, но правильнее использовать версию поставляемую с вашим дистрибутивом ОС.<​file>​
 +aptitude install easy-rsa
 +</​file>​
 +  * Перед тем как запустить демон OpenVPN, нам нужны в каталоге /​etc/​openvpn/​keys<​file>​
 +openssl.cnf — файл конфигурации OpenSSL;
 +server.conf — файл конфигурации сервера OpenVPN;
 +ca.crt — cертификат удостоверяющего центра;​
 +vpn-server.crt — cертификат сервера OpenVPN;
 +server.key — приватный ключ сервера OpenVPN, секретный;​
 +crl.pem — cписок отзыва сертификатов;​
 +dh.pem — файл Диффи-Хелмана для обеспечения защиты трафика от расшифровки;​
 +ta.key — ключ HMAC для дополнительной защиты от DoS-атак и флуда
 +</​file>​
 +  * Копируем директорию easy-rsa в то место где будем создавать инфраструктуру публичных ключей (Public Key Infrastructure,​ PKI)<​file>​
 +cp -R /​usr/​share/​easy-rsa /​etc/​openvpn/​
 +cd /​etc/​openvpn/​easy-rsa
 +</​file>​Изменяем параметры по умолчанию для сертификатов в файле vars<​file>​
 +export KEY_COUNTRY="​US"​
 +export KEY_PROVINCE="​CA"​
 +export KEY_CITY="​SanFrancisco"​
 +export KEY_ORG="​Fort-Funston"​
 +export KEY_EMAIL="​me@myhost.mydomain"​
 +export KEY_OU="​MyOrganizationalUnit"​
 +</​file>​Создадим переменные окружения.<​file>​
 +source ./vars
 +NOTE: If you run ./​clean-all,​ I will be doing a rm -rf on /​etc/​openvpn/​easy-rsa/​keys
 +</​file>​Очистим от предыдущих экспериментов. Создадим ключ Диффи-Хелмана (ключ создается некоторое время).<​file>​
 +./clean-all
 +./build-dh
 +Generating DH parameters, 2048 bit long safe prime, generator 2
 +This is going to take a long time
 +...
 +</​file>​
 +  * Создадим директорию для хранения приватных ключей сервера OpenVPN. Скопируем туда файл Диффи-Хелмана (dh2048.pem)<​file>​
 +mkdir /​etc/​openvpn/​keys
 +cp keys/​dh2048.pem /​etc/​openvpn/​keys/​
 +</​file>​
 +  * Статический ключ [[HMAC]] для с целью дополнительной защиты от [[DoS]]-атак и flood.
 +  * Создадим **удостоверяющий центр CA**. Создадутся ca.crt и ca.key. Файл ca.key представляет собой приватный ключ центра CA, он **секретный**,​ и его **нельзя переносить** на другие узлы вашей сети. Файл сертификата удостоверяющего центра ca.crt, напротив,​ открытый,​ и он будет нужен на узлах серверов и клиентов OpenVPN.<​file>​
 +./pkitool --initca
 +</​file>​
 +  * Создадим сертификат для сервера с именем vpnluxor<​file>​
 +./pkitool --server vpnluxor
 +</​file>​Созданные файлы vpnluxor.crt и vpnluxor.key копируем в директорию /​etc/​openvpn/​keys/​
 +  *  Создадим сертификат для клиента client1 с одноименном параметром CommonName . Отдельный ключ для каждого клиента.<​file>​
 +./pkitool client1
 +</​file>​
 +==== Расположение сертификатов и ключей ====
 +
 +|**Файл** |**Машина** |**Назначение** |**Доступ**|
 +|ca.crt |Сервер и клиенты |Сертификат корневого СА |Публичный|
 +|ca.key |Только на сервере |Необходим для подписи других сертификатов |Секретный|
 +|dh{n}.pem |Только на сервере |Diffie Hellman параметры |Публичный|
 +|vpnspar.crt |Только на сервере |Сертификат сервера |Публичный|
 +|vpnspar.key |Только на сервере |Ключ сервера |Секретный|
 +|darkfire.crt |Только на клиенте |Сертификат клиента |Публичный|
 +|darkfire.key |Только на клиенте |Ключ клиента |Секретный|
 +
 +
 +===== Инсталлируем OpenVPN =====
 +
 +  * Установим OpenVPN 2.3 в VE([[Ubuntu]] 14.04.1 LTS)<​file>​
 +aptitude install openvpn
 +</​file>​Для запуска раскомментируем строку<​file>​
 +nano /​etc/​default/​openvpn
 +...
 +AUTOSTART="​all"​
 +...
 +</​file>​
 +  * Копируем openvpn.conf<​file>​
 +cp /​usr/​share/​doc/​openvpn/​examples/​sample-config-files/​server.conf.gz /​etc/​openvpn/​
 +gunzip server.conf.gz
 +</​file>​Пробуем запустить,​ OpenVPN останавливает свою работу из-за несуществующих сертификатов ca.crt, dh1024.pem и других. [[openvpn?&#​sozdanie_kljuchej|Создаем нужные ключи]].
 +  * В директории ccd хранятся индивидуальные настройки для каждого клиента.<​file>​
 +mkdir /​etc/​openvpn/​ccd
 +</​file>​
 +===== Расширение сетевых границ VPN =====
 +Расширение границ VPN для включения дополнительных машин из подсетей на стороне клиента или сервера. Включение нескольких машин на стороне сервера при использовании маршрутизируемого VPN (dev tun)
 +
 +Поскольку VPN действует только в режиме точка-точка,​ может возникнуть желание расширить границы VPN так, чтобы клиенты могли связываться с другими машинами в сети сервера,​ а не только с самим сервером.
 +
 +Чтобы проиллюстрировать это примером,​ предположим,​ что в локальной сети на стороне сервера используется подсеть 10.66.0.0/​24 и для пула VPN-адресов используется 10.8.0.0/​24,​ о чем говорится в директиве server в файле конфигурации OpenVPN-сервера.
 +
 +Во-первых,​ вы должны сообщить VPN-клиентам,​ что подсеть 10.66.0.0/​24 доступна через VPN. Это легко можно сделать с помощью следующих директив в конфигурационном файле сервера:<​file>​
 +push "route 10.66.0.0 255.255.255.0"​
 +</​file>​
 +
 +Далее, необходимо настроить на LAN- шлюзе в сети сервера маршрут для маршрутизации пакетов,​ предназначенных для подсети VPN-клиентов (10.8.0.0/​24) через OpenVPN-сервер (это необходимо только тогда, когда сервер OpenVPN и LAN-шлюз -- разные машины).
 +
 +<note warning>​Убедитесь,​ что вы включили [[iptables#​nat|пересылку для IP (ip-forwarding)]] (параметр ядра net.ipv4.ip_forward должен быть равен 1) и TUN/TAP на машине OpenVPN-сервера.</​note>​
 +====== Безопасность OpenVPN ======
 +  * Используйте proto udp, потому что он по сравнению с TCP обеспечивает более надежную защиту от DoS-атак и сканирования портов.
 +  * Используйте [[HMAC]]
 +  * Запускайте демон OpenVPN сервера от имени непривилегированного пользователя:​ user nobody group nobody
 +
 +
 +====== Firewall iptables ======
 +Открываем [[UDP]] порт 1194 и разрешаем пакеты приходящие с интерфейса [[tap]] или tun.<​file>​
 +iptables -A INPUT -p udp --dport 1194 -j ACCEPT
 +iptables -A INPUT -i tap+ -j ACCEPT
 +or
 +iptables -A INPUT -i tun+ -j ACCEPT
 +</​file>​
 +
 +====== OpenVPN управление ======
 +
 +Для управления сервером OpenVPN существует не так много программ для управления пользователями.
 +
 +  * Модуль на основе Webmin: [[webmin?&#​openvpn_admin_module|OpenVpn Admin Module]] + пример настройки OpenVPN Server
 +  * [[https://​github.com/​deranjer/​OpenVPN-PHP-Management-Gui|OpenVPN-PHP-Gui]] MIT License
 +  * [[https://​github.com/​cyberorg/​openvpn-web-gui|Openvpn-web-gui]]
 +
 +====== Проблема PPPoE и OpenVPN ======
 +
 +**Проблема:​** Если сервер подключён к ISP при помощи технологии [[PPPoE]], в этом случае OpenVPN не сможет сделать доступными сети за подключённым клиентом. Не будет отрабатывать команда iroute. Это связано с тем, что PPP прописывает маршрут по умолчанию в таком виде:<​file>​
 +# netstat -rn
 +Kernel IP routing table              ​
 +Destination ​    ​Gateway ​        ​Genmask ​        ​Flags ​  MSS Window ​ irtt Iface
 +0.0.0.0 ​        ​0.0.0.0 ​        ​0.0.0.0 ​        ​U ​        0 0          0 ppp0
 +</​file>​Т.е. указывается маршрутом по умолчанию интерфейс (ppp0), а не IP адресс,​ такой записи сервер OpenVPN не понимает,​ для корректной работы сервера OpenVpn маршрут должен бы вида:<​file>​
 +# netstat -rn
 +Destination ​    ​Gateway ​        ​Genmask ​        ​Flags ​  MSS Window ​ irtt Iface
 +0.0.0.0 ​        ​91.196.96.35 ​   255.255.255.255 UGH       0 0          0 ppp0
 +</​file>​
 +**Решение:​** Исправить маршрут по умолчанию можно командой (соответственно указав нужный вам IP)
 +<​file>​
 +route add 0/0 gw 91.196.96.35
 +</​file>​
 +или в скрипте при загрузке системы,​ но после поднятия интерфейса ppp0
 +<​file>​
 +route del default
 +route add default gw 91.196.96.35 dev ppp0
 +</​file>​
 +
 +
 +====== Проблема OpenVPN + Virtualbox + Dnsmasq ======
 +
 +**Окружение:​** Клиент выходит в интернет с [[Ubuntu]] 14.04.3 LTS + [[Dnsmasq]] установленной в [[VirtualBox]]. Сеть установлена в VirtualBox как сетевой мост. IP получается от [[DHCP]] на интернет роутере (Netis WF2419R).
 +
 +**Проблема:​** Не работает **push "​dhcp-option DNS 10.26.95.254"​**. Соответственно все [[DNS]] Dnsmasq отсылает основному DNS серверу. Все бы ничего если бы клиенту не нужны локальные [[DNS]].
 +
 +**Решение:​** Был доустановлен основной пакет <file bash>
 +aptitude install dnsmasq
 +</​file>​добавлены описания наших локальных зон (non-public domains) в конфигурационный файл dnsmasq.conf<​file bash>
 +server=/​gaga.lan/​10.26.95.254
 +server=/​m86a.lan/​10.26.95.254
 +server=/​atlex.lan/​10.26.95.254
 +
 +server=/​95.26.10.in-addr.arpa/​10.26.95.254
 +server=/​168.192.in-addr.arpa/​10.26.95.254
 +server=/​85.161.10.in-addr.arpa/​10.26.95.254
 +</​file>​
 +====== Клиенты OpenVPN для разных ОС ======
 +
 +  * [[Клиент OpenVPN для Windows]]
 +  * [[Клиент OpenVPN для Android]]
 +  * Для Linux проще всего ставить этот же пакет OpenVPN, но настраивать его клиентом.<​file bash>
 +aptitude install openvpn
 +</​file>​Пример рабочего конфига для [[Ubuntu]] 14.04.3 LTS<file bash client.conf>​
 +client
 +proto udp
 +dev tun
 +ca ca.crt
 +dh dh2048.pem
 +cert client.crt
 +key client.key
 +remote xxx.xxx.xxx.xxx 1194
 +tls-auth ta.key 1
 +cipher AES-256-CBC
 +user nobody
 +group nogroup
 +verb 2
 +mute 20
 +keepalive 10 120
 +comp-lzo
 +persist-key
 +persist-tun
 +float
 +resolv-retry infinite
 +nobind
 +</​file>​
 +
 +====== Ротация логов OpenVPN ======
 +  * В файле /​etc/​logrotate.d/​openvpn прописываем настройки для [[logrotate]],​ ключевой параметр **copytruncate** (чтобы не перегружать OpenVPN и заставить его писать данные в тот же лог файл)<​file bash openvpn>
 +etc/​openvpn/​servers/​vpnluxor/​logs/​openvpn.log {
 +        daily
 +        rotate 8
 +        compress
 +        delaycompress
 +        missingok
 +        copytruncate
 +        notifempty
 +        create 640 root
 +}
 +</​file>​
 +
 +====== Ссылки ======
 +
 +  * [[http://​help.ubuntu.ru/​wiki/​openvpn|OpenVPN Ubuntu]]
 +  * [[http://​help.ubuntu.ru/​wiki/​%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/​%D1%87%D0%B0%D1%81%D1%82%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8/​openvpn|Ubuntu Server ​ OpenVPN]]
 +  * [[http://​tuxnotes.ru/​articles.php?​a_id=26|Описание команд и параметров OpenVPN]]
 +  * [[http://​lithium.opennet.ru/​articles/​openvpn/​openvpn-howto.html|OpenVPN HOWTO]]
  
загрузка...
openvpn.txt · Последние изменения: 2018/07/16 03:31 (внешнее изменение)