OpenVPN
Описание файлов (директория keys):
- Файлы *.csr — Запросы на подпись сертификатов (СЦ)
- Файлы №.pem — Дубликаты сертификатов для базы данных (СЦ)
- index.txt — База данных выданных сертификатов (СЦ) (время в формате ASN1_TIME)
- serial — Серийный (порядковый) номер последнего выданного сертификата (СЦ)
- crl.pem — Список отозванных сертификатов (СЦ)
- ca.crt — Корневой сертификат (СЦ/сервер/клиент)
- ca.key — Корневой ключ (СЦ)
- dh№.pem — Ключ Диффи Хельмана (сервер)
- server-name.crt — Сертификат X.509 сервера (сервер)
- server-name.key — Секретный ключ сервера (сервер)
- client-name.crt — Сертификат X.509 клиента (клиент)
- client-name.key — Секретный ключ клиента (клиент)
- ta.key — TLS-ключ (сервер/клиент)
Показать активные подключения:
cat /etc/openvpn/openvpn-status.log
Сервер
Установить:
sudo apt install openvpn easy-rsa
Настроить центр сертификации:
sudo mkdir /etc/openvpn/easy-rsa/ sudo cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/
Переменные по умолчанию для генерации сертификатов /etc/openvpn/easy-rsa/vars
Инициализировать PKI, cоздать корневой сертификат и ключ к нему:
cd /etc/openvpn/easy-rsa/ sudo ./easyrsa init-pki sudo ./easyrsa build-ca
Создать ключ Диффи-Хеллмана:
sudo ./easyrsa gen-dh
Создать сертификат и ключ сервера:
sudo ./easyrsa gen-req server1 nopass sudo ./easyrsa sign-req server server1
Создать клиентский сертификат:
cd /etc/openvpn/easy-rsa/ sudo ./easyrsa gen-req client1 nopass sudo ./easyrsa sign-req client client1
Генерировать TLS ключ для дополнительной защиты:
sudo openvpn --genkey tls-auth /etc/openvpn/server/ta.key
https://ubuntu.com/server/docs/how-to-install-and-use-openvpn
Разрешить forward:
sudo sed -i '/#net.ipv4.ip_forward/s/#//g' /etc/sysctl.conf sudo sysctl -p
Запустить:
systemctl start openvpn@server
Создание нескольких подключений
Опции
--tls-auth
При указании опции используется статический предварительный общий ключ (PSK), который должен генерироваться заранее и использоваться совместно всеми одноранговыми узлами. Эта функция добавляет «дополнительную защиту» к каналу TLS, требуя, чтобы входящие пакеты имели действительную подпись, сгенерированную с помощью ключа PSK. Значение 0/1 (–tls-auth ta.key 0/1) является произвольным и должно быть противоположным между одноранговыми узлами (или полностью опускаться).
--client-connect cmd
Запустить команду cmd при подключении клиента. Путь и аргументы могут быть заключены в одинарные или двойные кавычки и/или экранированы обратной косой чертой и должны быть разделены одним или несколькими пробелами. Команде передаются общее имя common_name и IP-адрес ifconfig_pool_remote_ip только что прошедшего проверку подлинности клиента в качестве переменных среды (https://build.openvpn.net/man/openvpn-2.6/openvpn.8.html#environmental-variables). Если script возвращает ненулевой статус ошибки, это приведет к отключению клиента.
https://serverfault.com/questions/1004991/adding-iptables-route-on-openvpn-connect
--ifconfig-pool-persist file [seconds]
Сохранять данные о IP адресе в файл с интервалом в несколько секунд (по умолчанию=600), а также при запуске и завершении работы программы. Формат файла (разделитель - запятая): <Common-Name>,<IP-address>. Если секунд = 0, файл будет доступен только для чтения и будет использоваться как файл конфигурации. Рассматривается как предложения, основанные на прошлых ассоциациях между общим именем и IP-адресом. Для гарантированного назначения, использовать –ifconfig-push
--ping-exit n
Приводит к завершению работы OpenVPN по истечении n секунд без получения сигнала ping или другого пакета с удаленного устройства. Эта опция может быть объединена с параметрами –inactive, –ping и –ping-exit для создания двухуровневого отключения при бездействии.
--inactive arg
Допустимый синтаксис: inactive n, inactive n bytes
Приводит к завершению работы OpenVPN после n секунд бездействия на устройстве TUN/TAP. Время бездействия измеряется с момента последнего входящего или исходящего туннельного пакета. Значение по умолчанию равно 0 секундам, что отключает эту функцию.
Если включен параметр bytes, то если за n секунд будет получено меньше байт входящего и исходящего трафика завершит работу. Внутренние ping-пакеты OpenVPN и контрольные пакеты TLS не считаются «активностью» и не учитываются как трафик.
Клиент
Автозапуск /etc/openvpn/MY_CONNECTION.conf:
systemctl enable openvpn@MY_CONNECTION systemctl start openvpn@MY_CONNECTION
Ошибки
TXT_DB error number 2
Возникает при создании сертификата с именем которое уже есть в базе и этот сертификат не отозван. При этом создается сертификат с нулевым размером.
Чтобы разрешить создавать новые сертификаты с существующими именами, меняем index.txt.attr на:
unique_subject = no
