Настройка OpenVPN
Алгоритм настройки
Для создания VPN соединения между сервером и клиентом вам потребуется:
-
Создать сертификатов для клиента и сервера, Diffie-Hellman key
-
Передать на хосты
клиентаисервераследующие файлы:- Открытый ключ ЦС который подписывал сертификаты клиента и сервера
- Пару ключей клиента для клиента, или пару ключей сервера для сервера
- Ключ Diffie-Hellman
-
Настроить сервер OpenVPN для приёма соединений
-
Настроить клиент OpenVPN на соединение с сервером
-
Проверить работоспособность
Настройка
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.0Site-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 соединений нужен только адрес клиента и сеть