openvpn

Настройка OpenVPN

Алгоритм настройки

Для создания VPN соединения между сервером и клиентом вам потребуется:

  1. Создать сертификатов для клиента и сервера, Diffie-Hellman key

  2. Передать на хосты клиента и сервера следующие файлы:

    1. Открытый ключ ЦС который подписывал сертификаты клиента и сервера
    2. Пару ключей клиента для клиента, или пару ключей сервера для сервера
    3. Ключ Diffie-Hellman
  3. Настроить сервер OpenVPN для приёма соединений

  4. Настроить клиент OpenVPN на соединение с сервером

  5. Проверить работоспособность

Настройка

Diffie-Hellman

ВАЖНО используйте разный CommonName для сертификатов  Остальные команды для сертификатов

# Diffie-Hellman
openssl dhparam -out dh.pem 2048

Установка OpenVPN

apt install openvpn -y

Настройка OpenVPN сервера

Шаблон конфигурации хранится в каталоге: /usr/share/doc/openvpn/examples/sample-config-files/server.conf

Файл с настройками сервера необходимо поместить в каталог /etc/openvpn/ с именем server.conf и привести к следующему виду:

# откуда принимать запросы
local 1.1.1.1
 
# порт
port 1194
 
# протокол udp или tcp
proto udp
 
# tun или tap установливает тип соединения
dev tun
 
# Сертификаты, ключи и тд
ca ca.crt
cert /etc/pki/CA/server.crt
key /etc/pki/CA/server.key
dh /etc/pki/CA/dh.pem
 
# сеть клиентов, не настоящая а выдуманная
server 10.8.0.0 255.255.255.0
 
#---------- site-to-site -------------#
# Чтобы сети видели друг-друга 192.168.1.0/24, а не только 1 устройство
 
# папка с клиентами
client-config-dir ccd
 
# разрешить меж клиентский трафик
client-to-client
 
# Адрес сети удаленного клиента
route 192.168.1.0 255.255.255.0

Site-to-site

Создать файл с именем CommonName сертификата вашего клиента по следующему пути: /etc/openvpn/ccd/<certificate_common_name>, с содержимым:

# Что-то типо подверждения удаленной сети
iroute 192.168.1.0 255.255.255.0
 
# отдаем свои сети
push "route 192.168.2.0 255.255.255.0"
 
# адреса и сеть для клиента и сервера (из опции server) 
ifconfig-push 10.8.0.5 10.8.0.6 255.255.255.252

Настройка OpenVPN клиента

Крайне важно что б протоколы, порты и алгоритмы сжатия были сходны на клиенте и сервере. Следите за этим внимательно.

Пример конфигурации клиента так же лежит в каталоге /usr/share/doc/openvpn/examples/sample-config-files/client.conf и его необходимо поместить в каталог /etc/openvpn/ с тем же именем файла.

Настройки клиента не отличаются для RemoteAccess и для Site-to-Site

# указываем что он клиент
client
 
# tun или tap установливает тип соединения
dev tun
 
# протокол udp или tcp
proto udp
 
# адрес сервера и порт 
remote 1.1.1.1 1194
 
# сертификаты
ca ca.crt
cert client.crt
key client.key

Запуск

# Для сервера
systemctl start openvpn@server
 
# Для клиента
systemctl start openvpn@client
 
# При этом server и client это server.conf и client.conf, т.е название файла.

Конфигурационный файл

Шаблон конфигурации хранится в каталоге: /usr/share/doc/openvpn/examples/sample-config-files/server.conf

Файл с настройками сервера необходимо поместить в каталог /etc/openvpn/ с именем server.conf и привести к следующему виду:

# Дополнительно указываем что он клиент
client
 
# откуда принимать запросы
local 1.1.1.1
 
# порт
port 1194
 
# протокол udp или tcp
proto udp
 
# tun или tap установливает тип соединения
dev tun
 
# Сертификаты, ключи и тд
ca ca.crt
cert /etc/pki/CA/server.crt
key /etc/pki/CA/server.key
dh /etc/pki/CA/dh.pem
 
# сеть клиентов
server 10.8.0.0 255.255.255.0
 
# Для клиента. Адрес сервера и порт
remote 1.1.1.1 1194
 
# папка с клиентами
client-config-dir ccd
 
# разрешить меж клиентский трафик
client-to-client
 
# Адрес сети удаленного клиента
route 192.168.1.0 255.255.255.0
 
# заставляем клиента проперять подлинность сертификата
# если на сертификате не стоит пароля нужно удалить, иначе ошибку даст
remote-cert-tls server
  • local 1.1.1.1 - ip интерфейса откуда принимаем запросы

  • port 1194 - порт на котором мы будем ожидать клиентов

  • proto udp - протокол который будет использоваться.

    • Следует учитывать что некоторые клиенты могут не поддерживать работу по udp, но в целом это более предпочтительный протокол, поскольку он снижает накладные расходы, а за целостность данных отвечают другие службы
  • dev tun - либо tap - устанавливает тип соединения между устройствами.

    • tun - соединения третьего уровня, предпочтительно если вы обеспечиваете доступ клиентам к вашим внутренним службам в одном направлении

    • tap - соединения второго уровня, сервер выступает в роли коммутатора и все клиенты будут находиться в одной сети.

  • ca /etc/pki/CA/ca.crt , cert /etc/pki/CA/server.crt, key /etc/pki/CA/server.key, dh /etc/pki/CA/dh.pem - пути к ключам и сертификатам. Рекомендуется использовать абсолютные пути на сервере и относительные на клиенте

  • server 10.8.0.0 255.255.255.0 - сеть которая будет выделяться клиентам

  • client-config-der ccd - указание каталога по пути /etc/openvpn/ccd в котором будут храниться специфичные настройки для каждого сервера

  • client-to-client - разрешить меж клиентский трафик

  • route - маршрут в сеть клиента


Файл с именем CommonName сертификата вашего клиента по следующему пути: /etc/openvpn/ccd/<certificate_common_name> нужен для подключения site-to-site

# Что-то типо подверждения удаленной сети
iroute 192.168.1.0 255.255.255.0
 
# отдаем свои сети
# если надо несколько сетей, несколько раз прописать push
push "route 192.168.2.0 255.255.255.0"
 
# адреса и сеть для клиента и сервера (из опции server) 
ifconfig-push 10.8.0.5 10.8.0.6 255.255.255.252
    • route - маршрут в сеть клиента
  • push “route ” - добавить клиенту наши сети

  • ifconfig-push - указать адрес и сеть для клиента и сервера

    • Возможно для L2 соединений нужен только адрес клиента и сеть