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

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


how-to:openvpn

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

Конфигурация

Конфигурация

port 1194
proto udp4
dev tun0

ca easy-rsa/pki/ca.crt
cert easy-rsa/pki/issued/server.crt
key easy-rsa/pki/private/server.key
dh easy-rsa/pki/dh.pem

server 192.168.0.0 255.255.255.0

client-config-dir ccd
client-to-client

persist-tun
persist-key
user nobody
group nogroup
status openvpn-status.log
#log-append /var/log/openvpn/openvpn.log
tls-auth ta.key 0
cipher AES-256-GCM
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305:AES-256-CBC
keepalive 10 60
#crl-verify crl.pem
daemon
topology subnet


Запустить:

systemctl start openvpn@server

Создание нескольких подключений

Опции

--tls-auth

При указании опции используется статический предварительный общий ключ (PSK), который должен генерироваться заранее и использоваться совместно всеми одноранговыми узлами. Эта функция добавляет «дополнительную защиту» к каналу TLS, требуя, чтобы входящие пакеты имели действительную подпись, сгенерированную с помощью ключа PSK. Значение 0/1 (–tls-auth ta.key 0/1) является произвольным и должно быть противоположным между одноранговыми узлами (или полностью опускаться).

http://community.openvpn.net/openvpn/wiki/Hardening

--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

Ссылки

how-to/openvpn.txt · Последнее изменение: 127.0.0.1