Настройка OpenVPN клиента
Тематические термины: OpenVPN, VPN, Windows, Linux, CentOS, Ubuntu
В данной инструкции подробно описан процесс настройки клиента OpenVPN на примере операционных систем Windows и Linux. Также, с ее помощью можно настроить скиента на Android.
Установка
Настройка
Пример конфигурационного файла
Ключи
Сертификаты
Запуск
Несколько конфигураций
Сертификаты внутри ovpn файла
Отзыв сертификата
Читайте также
Установка
Windows
Заходим на официальную страницу загрузки openvpn и скачиваем клиента для нужной Windows:
Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».
Linux CentOS
Устанавливаем репозиторий EPEL:
yum install epel-release
Устанавливаем openvpn:
yum install openvpn
Linux Ubuntu
apt update
apt install openvpn
Android
Установка выполняется из Google Play. Набираем в поиске OpenVPN Connect - нажимаем установить и принимаем условия.
Настройка
После установки программы конфигурационный файл не создается автоматически и его нужно создать вручную.
В системах Windows создаем файл config.ovpn в папке %programfiles%\OpenVPN\config.
* имя файла может быть любым, расширение должно быть .ovpn.
Для создания конфигурационного файла в Linux выполняем команду:
vi /etc/openvpn/client.conf
* чтобы служба openvpn автоматически выполняла соединение, необходимо, чтобы конфигурационный файл назывался client.conf.
Пример конфигурационного файла
client
dev tun
proto udp
remote 192.168.0.15 443
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
dh dh2048.pem
tls-client
tls-auth ta.key 1
float
keepalive 10 120
comp-lzo
verb 0
Параметры конфигурационного файла
Параметр | Значения | Описание |
---|---|---|
client | Строка говорит о том, что конфигурационный файл описывает клиентское подключение (программа сама устанавливает соединение, а не ждет, как сервер). | |
dev | tap или tun | Выбор виртуального сетевого драйвера. TUN — сетевой уровень модели OSI, оперирует IP-пакетами. TAP — эмулирует Ethernet устройство и работает на канальном уровне модели OSI, оперируя кадрами Ethernet. Настраивая OpenVPN клиента, в большинстве случаев, необходимо выбирать tun. TAP необходимо использовать для работы определенных сервисов, например DHCP. |
dev-node | любая строка | Параметр используется в системах Windows в случаях, если имеется несколько сетевых интерфейсов. Значение этого параметра должно содержать название сетевого подключения, через который должен работать OpenVPN. |
proto | udp или tcp | Указывает, какой протокол использовать для передачи данных. В большинстве случаев, лучше использовать UDP, так как данный протокол создает меньше нагрузки на сеть. |
remote | VPN-сервер и порт | Задает сервер, к которому должен подключаться клиент, а также сетевой порт (по умолчанию 1194), на котором OpenVPN принимает запросы. Можно указать несколько строк. |
remote-random | Если указано несколько строк remote, данный параметр говорит, что необходимо подключаться к удаленным серверам в случайном порядке. | |
resolv-retry | количество секунд или infinite | Используется в тех случаях, когда в качестве сервера указано доменное имя. Параметр задает время в секундах для повторного переподключения, если не удалось узнать имя сервера. infinite — держать связь с сервером постоянно. |
nobind | Клиент использует динамический порт для подключения. | |
user | учетная запись | Задает определенного пользователя для работы клиента (только для UNIX-систем). |
group | группа | Задает определенную группу для работы клиента (только для UNIX-систем). |
persist-key | Не перечитывает ключи при перезагрузке сервиса OpenVPN. | |
persist-tun | Не перечитывает параметры туннеля при перезагрузке сервиса OpenVPN. | |
http-proxy | сервер прокси и порт | Использовать прокси-сервер для подключения. |
http-proxy-retry | Переподключаться к прокси-серверу, если связь была разорвана. | |
http-proxy-timeout | количество секунд | Время, через которое выполнять попытки переподключения к прокси-серверу. |
mute-replay-warnings | Параметр стоит задавать при использовании беспроводного соединения. Он отключит дублирование предупреждений пакетов. | |
ca | пут к сертификату | Корневой сертификат удостоверяющего центра. Генерируем на сервере. |
cert | пут к сертификату | Открытый ключ клиента. Генерируем на сервере. |
key | пут к сертификату | Закрытый ключ клиента. Генерируем на сервере. |
dh | пут к сертификату | Ключ с алгоритмом Diffie-Hellman (Диффи-Хеллмана). |
remote-cert-tls | сервер | Исключает возможность mitm атаки, включая верификацию сертификата сервера. |
tls-client | Указание на то, что это клиент TLS. | |
tls-auth | ta.key 1 | Дополнительный уровень аутентификации посредством ключа TLS. |
float | Удаленный хост может менять IP-адрес в процессе соединения, при этом последнее не будет разорвано. | |
keepalive | секунд1 секунд2 | Пинговать каждые секунд1 сервер и если в течение секунд2 не будут получены ответные пакеты, перезапустить подключение. |
cipher | алгоритм | Указывает алгоритм шифрования. Примеры: AES-256-CBC, AES-128-CBC, BF-CBC, DES-EDE3-CBC. |
comp-lzo | Использовать сжатие. | |
verb | число от 0 до 9 | Уровень детализации лога. 0 отключает отладочную информацию. |
mute | число | Указывает сколько лог-сообщений может отображаться для каждой категории события. |
auth-user-pass | ничего или путь к файлу | Говорит клиенту, что необходима аутентификация. Если не указан путь к файлу, клиент выкинет окно для авторизации, иначе прочитает данные из файла. |
ipchange | команда или путь к скрипту | Выполняет команду при смене IP. |
connect-retry | секунд | Переподключиться к серверу через указанное количество секунд, если соединение было разорвано. |
connect-retry-max | число | Сколько раз повторять соединение, если оно было разорвано. |
shaper | байт | Задает максимальную скорость передачи данных для исходящего трафика. |
tun-mtu | число | Задает MTU. |
status | путь к файлу | Путь к фалу хранения статуса. |
log | путь к файлу | Путь к лог-файлу. |
askpass | путь к файлу | Путь к файлу с паролем для приватного ключа (private key password). |
Наиболее полный и актуальный список параметров для OpenVPN можно получить командой openvpn --help (в Linux и Windows).
Сертификаты
Клиентские сертификаты генерируются на стороне сервера. Процедура следующая.
Для Linux:
cd /etc/openvpn/easy-rsa
. ./vars
./build-key client
Для Windows:
cd %ProgramFiles%\OpenVPN\easy-rsa
vars.bat
build-key.bat client
* в выше приведенных примерах был сгенерирован клиентский сертификат client. Более подробно про создание сертификатов для клиентов читайте на страницах настройка openvpn на Windows и настройка openvpn на CentOS.
Сгенерированные ключи появятся в каталоге keys. Их необходимо скопировать на клиентский компьютер вместе с сертификатами сервера и разместить по каталогам, указанным в конфигурационном файле. В нашем примере они должны быть скопированы в ту же папку, в которой находится сам файл конфигурации.
В итоге мы получаем, примерно, следующее.
Для Windows:
Для Linux:
ls /etc/openvpn/client/
ca.crt client.crt client.key client.conf dh2048.pem ta.key
Запуск
Для проверки можно запустить клиента вручную. Но для повседневного использования стоит настроить автоматический запуск.
Вручную
На Windows:
Запускаем OpenVPN GUI от имени администратора — в правом нижнем углу появится иконка программы:
Кликаем по ней правой кнопкой мыши и выбираем Подключиться:
На Linux:
Переходим в каталог с конфигурационным файлом:
cd /etc/openvpn
Вводим команду:
openvpn --config /etc/openvpn/client.conf
или:
systemctl start openvpn@client
* также служба может называться openvpn.
Автоматически
На Windows:
Выполняем 2 действия.
1. Наш конфигурационный файл с сертификатами переносим из каталога config в каталог config-auto:
* в старых версиях клиента каталога config-auto нет — тогда оставляем файлы в config.
2. Открываем службы и находим OpenVPNService. Переводим его в режим автозапуска:
На Linux:
Разрешаем автозапуск службы:
systemctl enable openvpn@client
или для старых версий.
CentOS / Red Hat / Fedora:
chkconfig openvpn on
Ubuntu / Debian:
update-rc.d openvpn defaults
Несколько конфигурационных файлов
Позволит держать несколько конфигураций для подключения к различным VPN-серверам. Между последними можно переключаться из клиентской программы.
Для Windows:
В каталоге config создаем для каждого сервера свою папку и помещаем в нее рабочие файлы (файл конфигурации, сертификаты и так далее). В каждой папке называем конфигурационные файлы ovpn своими именами (даже если файлы будут находиться в разных папках, но с одинаковыми именами, клиент OpenVPN будет воспринимать их как один конфиг).
Пример каталога config:
Пример файлов в одном из каталогов:
Теперь при подключении клиентом к можно выбрать конкретный VPN-сервер:
Для Linux:
Также как для Windows, создаем для каждого сервера свой каталог, куда скопируем рабочие файлы:
mkdir /etc/openvpn/server1
А в каталоге /etc/openvpn создаем для каждого подключения свой конфиг:
vi /etc/openvpn/client1.conf
* в конфигурационном файле все пути до файлов должны вести в соответствующий каталог (в нашем примере, /etc/openvpn/server1).
Запускаем OpenVPN:
openvpn --config /etc/openvpn/server1/client.conf
Для автоматического запуска мы уже ранее применяли команду:
systemctl enable openvpn@client
... где @client — указатель на использование конфигурационного файла client внутри папки openvpn (/etc/openvpn). Таким образом, если мы создали 2 файла client1.conf и client2.conf, команды для разрешения автозапуска бelen такие:
systemctl enable openvpn@client1
systemctl enable openvpn@client2
Сертификаты внутри конфигурационного файла
Ключи сертификатов можно хранить не в отдельных файлах, а внутри конфигурационного файла ovpn.
...
key-direction 1
<ca>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</ca>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
...
-----END OpenVPN Static key V1-----
</tls-auth>
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
</key>
<dh>
-----BEGIN DH PARAMETERS-----
...
-----END DH PARAMETERS-----
</dh>
* key-direction 1 — необходим для tls-auth, в противном случае, работать не будет; ca — ключ центра сертификации (ca.crt); tls-auth — ta.key; cert — открытый сертификат клиента (clients.crt); key — закрытый сертификат клиента (clients.key); dh — сертификат, созданный на базе протокола Диффи Хеллмана.
Отзыв сертификата
Для Linux:
cd /etc/openvpn/easy-rsa
. ./vars
./revoke-full client
Для Windows:
cd %ProgramFiles%\OpenVPN\easy-rsa
vars.bat
revoke-full.bat client
* с помощью данных манипуляций мы отзываем сертификат client.
Читайте также
Настройка OpenVPN сервера с включением аутентификации через LDAP (Active Directory)
Настройка доступа к локальной сети клиентам OpenVPN в CentOS 7