Вчера немного успел застать вебинара Ребрейн про OpenVPN. Попал на самый конец, но всё равно успел получить очень полезную для себя информацию, которой поделюсь с вами.
1️⃣ Первое прям открытие для меня — параметр ccd-exclusive. Если установлен этот параметр, то пользователь даже при наличие актуального сертификата сможет пройти аутентификацию только в том случае, если для него существует файл конфигурации пользователя в директории, заданной параметром client-config-dir.
Объясняю, зачем это может понадобиться. Чтобы запретить подключения какому-то пользователю, необходимо отозвать его сертификат, подготовить файл отозванных сертификатов и прописать их в конфигурации сервера с помощью параметра crl-verify. И после каждого отзыва файл надо перезаписывать.
С помощью ccd-exclusive можно отключать пользователей, просто удаляя их файл конфигурации. Я лично их почти всегда использую. Даже если там нет отдельных параметров, привык создавать эти файлы пустыми, чтобы для каждого пользователя был его файл конфигурации. На основе этих файлов делаю мониторинг подключений openvpn.
Да, сертификаты отключенных пользователей всё равно надо отзывать. Так правильно. Но можно это делать разово по регламенту, к примеру, раз в месяц. А если надо просто отключить пользователя, удаляем ему файл конфигурации и всё. Это намного проще и удобнее. Потом можно его снова вернуть и пользователь сможет подключиться с тем же сертификатом.
Лет 10 активно использую openvpn, а этот параметр никогда не попадался на глаза. Не знал, что так можно было сделать.
2️⃣ Работы по переводу OpenVPN из контекста пользователя в ядро Linux ведутся. Более того, модуль ядра уже написан и он реально работает. Пока ещё его не добавили в популярные дистрибутивы. Скорее всего это рано или поздно состоится. Уже сейчас можно скачать исходники модуля, скомпилировать их и всё заработает с некоторыми ограничениями по параметрам. К примеру, при обработке ядром не работает сжатие.
Поясню, в чём тут проблема. OpenVPN работает в пространстве пользователя, в отличите от WireGuard, которая обрабатывается напрямую в ядре Linux. Этим объясняется её быстродействие. Разработчики OpenVPN озадачились и решили тоже перенести обработку в ядро и написали свой модуль для этого. Так что в скором времени большой разницы в скоростях между OpenVPN и Wireguard не должно быть.
#openvpn
1️⃣ Первое прям открытие для меня — параметр ccd-exclusive. Если установлен этот параметр, то пользователь даже при наличие актуального сертификата сможет пройти аутентификацию только в том случае, если для него существует файл конфигурации пользователя в директории, заданной параметром client-config-dir.
Объясняю, зачем это может понадобиться. Чтобы запретить подключения какому-то пользователю, необходимо отозвать его сертификат, подготовить файл отозванных сертификатов и прописать их в конфигурации сервера с помощью параметра crl-verify. И после каждого отзыва файл надо перезаписывать.
С помощью ccd-exclusive можно отключать пользователей, просто удаляя их файл конфигурации. Я лично их почти всегда использую. Даже если там нет отдельных параметров, привык создавать эти файлы пустыми, чтобы для каждого пользователя был его файл конфигурации. На основе этих файлов делаю мониторинг подключений openvpn.
Да, сертификаты отключенных пользователей всё равно надо отзывать. Так правильно. Но можно это делать разово по регламенту, к примеру, раз в месяц. А если надо просто отключить пользователя, удаляем ему файл конфигурации и всё. Это намного проще и удобнее. Потом можно его снова вернуть и пользователь сможет подключиться с тем же сертификатом.
Лет 10 активно использую openvpn, а этот параметр никогда не попадался на глаза. Не знал, что так можно было сделать.
2️⃣ Работы по переводу OpenVPN из контекста пользователя в ядро Linux ведутся. Более того, модуль ядра уже написан и он реально работает. Пока ещё его не добавили в популярные дистрибутивы. Скорее всего это рано или поздно состоится. Уже сейчас можно скачать исходники модуля, скомпилировать их и всё заработает с некоторыми ограничениями по параметрам. К примеру, при обработке ядром не работает сжатие.
Поясню, в чём тут проблема. OpenVPN работает в пространстве пользователя, в отличите от WireGuard, которая обрабатывается напрямую в ядре Linux. Этим объясняется её быстродействие. Разработчики OpenVPN озадачились и решили тоже перенести обработку в ядро и написали свой модуль для этого. Так что в скором времени большой разницы в скоростях между OpenVPN и Wireguard не должно быть.
#openvpn
June 8, 2023
Любопытный проект для поднятия VPN сервера на базе OpenVPN в пару кликов — dockovpn. Собран на базе Docker, не хранит ни логов, ни своего состояния. То есть запустили, получили конфиг пользователя, попользовались, остановили контейнер, всё удалилось. При желании, конфиги можно сделать постоянными.
Запускаете вот так:
Если 80-й порт на хосте занят, выберите любой другой. Он нужен для того, чтобы после запуска контейнера на нём поднялся web сервер. Обратившись по его адресу, вы скачиваете конфиг клиента и после этого веб сервер завершает свою работу.
Далее отдаёте этот конфиг любому клиенту OpenVPN и подключаетесь. На сервере должен быть белый IP адрес. Dockovpn использует его для работы openvpn. Если не хотите, чтобы после остановки контейнера удалялся клиентский конфиг, запустите его с volume, где будут храниться конфигурации:
Я посмотрел исходники проекта. Там нет ничего особенного. Обычная настройка openvpn сервера, правил iptables и генерация сертификатов с помощью easy-rsa. В репозитории есть Dockerfile и все скрипты с конфигами. Можете собрать контейнер сами, если не доверяете готовому:
Идеальный инструмент для запуска в виртуалках с почасовой оплатой. Не задаёт никаких вопросов. Запустили, попользовались, погасили. Хотя для личного пользования можно и на постоянку оставить, если не хочется заморачиваться с установкой и настройкой. Там вполне адекватный конфиг, можно посмотреть в директории dockovpn/config. Используются DNS сервера OpenDNS. Можно их заменить на какие-то свои, если есть необходимость.
⇨ Исходники
#openvpn
Запускаете вот так:
# docker run -it --rm --cap-add=NET_ADMIN \
-p 1194:1194/udp -p 80:8080/tcp \
-e HOST_ADDR=$(curl -s https://api.ipify.org) \
--name dockovpn alekslitvinenk/openvpn
Если 80-й порт на хосте занят, выберите любой другой. Он нужен для того, чтобы после запуска контейнера на нём поднялся web сервер. Обратившись по его адресу, вы скачиваете конфиг клиента и после этого веб сервер завершает свою работу.
Далее отдаёте этот конфиг любому клиенту OpenVPN и подключаетесь. На сервере должен быть белый IP адрес. Dockovpn использует его для работы openvpn. Если не хотите, чтобы после остановки контейнера удалялся клиентский конфиг, запустите его с volume, где будут храниться конфигурации:
# docker run -it --rm --cap-add=NET_ADMIN \
-p 1194:1194/udp -p 80:8080/tcp \
-e HOST_ADDR=$(curl -s https://api.ipify.org) \
-v openvpn_conf:/opt/Dockovpn_data \
--name dockovpn alekslitvinenk/openvpn
Я посмотрел исходники проекта. Там нет ничего особенного. Обычная настройка openvpn сервера, правил iptables и генерация сертификатов с помощью easy-rsa. В репозитории есть Dockerfile и все скрипты с конфигами. Можете собрать контейнер сами, если не доверяете готовому:
# git clone https://github.com/dockovpn/dockovpn
# cd dockovpn
# # docker build -t dockovpn .
Идеальный инструмент для запуска в виртуалках с почасовой оплатой. Не задаёт никаких вопросов. Запустили, попользовались, погасили. Хотя для личного пользования можно и на постоянку оставить, если не хочется заморачиваться с установкой и настройкой. Там вполне адекватный конфиг, можно посмотреть в директории dockovpn/config. Используются DNS сервера OpenDNS. Можно их заменить на какие-то свои, если есть необходимость.
⇨ Исходники
#openvpn
July 4, 2023
Популярный вопрос по поводу OpenVPN. Как на одном сервере с несколькими внешними IP адресами настроить независимую работу VPN на каждом IP адресе. Сделать это очень просто. Фактически, это штатная работа службы OpenVPN, даже ничего колхозить не придётся.
Настраиваете OpenVPN как обычно для одного IP адреса. Допустим, вся конфигурация у вас описана в
Теперь добавим ещё один сервер и запустим 2 экземпляра OpenVPN, каждый на своём внешнем ip. Для этого в конфигурацию
Копируем этот конфиг для запуска второго сервера:
В него добавляем свои параметры:
Все остальные настройки могут быть как идентичными первому серверу, в том числе использовать те же сертификаты и CA, так и совершенно разными. Они между собой никак не будут связаны. Это будут два отдельных сервера OpenVPN. Запускаем второй сервер:
Проверяем:
Таким же образом вы можете копировать конфигурации сервера и запускать разные туннели на разных портах, с разным шифрованием, настройками и т.д. Если у вас есть возможность докупать внешние IP на VPS, то вы сможете настроить многофункциональный VPN сервер под любые запросы. Это очень удобно. К тому же просто и быстро настраивается. И так же потом обслуживается. Каждый туннель можно настроить на свой лог файл, свою статистику и т.д. Всё это мониторить, анализировать, ограничивать доступ к каким-то туннелям, настраивать для них правила файрвола, разным туннелям пушить разные маршруты, разные настройки пользователям. В общем, красота. Я не знаю, где ещё подобные вещи настраиваются так же легко и просто.
#openvpn #vpn
Настраиваете OpenVPN как обычно для одного IP адреса. Допустим, вся конфигурация у вас описана в
/etc/openvpn/server/server1.conf
. Запускаете вы этот сервер так (если установили в Debian из базовых реп):# systemctl start openvpn-server@server1.service
Теперь добавим ещё один сервер и запустим 2 экземпляра OpenVPN, каждый на своём внешнем ip. Для этого в конфигурацию
server1.conf
добавляем параметр local, указав внешний IP адрес, и сразу обозначим tun интерфейс, на котором он будет работать и адресное пространство этого туннеля:local 1.2.3.4
dev tun1
server 10.8.1.0 255.255.255.0
Копируем этот конфиг для запуска второго сервера:
# cp server1.conf server2.conf
В него добавляем свои параметры:
local 4.3.2.1
dev tun2
server 10.8.2.0 255.255.255.0
Все остальные настройки могут быть как идентичными первому серверу, в том числе использовать те же сертификаты и CA, так и совершенно разными. Они между собой никак не будут связаны. Это будут два отдельных сервера OpenVPN. Запускаем второй сервер:
# systemctl start openvpn-server@server2.service
Проверяем:
# ip a | grep 'global tun'
inet 10.8.1.1/24 scope global tun1
inet 10.8.2.1/24 scope global tun2
# netstat -tulnp | grep openvpn
udp 0 0 1.2.3.4:1194 0.0.0.0:* 1330/openvpn
udp 0 0 4.3.2.1:1194 0.0.0.0:* 1321/openvpn
Таким же образом вы можете копировать конфигурации сервера и запускать разные туннели на разных портах, с разным шифрованием, настройками и т.д. Если у вас есть возможность докупать внешние IP на VPS, то вы сможете настроить многофункциональный VPN сервер под любые запросы. Это очень удобно. К тому же просто и быстро настраивается. И так же потом обслуживается. Каждый туннель можно настроить на свой лог файл, свою статистику и т.д. Всё это мониторить, анализировать, ограничивать доступ к каким-то туннелям, настраивать для них правила файрвола, разным туннелям пушить разные маршруты, разные настройки пользователям. В общем, красота. Я не знаю, где ещё подобные вещи настраиваются так же легко и просто.
#openvpn #vpn
August 15, 2023
В современном интернете очень активно используется протокол шифрования TLS. Чаще всего с ним сталкиваешься в HTTPS, VPN, STARTTLS (imap и smtp в основном). В Linux (и Unix в целом) этот протокол в основном реализован посредством OpenSSL. Это библиотека libssl и утилита командной строки openssl. Работа с этой утилитой настоящий вынос мозга. Там море всяких ключей, длиннющих конструкций и команд. Сталкиваться с этим напрямую приходится, например, при настройке своего OpenVPN сервера.
Чтобы упростить задачу управления сертификатами с помощью OpenSSL, придумали набор скриптов EasyRSA, которые даже в винду портировали. Именно с ними я всегда взаимодействовал, когда нужно было создать CA, серверные и клиентские ключи для OpenVPN (вот пример из моей статьи). Да и не только. Для всех подобных задач использовал EasyRSA и не знал, что есть инструменты проще.
В одном из комментариев увидел информацию, что есть CFSSL. Это утилита от cloudflare, с помощью которой можно создать и управлять CA, только без лишних костылей и подпорок. У неё вполне простой и понятный CLI, которым пользоваться в разы удобнее и проще, чем у openssl. Покажу сразу на примере создания CA и выпуска сертификатов для нужд OpenVPN сервера. Использую потом эту заметку при очередном обновлении статьи (уже назрело).
CFSSL это просто бинарник, скомпилированный из исходников на GO. В репозиториях Debian 12 он живёт под названием
Версия почему-то очень древнючая - 1.2.0, когда в репе уже 1.6.4 есть. Можно вручную скачать свежий бинарник.
Для cfssl нужно готовить конфиги в формате json. Сделать это нужно будет 1 раз. Интерактивного ввода, как у easyrsa, как я понял, нет. Готовим простой конфиг для выпуска СА:
Сохранили с именем
Генерируем ключ для CA:
Получили 3 файла:
▪ ca-key.pem - приватный ключ для подписи сертификатов
▪ ca.pem - сам сертификат удостоверяющего центра
▪ ca.csr - запрос на сертификат
Подготовим конфиг профилей, которые нужны будут для сертификата сервера и клиентов:
Сохранили с именем ca.json. И делаем конфиг для запроса, такой же как для CA, только секцию с CA убираем:
Сохранили с именем csr.json. Выпускаем сертификат сервера:
Получили 3 файла:
Выпускаем сертификат для клиента:
Проверяем:
Вот и всё. Подготовили удостоверяющий центр и выпустили сертификаты клиента и сервера. Выглядит действительно удобнее и проще EasyRSA.
#security #openvpn
Чтобы упростить задачу управления сертификатами с помощью OpenSSL, придумали набор скриптов EasyRSA, которые даже в винду портировали. Именно с ними я всегда взаимодействовал, когда нужно было создать CA, серверные и клиентские ключи для OpenVPN (вот пример из моей статьи). Да и не только. Для всех подобных задач использовал EasyRSA и не знал, что есть инструменты проще.
В одном из комментариев увидел информацию, что есть CFSSL. Это утилита от cloudflare, с помощью которой можно создать и управлять CA, только без лишних костылей и подпорок. У неё вполне простой и понятный CLI, которым пользоваться в разы удобнее и проще, чем у openssl. Покажу сразу на примере создания CA и выпуска сертификатов для нужд OpenVPN сервера. Использую потом эту заметку при очередном обновлении статьи (уже назрело).
CFSSL это просто бинарник, скомпилированный из исходников на GO. В репозиториях Debian 12 он живёт под названием
golang-cfssl
:# apt install golang-cfssl
Версия почему-то очень древнючая - 1.2.0, когда в репе уже 1.6.4 есть. Можно вручную скачать свежий бинарник.
Для cfssl нужно готовить конфиги в формате json. Сделать это нужно будет 1 раз. Интерактивного ввода, как у easyrsa, как я понял, нет. Готовим простой конфиг для выпуска СА:
{
"CN": "My Root CA",
"key": {
"algo": "rsa",
"size": 2048
},
"ca": {
"expiry": "87600h"
},
"names": [
{
"C": "RU",
"L": "Moscow",
"O": "Serveradmin Company",
"OU": "OpenVPN",
"ST": "Moscow"
}
]
}
Сохранили с именем
ca-csr.json
. Тут срок действия стоит 10 лет. Кажется, что много. Но на самом деле у меня лично был случай, когда 10-ти летний CA протух.Генерируем ключ для CA:
# mkdir keys && cd keys
# cfssl gencert -initca ca-csr.json | cfssljson -bare ca
Получили 3 файла:
▪ ca-key.pem - приватный ключ для подписи сертификатов
▪ ca.pem - сам сертификат удостоверяющего центра
▪ ca.csr - запрос на сертификат
Подготовим конфиг профилей, которые нужны будут для сертификата сервера и клиентов:
{
"signing": {
"profiles": {
"server": {
"expiry": "87600h",
"usages": [
"digital signature",
"key encipherment",
"server auth"
]
},
"client": {
"expiry": "87600h",
"usages": [
"signing",
"client auth"
]
}
}
}
}
Сохранили с именем ca.json. И делаем конфиг для запроса, такой же как для CA, только секцию с CA убираем:
{
"CN": "My Root CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "RU",
"L": "Moscow",
"O": "Serveradmin Company",
"OU": "OpenVPN",
"ST": "Moscow"
}
]
}
Сохранили с именем csr.json. Выпускаем сертификат сервера:
# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem \
-config=ca.json -profile="server" \
-cn="openvpn.server.local" -hostname="openvpn" \
csr.json | cfssljson -bare server
Получили 3 файла:
# ls | grep server
server.csr
server-key.pem
server.pem
Выпускаем сертификат для клиента:
# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem \
-config=ca.json -profile="client" \
-cn="client01" -hostname="User 01" \
csr.json | cfssljson -bare client01
Проверяем:
# ls | grep client01
client01.csr
client01-key.pem
client01.pem
Вот и всё. Подготовили удостоверяющий центр и выпустили сертификаты клиента и сервера. Выглядит действительно удобнее и проще EasyRSA.
#security #openvpn
November 3, 2023
Сколько лет использую OpenVPN, а только недавно случайно узнал, что он умеет в маршрутах использовать не только ip адреса, но и fqdn, то есть доменные имена. Для этого есть параметр allow-pull-fqdn.
Увидел упоминание этого параметра случайно. Решил сразу попробовать, как он работает. И так, и сяк его на сервере применял, не работает. Оказалось, что это параметр клиента и автоматически передать его через push нельзя. То есть надо явно в конфиг клиента прописать:
И после этого ему можно пушить маршруты с сервера в таком виде:
При подключении к openvpn серверу клиент получит маршруты и если там будет указан домен, автоматически отрезолвит этот домен в IP адрес и добавит его в таблицу маршрутизации. Так что никакой магии тут нет, openvpn в реальности не умеет оперировать доменами в маршрутах. Он просто чуть упрощает задачу, делая автоматически резолв. Тем не менее, даже в таком виде это довольно удобно. Буду применять.
Для тех, кто не знаком с OpenVPN, поясню подробнее, что это такое. Вы можете на сервере в настройках клиента, каждому в отдельности настраивать маршруты, по которым он будет ходить через vpn сервер. Это очень удобная возможность, так как не надо менять конфигурацию клиента. Всё управление маршрутами происходит централизованно на сервере. А с помощью описанного параметра, вы любому клиенту можете указать, что на такой-то сайт ходи через vpn сервер. Самому клиенту при этом ничего настраивать не надо. Он просто переподключится и получит обновлённые маршруты. У WireGuard такой возможности нет. Ему надо каждый раз конфиг обновлять, когда вносятся изменения в маршрутизацию.
#openvpn
Увидел упоминание этого параметра случайно. Решил сразу попробовать, как он работает. И так, и сяк его на сервере применял, не работает. Оказалось, что это параметр клиента и автоматически передать его через push нельзя. То есть надо явно в конфиг клиента прописать:
allow-pull-fqdn
И после этого ему можно пушить маршруты с сервера в таком виде:
push "route whoer.net 255.255.255.255"
При подключении к openvpn серверу клиент получит маршруты и если там будет указан домен, автоматически отрезолвит этот домен в IP адрес и добавит его в таблицу маршрутизации. Так что никакой магии тут нет, openvpn в реальности не умеет оперировать доменами в маршрутах. Он просто чуть упрощает задачу, делая автоматически резолв. Тем не менее, даже в таком виде это довольно удобно. Буду применять.
Для тех, кто не знаком с OpenVPN, поясню подробнее, что это такое. Вы можете на сервере в настройках клиента, каждому в отдельности настраивать маршруты, по которым он будет ходить через vpn сервер. Это очень удобная возможность, так как не надо менять конфигурацию клиента. Всё управление маршрутами происходит централизованно на сервере. А с помощью описанного параметра, вы любому клиенту можете указать, что на такой-то сайт ходи через vpn сервер. Самому клиенту при этом ничего настраивать не надо. Он просто переподключится и получит обновлённые маршруты. У WireGuard такой возможности нет. Ему надо каждый раз конфиг обновлять, когда вносятся изменения в маршрутизацию.
#openvpn
February 14, 2024
Для OpenVPN на первый взгляд кажется, что существует много различных веб панелей. Но когда начинаешь в них разбираться, оказывается, что одна платная, а бесплатная версия урезана, другая уже давно не поддерживается, третья в какой-то своей логике всем управляет и хранит данные. На деле выбирать особо то и не из чего. Я когда-то давно собрал список известных мне панелей:
⇨ Управление OpenVPN сервером через web интерфейс
Сегодня покажу ещё один вариант, который поначалу показался каким-то костыльным из-за недостатка документации, но когда немного разобрался, решение понравилось. Речь пойдёт про open source проект от известного аутсорсера flant - ovpn-admin.
📌 У ovpn-admin следующие возможности:
◽️Запуск через одиночный бинарник с передачей всех параметров через ключи. Есть готовый контейнер для автоматического запуска. Я тестировал в нём.
◽️Веб интерфейс для добавления и удаления пользователей, просмотра статуса их подключения и передачи маршрутов
◽️Экспортер для Prometheus и шаблон для Grafana с метриками: срок жизни сертификата, кол-во подключенных пользователей, информация о подключенных пользователях (время подключения, ip адрес, трафик)
◽️Подключение пользователем с использованием пароля или без, возможность скачать готовый конфиг сразу с включённым в него сертификатом
◽️Helm чарт для запуска в Kubernetes, собственно, продукт оптимизирован для запуска в кубере, может хранить сертификаты в секретах
Мне понравилось это решение тем, что оно, во-первых, полностью автоматизирует запуск сервера, а во-вторых, максимально похоже на администрирование стандартного openvpn сервера, установленного вручную. Тут всё на своих местах: конфиг сервера, шаблон конфига пользователей, директория с сертификатами, с настройками пользователей. Для тех, кто знаком с openvpn сервером не будет никаких проблем с тем, чтобы разобраться, как это всё работает.
Показываю, как запустить ovpn-admin в рабочем режиме. Не знаю, почему в самой репе не оставили краткой инструкции. Либо я её не нашёл. В общем, сделал в итоге так:
Теперь правим некоторые параметры
Остальные параметры я оставил по умолчанию. Собираем и запускаем контейнер:
Дожидаемся запуска и идём в веб интерфейс управления: http://1.2.3.4:8080/. Он будет доступен без аутентификации. Его нужно закрыть либо файрволом, либо basic_auth на прокси.
Расскажу про несколько полезных директорий и файлов:
-
-
-
-
Структура и расположение файлов типичны для openvpn сервера. На эту панель легко переехать с работающего сервера, либо наоборот съехать, если не понравится, забрав все настройки и пользователей. Можно спокойно залезть в какие-то файлы и руками поправить параметры. Это ничего не сломает, так как всё состояние хранится только в них.
Я всё это запустил, настроил, попробовал. Добавил метрики Прома, установил шаблон Графаны. Забрать можно тут. У меня заработало сразу. На деле вроде бы и ничего особенного, но задачу по управлению и тем более мониторингу сильно упрощает. Не нужно самому парсить статус лог сервера. Там хоть и ничего сложного, я парсил для Zabbix, но тут это сделали за нас.
⇨4️⃣ Исходники
#openvpn
⇨ Управление OpenVPN сервером через web интерфейс
Сегодня покажу ещё один вариант, который поначалу показался каким-то костыльным из-за недостатка документации, но когда немного разобрался, решение понравилось. Речь пойдёт про open source проект от известного аутсорсера flant - ovpn-admin.
📌 У ovpn-admin следующие возможности:
◽️Запуск через одиночный бинарник с передачей всех параметров через ключи. Есть готовый контейнер для автоматического запуска. Я тестировал в нём.
◽️Веб интерфейс для добавления и удаления пользователей, просмотра статуса их подключения и передачи маршрутов
◽️Экспортер для Prometheus и шаблон для Grafana с метриками: срок жизни сертификата, кол-во подключенных пользователей, информация о подключенных пользователях (время подключения, ip адрес, трафик)
◽️Подключение пользователем с использованием пароля или без, возможность скачать готовый конфиг сразу с включённым в него сертификатом
◽️Helm чарт для запуска в Kubernetes, собственно, продукт оптимизирован для запуска в кубере, может хранить сертификаты в секретах
Мне понравилось это решение тем, что оно, во-первых, полностью автоматизирует запуск сервера, а во-вторых, максимально похоже на администрирование стандартного openvpn сервера, установленного вручную. Тут всё на своих местах: конфиг сервера, шаблон конфига пользователей, директория с сертификатами, с настройками пользователей. Для тех, кто знаком с openvpn сервером не будет никаких проблем с тем, чтобы разобраться, как это всё работает.
Показываю, как запустить ovpn-admin в рабочем режиме. Не знаю, почему в самой репе не оставили краткой инструкции. Либо я её не нашёл. В общем, сделал в итоге так:
# git clone https://github.com/flant/ovpn-admin.git
# cd ovpn-admin
Теперь правим некоторые параметры
docker-compose.yaml
:OVPN_PASSWD_AUTH: "true"
# включена аутентификация по паролю, можно отключить, если не надоOVPN_SERVER: "1.2.3.4:7777:tcp"
# ip адрес, на котором запущен сервер и к которому будут подключаться клиенты, соответственно порт и протокол, по которому будут подключатьсяOVPN_METRICS_PATH: "/metrics"
# url, на котором будут жить метрики PrometheusОстальные параметры я оставил по умолчанию. Собираем и запускаем контейнер:
# ./start.sh
Дожидаемся запуска и идём в веб интерфейс управления: http://1.2.3.4:8080/. Он будет доступен без аутентификации. Его нужно закрыть либо файрволом, либо basic_auth на прокси.
Расскажу про несколько полезных директорий и файлов:
-
.ovpn-admin/easyrsa_master/pki
- сертификаты пользователей-
.ovpn-admin/ccd_master
- файлы конфигурации пользователей-
.ovpn-admin/setup/openvpn.conf
- параметры сервера openvpn-
.ovpn-admin/templates
- шаблон конфигурации клиента, настроек ccdСтруктура и расположение файлов типичны для openvpn сервера. На эту панель легко переехать с работающего сервера, либо наоборот съехать, если не понравится, забрав все настройки и пользователей. Можно спокойно залезть в какие-то файлы и руками поправить параметры. Это ничего не сломает, так как всё состояние хранится только в них.
Я всё это запустил, настроил, попробовал. Добавил метрики Прома, установил шаблон Графаны. Забрать можно тут. У меня заработало сразу. На деле вроде бы и ничего особенного, но задачу по управлению и тем более мониторингу сильно упрощает. Не нужно самому парсить статус лог сервера. Там хоть и ничего сложного, я парсил для Zabbix, но тут это сделали за нас.
⇨
#openvpn
Please open Telegram to view this post
VIEW IN TELEGRAM
September 10, 2024
Продолжу начатую утром тему OpenVPN. В Linux без проблем можно запустить сколько угодно экземпляров сервера и клиента. Достаточно копировать конфигурационный файл, указывать разные tun или tap интерфейсы, порты и запускать каждый экземпляр службы со своим конфигом.
В Windows несколько сложнее. Про сервер ничего не скажу, я его на винде никогда не поднимаю. А вот для запуска нескольких подключений клиента, чтобы иметь возможность одновременно подключаться к нескольким OpenVPN серверам, нужно добавить дополнительные сетевые адаптеры в систему. Сделать это несложно.
Запускаем консоль cmd с правами администратора и делаем там следующее:
В Панели управления, в списке сетевых адаптеров должен появиться ещё один TAP-Windows Adapter V9 #2, #3 и так далее, если нужно больше двух. Теперь можно одновременно подключиться к разным OpenVPN серверам.
Добавлю несколько ссылок на полезные и неочевидные возможности OpenVPN сервера:
▪️ Маршруты для клиента на основе url, а не ip адреса
▪️ Запуск OpenVPN сервера на разных внешних IP адресах
▪️ Блокировка подключения пользователя без отзыва сертификата
▪️ Диагностика низкой скорости через OpenVPN
▪️ Запускаем OpenVPN сервер за 443 портом веб сервера
Подход из последней ссылки недавно помог восстановить хождение трафика на зарубежные VPS по OpenVPN. Просто поменял порт на 443 TCP и всё заработало.
Предвещая вопросы на тему того, зачем сейчас использовать OpenVPN, сразу оставлю ссылку, так как много раз отвечал на него. И добавлю, что OpenVPN использую в первую очередь для объединения и доступа к сетям, а не обхода блокировок.
#openvpn #windows
В Windows несколько сложнее. Про сервер ничего не скажу, я его на винде никогда не поднимаю. А вот для запуска нескольких подключений клиента, чтобы иметь возможность одновременно подключаться к нескольким OpenVPN серверам, нужно добавить дополнительные сетевые адаптеры в систему. Сделать это несложно.
Запускаем консоль cmd с правами администратора и делаем там следующее:
> cd C:\Program Files\OpenVPN\bin
> tapctl.exe create
В Панели управления, в списке сетевых адаптеров должен появиться ещё один TAP-Windows Adapter V9 #2, #3 и так далее, если нужно больше двух. Теперь можно одновременно подключиться к разным OpenVPN серверам.
Добавлю несколько ссылок на полезные и неочевидные возможности OpenVPN сервера:
▪️ Маршруты для клиента на основе url, а не ip адреса
▪️ Запуск OpenVPN сервера на разных внешних IP адресах
▪️ Блокировка подключения пользователя без отзыва сертификата
▪️ Диагностика низкой скорости через OpenVPN
▪️ Запускаем OpenVPN сервер за 443 портом веб сервера
Подход из последней ссылки недавно помог восстановить хождение трафика на зарубежные VPS по OpenVPN. Просто поменял порт на 443 TCP и всё заработало.
Предвещая вопросы на тему того, зачем сейчас использовать OpenVPN, сразу оставлю ссылку, так как много раз отвечал на него. И добавлю, что OpenVPN использую в первую очередь для объединения и доступа к сетям, а не обхода блокировок.
#openvpn #windows
September 10, 2024
Занимался на днях в очередной раз перенастройкой своих VPN каналов. Честно говоря уже надоело этим заниматься, но внешние обстоятельства постоянно меняются. Хочу рассказать об одной особенности OpenVPN, которую я постоянно использую, и которая видится мне весьма полезной и функциональной.
OpenVPN сервер умеет управлять маршрутами внутри своих VPN сетей. Это получается второй контур маршрутизации поверх системного. Расскажу кратко, как это работает.
Допустим, у вас есть OpenVPN сервер, к которому подключаются разные клиенты. Будь то динамические подключения от удалённых сотрудников, либо другие одиночные сервера, маршрутизаторы своих внутренних подсетей. На сервере у вас указано, что все запросы к подсетям:
Отправляются в VPN сеть, конкретно в tun0 интерфейс. Настроить это можно сразу в конфиге openvpn для туннеля tun0:
OpenVPN сервер при запуске добавляет указанные маршруты в систему. Это можно сделать и вручную. Сервер при старте просто использует
За каждую указанную выше подсеть у нас отвечают разные клиенты VPN. Это может быть указано в его конфигурационном файле. Делается это так:
При подключении клиента с этой настройкой OpenVPN сервер понимает, что весь трафик в эту подсеть стоит адресовать этому клиенту. Если клиент поменяется, то эта настройка может переехать к другому.
Глобально настройки сервера и других VPN клиентов не меняются. Они просто подключаются и получают общую маршрутизацию. А по каким маршрутам внутри VPN побегут пакеты определяют настройки отдельных клиентов, которые выполняют роль маршрутизаторов. И этих клиентов можно легко заменить без необходимости менять какие-либо ещё настройки.
Подробнее об этом можно прочитать в документации. Искать по параметру
Мне пришлось заменить одного клиента на другого, через которого ходил трафик в youtube. Настройки остальных пользователей трогать не пришлось. У меня используется схема с единым OpenVPN сервером в РФ, к которому подключаются все клиенты. А он уже раскидывает трафик в зависимости от потребностей.
Набросал ниже схему, чтобы было понятно, о чём идёт речь.
#openvpn
OpenVPN сервер умеет управлять маршрутами внутри своих VPN сетей. Это получается второй контур маршрутизации поверх системного. Расскажу кратко, как это работает.
Допустим, у вас есть OpenVPN сервер, к которому подключаются разные клиенты. Будь то динамические подключения от удалённых сотрудников, либо другие одиночные сервера, маршрутизаторы своих внутренних подсетей. На сервере у вас указано, что все запросы к подсетям:
10.1.3.0/24
10.1.4.0/24
10.1.5.0/24
Отправляются в VPN сеть, конкретно в tun0 интерфейс. Настроить это можно сразу в конфиге openvpn для туннеля tun0:
route 10.1.3.0 255.255.255.0
route 10.1.4.0 255.255.255.0
route 10.1.5.0 255.255.255.0
OpenVPN сервер при запуске добавляет указанные маршруты в систему. Это можно сделать и вручную. Сервер при старте просто использует
/sbin/ip route add
для добавления маршрутов.За каждую указанную выше подсеть у нас отвечают разные клиенты VPN. Это может быть указано в его конфигурационном файле. Делается это так:
iroute 10.1.3.0 255.255.255.0
При подключении клиента с этой настройкой OpenVPN сервер понимает, что весь трафик в эту подсеть стоит адресовать этому клиенту. Если клиент поменяется, то эта настройка может переехать к другому.
Глобально настройки сервера и других VPN клиентов не меняются. Они просто подключаются и получают общую маршрутизацию. А по каким маршрутам внутри VPN побегут пакеты определяют настройки отдельных клиентов, которые выполняют роль маршрутизаторов. И этих клиентов можно легко заменить без необходимости менять какие-либо ещё настройки.
Подробнее об этом можно прочитать в документации. Искать по параметру
--iroute
для внутренней маршрутизации и --client-config-dir
для персональных настроек клиентов. Мне пришлось заменить одного клиента на другого, через которого ходил трафик в youtube. Настройки остальных пользователей трогать не пришлось. У меня используется схема с единым OpenVPN сервером в РФ, к которому подключаются все клиенты. А он уже раскидывает трафик в зависимости от потребностей.
Набросал ниже схему, чтобы было понятно, о чём идёт речь.
#openvpn
November 4, 2024
Всем привет. Поздравляю с окончанием праздников. Наконец-то можно снова заняться полезными и интересными делами. Как у вас, без происшествий прошли выходные? У меня было ровно одно небольшое событие, которое потребовало моего участия. Решил сразу рассказать, пока не забыл.
Разом отвалились постоянно подключенные клиенты одного OpenVPN сервера. Сразу подумал на протухшие сертификаты либо клиентов, либо самого сервера. Не раз такое случалось. При генерации значения по умолчанию обычно год-два, редко больше. Если специально не изменишь, то потом перевыпускать придётся.
Проверил сначала клиентов, всё ОК. Немного удивился. Ожидал увидеть, что просрочены они. В логах самих клиентов не было подробностей, только невозможность установить TLS соединение. Проверил сертификат сервера, с ним тоже всё в порядке.
Тут уже немного повнимательнее стал смотреть. Проверил лог сервера. Там ошибка прямым текстом указана. Надо было с него начинать:
Основное тут: CRL has expired. Файл со списками отозванных сертификатов оказался просрочен. Сколько лет использую OpenVPN, в том числе с CRL (Certificate Revocation List), а первый раз с таким сталкиваюсь (поправочка, 7 лет назад уже сталкивался, но забыл).
Файл crl.pem был сгенерирован с помощью набора скриптов easy-rsa. В них по умолчанию параметр EASYRSA_CRL_DAYS выставлен в 180 дней. Если за этот срок не будет нового отзыва и пересоздания файла crl.pem, то сервер OpenVPN перестанет принимать соединения с указанной выше ошибкой.
Просто пересоздал файл, увеличив срок жизни файла до 10 лет. В своём случае не вижу смысла ограничивать срок жизни этого файла. К тому же последнее время обхожусь без него. Для тех, кто не знает, напомню, что нежелательных клиентов OpenVPN сервера можно отключать с помощью настройки сервера ccd-exclusive.
Если указана эта настройка, то для того, чтобы подключение клиента состоялось, для него должен существовать файл с настройками в client-config-dir. Если его там нет, он не подключится. Я всегда пользуюсь этими настройками, так что файлы конфигураций для клиентов есть. Если надо кого-то отключить, то достаточно просто удалить этот файл. И клиент не сможет подключиться.
Это не отменяет процедуры отзыва сертификатов. Сертификаты неактивных клиентов на всякий случай лучше отзывать. Но можно это делать по плану в какой-то определённый день, а не сразу после принятия решения об отключении. Для этого надо отозвать сертификат, сформировать новый список CRL, заменить существующий и перезапустить службу OpenVPN. Просто удалить файл конфигурации быстрее и проще.
📌 Полезные материалы по теме OpenVPN:
▪️Одновременный запуск нескольких клиентов OpenVPN
▪️Маршруты для клиента на основе url, а не ip адреса
▪️Запуск OpenVPN сервера на разных внешних IP адресах
▪️Диагностика низкой скорости через OpenVPN
▪️Запускаем OpenVPN сервер за 443 портом веб сервера
▪️Бесплатная веб панель для управления сервером
▪️Создание туннелей с коррекцией ошибок (Forward Error Correction)
На всякий случай уточню, что ни в заметке, ни в ссылках, нет никакой информации об обходе блокировок сайтов. Это описание использования OpenVPN для обеспечения сетевой связности распределённых сетей.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#openvpn
Разом отвалились постоянно подключенные клиенты одного OpenVPN сервера. Сразу подумал на протухшие сертификаты либо клиентов, либо самого сервера. Не раз такое случалось. При генерации значения по умолчанию обычно год-два, редко больше. Если специально не изменишь, то потом перевыпускать придётся.
Проверил сначала клиентов, всё ОК. Немного удивился. Ожидал увидеть, что просрочены они. В логах самих клиентов не было подробностей, только невозможность установить TLS соединение. Проверил сертификат сервера, с ним тоже всё в порядке.
Тут уже немного повнимательнее стал смотреть. Проверил лог сервера. Там ошибка прямым текстом указана. Надо было с него начинать:
TLS: Initial packet from [AF_INET]1.2.3.4:40564
VERIFY ERROR: depth=0, error=CRL has expired
OpenSSL: error:1417C086:SSL routines:tls_process_client_certificate:certificate verify failed
TLS_ERROR: BIO read tls_read_plaintext error
TLS Error: TLS object -> incoming plaintext read error
TLS Error: TLS handshake failed
Основное тут: CRL has expired. Файл со списками отозванных сертификатов оказался просрочен. Сколько лет использую OpenVPN, в том числе с CRL (Certificate Revocation List), а первый раз с таким сталкиваюсь (поправочка, 7 лет назад уже сталкивался, но забыл).
Файл crl.pem был сгенерирован с помощью набора скриптов easy-rsa. В них по умолчанию параметр EASYRSA_CRL_DAYS выставлен в 180 дней. Если за этот срок не будет нового отзыва и пересоздания файла crl.pem, то сервер OpenVPN перестанет принимать соединения с указанной выше ошибкой.
Просто пересоздал файл, увеличив срок жизни файла до 10 лет. В своём случае не вижу смысла ограничивать срок жизни этого файла. К тому же последнее время обхожусь без него. Для тех, кто не знает, напомню, что нежелательных клиентов OpenVPN сервера можно отключать с помощью настройки сервера ccd-exclusive.
Если указана эта настройка, то для того, чтобы подключение клиента состоялось, для него должен существовать файл с настройками в client-config-dir. Если его там нет, он не подключится. Я всегда пользуюсь этими настройками, так что файлы конфигураций для клиентов есть. Если надо кого-то отключить, то достаточно просто удалить этот файл. И клиент не сможет подключиться.
Это не отменяет процедуры отзыва сертификатов. Сертификаты неактивных клиентов на всякий случай лучше отзывать. Но можно это делать по плану в какой-то определённый день, а не сразу после принятия решения об отключении. Для этого надо отозвать сертификат, сформировать новый список CRL, заменить существующий и перезапустить службу OpenVPN. Просто удалить файл конфигурации быстрее и проще.
📌 Полезные материалы по теме OpenVPN:
▪️Одновременный запуск нескольких клиентов OpenVPN
▪️Маршруты для клиента на основе url, а не ip адреса
▪️Запуск OpenVPN сервера на разных внешних IP адресах
▪️Диагностика низкой скорости через OpenVPN
▪️Запускаем OpenVPN сервер за 443 портом веб сервера
▪️Бесплатная веб панель для управления сервером
▪️Создание туннелей с коррекцией ошибок (Forward Error Correction)
На всякий случай уточню, что ни в заметке, ни в ссылках, нет никакой информации об обходе блокировок сайтов. Это описание использования OpenVPN для обеспечения сетевой связности распределённых сетей.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#openvpn
Server Admin
Ошибки OpenVPN - CRL has expired и CRL signature failure
Решение проблемы с ошибкой в openvpn при подключении клиента - OpenSSL: error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned
January 9
Впервые увидел и попробовал очень удобную панель управления для OpenVPN. Если быть точным, то это скорее панель наблюдения за пользователями OpenVPN сервера. Речь пойдёт про проект openvpn-monitor.
С его помощью можно посмотреть следующую информацию о пользователях:
▪️имя пользователя;
▪️время подключения;
▪️внутренний и внешний IP пользователя;
▪️суммарный трафик;
▪️время подключения и соответственно время онлайна;
▪️расположение пользователя на географический карте.
При желании пользователя можно отключить через веб интерфейс.
Openvpn-monitor представляет из себя веб интерфейс, написанный на Python, запущенный через обычный веб сервер Nginx или Apache. Информацию о пользователях он берёт через стандартную management console сервера OpenVPN. Её надо включить. Для этого достаточно добавить в конфиг сервера:
или
Не забудьте ограничить доступ к консоли с помощью файрвола. Можно ещё паролем закрыть, но я бы не рассчитывал только на него. Лучше полностью скрыть. Также можно открыть доступ к ней через unix socket. Подробности в документации.
Openvpn-monitor можно запускать на любой машине, откуда будет доступ к открытой консоли. Проще всего запустить её в Docker, чтобы не устанавливать все пакеты и зависимости, хотя такая возможность тоже есть. Можно посмотреть в документации.
Я тестировал в Docker. Показываю сразу рабочий вариант, на котором я остановился:
Здесь указана широта и долгота Москвы как стартовая точка на карте и IP адрес VPN сервера. SITES_0 задаёт параметры одного сервера. Можно в одну панель добавить несколько, задавая настройки соответственно SITES_1_, SITES_2_ и т.д.
Это вся настройка. Теперь можно идти в IP интерфейс на порт 8181 и смотреть информацию о пользователях. Не забудьте его тоже скрыть от посторонних глаз либо за Firewall, либо за любой веб сервер с режимом обратного прокси. Встроенной аутентификации у openvpn-monitor нет.
⇨ 🌐 Сайт / Исходники
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#openvpn
С его помощью можно посмотреть следующую информацию о пользователях:
▪️имя пользователя;
▪️время подключения;
▪️внутренний и внешний IP пользователя;
▪️суммарный трафик;
▪️время подключения и соответственно время онлайна;
▪️расположение пользователя на географический карте.
При желании пользователя можно отключить через веб интерфейс.
Openvpn-monitor представляет из себя веб интерфейс, написанный на Python, запущенный через обычный веб сервер Nginx или Apache. Информацию о пользователях он берёт через стандартную management console сервера OpenVPN. Её надо включить. Для этого достаточно добавить в конфиг сервера:
management 127.0.0.1 5555
или
management 0.0.0.0 5555
Не забудьте ограничить доступ к консоли с помощью файрвола. Можно ещё паролем закрыть, но я бы не рассчитывал только на него. Лучше полностью скрыть. Также можно открыть доступ к ней через unix socket. Подробности в документации.
Openvpn-monitor можно запускать на любой машине, откуда будет доступ к открытой консоли. Проще всего запустить её в Docker, чтобы не устанавливать все пакеты и зависимости, хотя такая возможность тоже есть. Можно посмотреть в документации.
Я тестировал в Docker. Показываю сразу рабочий вариант, на котором я остановился:
# docker run -d --name openvpn-monitor \
-e OPENVPNMONITOR_DEFAULT_DATETIMEFORMAT="%%d/%%m/%%Y" \
-e OPENVPNMONITOR_DEFAULT_LATITUDE=55 \
-e OPENVPNMONITOR_DEFAULT_LONGITUDE=37 \
-e OPENVPNMONITOR_DEFAULT_MAPS=True \
-e OPENVPNMONITOR_DEFAULT_MAPSHEIGHT=500 \
-e OPENVPNMONITOR_DEFAULT_SITE=Test \
-e OPENVPNMONITOR_SITES_0_ALIAS=UDP \
-e OPENVPNMONITOR_SITES_0_HOST=97.145.145.233 \
-e OPENVPNMONITOR_SITES_0_NAME=OVPN-UDP \
-e OPENVPNMONITOR_SITES_0_PORT=5555 \
-e OPENVPNMONITOR_SITES_0_SHOWDISCONNECT=True \
-p 8181:80 ruimarinho/openvpn-monitor
Здесь указана широта и долгота Москвы как стартовая точка на карте и IP адрес VPN сервера. SITES_0 задаёт параметры одного сервера. Можно в одну панель добавить несколько, задавая настройки соответственно SITES_1_, SITES_2_ и т.д.
Это вся настройка. Теперь можно идти в IP интерфейс на порт 8181 и смотреть информацию о пользователях. Не забудьте его тоже скрыть от посторонних глаз либо за Firewall, либо за любой веб сервер с режимом обратного прокси. Встроенной аутентификации у openvpn-monitor нет.
⇨ 🌐 Сайт / Исходники
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#openvpn
February 17
❓Возник вопрос вчера на тему OpenVPN. Можно как-то собирать статистику по подключениям пользователей и выводить отчёт? В целом, задача эта решаема, так как OVPN сервер выдаёт всю статистику о своём состоянии и пользователях как через встроенную консоль управления, так и через лог файл, который задаётся параметром status в конфигурационном файле.
Расскажу, как эту задачу решаю я. Вроде бы в контексте именно статистики по пользователям я про неё не писал. В интернете можно найти много вариантов настройки мониторинга за пользователями OpenVPN. Я лично по старинке использую тот, что когда-то давно попробовал и внедрил. Видел варианты более элегантные и удобные. Я уже просто привык к своему, он нормально работает, так что использую:
⇨ Мониторинг openvpn подключений пользователей в zabbix
Идея сбора статистики в том, что при подключении пользователя срабатывает триггер, при отключении он гаснет. И всё. Zabbix сам собирает всю статистику. Потом по ней можно какой-то отчёт сделать и выгрузить его в CSV. Триггерам можно повесить отдельный тэг и самую низкую важность, чтобы они больше нигде не отсвечивали.
Тут получается немного нецелевое использование системы мониторинга, но зато ничего самому по аналитике делать не надо: искать какую-то панель для этого, агрегировать данные и т.д.
Дополнительно можно сделать отдельный Dashboard с информацией об активных сессиях. Там же добавить виджет с историей подключений и отключений и т.д. В целом удобно и заменяет многие простые панели без непосредственно управления. При этом лично мне именно в Zabbix функциональность подобного рода нравится больше, чем примерно то же самое, но в Grafana с метриками от какого-нибудь экспортера Prometheus. По крайней мере из тех, что я видел.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#zabbix #openvpn
Расскажу, как эту задачу решаю я. Вроде бы в контексте именно статистики по пользователям я про неё не писал. В интернете можно найти много вариантов настройки мониторинга за пользователями OpenVPN. Я лично по старинке использую тот, что когда-то давно попробовал и внедрил. Видел варианты более элегантные и удобные. Я уже просто привык к своему, он нормально работает, так что использую:
⇨ Мониторинг openvpn подключений пользователей в zabbix
Идея сбора статистики в том, что при подключении пользователя срабатывает триггер, при отключении он гаснет. И всё. Zabbix сам собирает всю статистику. Потом по ней можно какой-то отчёт сделать и выгрузить его в CSV. Триггерам можно повесить отдельный тэг и самую низкую важность, чтобы они больше нигде не отсвечивали.
Тут получается немного нецелевое использование системы мониторинга, но зато ничего самому по аналитике делать не надо: искать какую-то панель для этого, агрегировать данные и т.д.
Дополнительно можно сделать отдельный Dashboard с информацией об активных сессиях. Там же добавить виджет с историей подключений и отключений и т.д. В целом удобно и заменяет многие простые панели без непосредственно управления. При этом лично мне именно в Zabbix функциональность подобного рода нравится больше, чем примерно то же самое, но в Grafana с метриками от какого-нибудь экспортера Prometheus. По крайней мере из тех, что я видел.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#zabbix #openvpn
February 18
В настоящее время есть много технологий VPN, с помощью которых можно объединять подсети и подключать к ним внешних клиентов. Речь идёт не о блокировках и всем, что с этим связано, а об условно корпоративных VPN. Определённую популярность набрали сервисы на основе WireGuard, которые строят с его помощью mesh сети. Это не чистый WG, а программная обвязка вокруг него на дополнительном ПО. Примеры: Nebula, Tailscale, ZeroTier, Netmaker.
Я же хочу рассказать про старый добрый OpenVPN, который несмотря на все прочие современные реализации VPN остаётся актуален и удобен. И это не привычка и нежелание переходить на что-то новое, а объективное удобство. Перечислю несколько основных фактов, которые держат на OpenVPN.
1️⃣ Первый и самый главный – OpenVPN сервер умеет передавать клиенту во время подключения различные настройки, в том числе сетевые маршруты. Например, клиент подключается и мы ему тут же сообщаем, что он весь свой трафик должен завернуть в VPN. А когда нам это не нужно, перечисляем только список подсетей, которые заворачиваются в VPN.
Например, у меня есть несколько VPN серверов с внешними IP. Я их использую для доступа к закрытым ресурсам, куда разрешён доступ только мне. На этих VPN серверах перечислены по IP адресам те серверы, куда я должен подключаться через VPN. В момент моего подключения к OVPN серверу я получаю список маршрутов до этих IP адресов через VPN сервер. И только туда. Весь остальной трафик будет ходить напрямую.
Помимо маршрутов можно передавать и другие настройки. Несколько примеров:
- настройка своего внутреннего DNS сервера;
- разрешение клиентов взаимодействовать друг с другом;
- настройки внутреннего IP адреса;
- разрешение, запрет на подключение;
- разрешение, запрет сжатия трафика;
- и многие другие.
Всё это управляется централизованно на сервере. На клиентах никаких настроек менять не надо. Один раз передали конфиг с зашитыми сертификатами и всё.
2️⃣ Помимо передачи маршрутов клиентам внутри OVPN сети есть своя реализация динамической маршрутизации. Если у вас филиальная сеть объединена с помощью OVPN, вы у пользователей весь нужный трафик направляете в VPN туннель. А на OVPN сервере управляете, какие подсети какой филиал обслуживает. Добавился новый филиал - добавили его в список маршрутов и указали, что за новую подсеть отвечает новый сервер в филиале. Настройки клиентов трогать не надо, пускать поверх VPN сети ospf и bgp тоже. Реализация очень простая в настройке и управлении. Возможно для очень больших сетей этого будет недостаточно, но для малых и средних вполне.
3️⃣ Гибкость в возможностях аутентификации. Вы можете использовать традиционную для OVPN аутентификацию по сертификатам, можно оставить только логин с паролем, можно подключать внешний скрипт для аутентификации, а там уже реализовывать любую логику.
Можно всё убрать и настроить простой туннель вообще без какой-либо аутентификации и шифрования:
Всё, серверы видят друг друга по указанным внутренним IP адресам.
4️⃣ OVPN сервер поддерживает оба протокола TCP и UDP, можно использовать любой порт. Вкупе с предыдущим пунктом, одна технология VPN покрывает очень широкий спектр задач. Вы можете все потребности закрывать только с помощью OpenVPN.
5️⃣ Есть клиенты под все системы. Сервер очень старый, есть куча инструкций, понятны параметры, много специалистов. Всё расписано и изучено за многие годы.
6️⃣ Проблему с производительностью решили отдельным модулем ядра для OpenVPN. Я не слежу за его изменениями. Приехал он уже или нет в ядро или хотя бы в виде пакета в базовые репозитории. Но уже года два его можно скачать и самостоятельно установить, если сильно нужно.
Заметка получилась большая. Написал сходу, какие мысли пришли в голову. Я OpenVPN люблю и использую давно. При этом другие реализации и настраиваю, и использую. Как минимум WG и L2TP использую постоянно, а раньше ещё PPTP.
#openvpn
Я же хочу рассказать про старый добрый OpenVPN, который несмотря на все прочие современные реализации VPN остаётся актуален и удобен. И это не привычка и нежелание переходить на что-то новое, а объективное удобство. Перечислю несколько основных фактов, которые держат на OpenVPN.
Например, у меня есть несколько VPN серверов с внешними IP. Я их использую для доступа к закрытым ресурсам, куда разрешён доступ только мне. На этих VPN серверах перечислены по IP адресам те серверы, куда я должен подключаться через VPN. В момент моего подключения к OVPN серверу я получаю список маршрутов до этих IP адресов через VPN сервер. И только туда. Весь остальной трафик будет ходить напрямую.
Помимо маршрутов можно передавать и другие настройки. Несколько примеров:
- настройка своего внутреннего DNS сервера;
- разрешение клиентов взаимодействовать друг с другом;
- настройки внутреннего IP адреса;
- разрешение, запрет на подключение;
- разрешение, запрет сжатия трафика;
- и многие другие.
Всё это управляется централизованно на сервере. На клиентах никаких настроек менять не надо. Один раз передали конфиг с зашитыми сертификатами и всё.
Можно всё убрать и настроить простой туннель вообще без какой-либо аутентификации и шифрования:
# openvpn --remote 1.2.3.4 --dev tun1 --ifconfig 10.4.0.1 10.4.0.2
# openvpn --remote 4.3.2.1 --dev tun1 --ifconfig 10.4.0.2 10.4.0.1
Всё, серверы видят друг друга по указанным внутренним IP адресам.
Заметка получилась большая. Написал сходу, какие мысли пришли в голову. Я OpenVPN люблю и использую давно. При этом другие реализации и настраиваю, и использую. Как минимум WG и L2TP использую постоянно, а раньше ещё PPTP.
#openvpn
Please open Telegram to view this post
VIEW IN TELEGRAM
February 20
Расскажу кратенько с конкретными примерами, как я настраиваю ограничение на доступ к серверам и сервисам по статическим IP адресам и потом подключаюсь к ним, используя некоторое количество арендованных VPS для этих целей.
Я уже давно практикую и остальным советую не оставлять публичный доступ через интернет к сервисам, которые не являются публичными. Например, тот же SSH я открываю только для белого списка своих IP адресов. Для iptables это обычно выглядит так:
В скрипте с правилами задана переменная со списком моих IP адресов и правило для SSH на его основе.
На VPS с перечисленными IP адресами настроены сервера OpenVPN. Они используются для различных задач, в том числе в качестве шлюзов для подключения к закрытым серверам. При подключении со своих рабочих машин я не направляю весь трафик в VPN. Это неудобно и мешает работе. В общем случае я использую прямой выход в интернет для типовых задач в виде сёрфинга в интернете, просмотра видео и т.д.
При подключении по VPN я получаю только те маршруты, что мне нужны. Например, я хочу подключаться к серверу c IP адресом 233.129.58.85 через конкретный OpenVPN сервер. Я иду на него и добавляю на сервере к конфигурации, привязанной к сертификату, который я использую при подключении, следующую настройку:
При подключении по VPN ко мне в систему приедет маршрут до 233.129.58.85 через этот сервер. Подключение по SSH к этому серверу пойдёт через VPN. В настройке маршрута можно указать не только IP адрес, но и DNS имя. Примерно так:
Чтобы это сработало, в конфигурации клиента, для которого добавлен такой маршрут, должен быть добавлен параметр:
В итоге на рабочей машине у меня настроен клиент OpenVPN с готовыми подключениями к различным VPN серверам. Когда мне надо подключиться к той или иной инфраструктуре, я подключаюсь к нужному VPN серверу и получаю маршруты только туда. Всё остальное остаётся неизменным. Весь трафик в VPN я не направляю, уже существующие соединения не рвутся. Одновременно могут быть активны разные OpenVPN соединения. Все маршруты управляются с серверов. На самом клиенте я ничего не меняю.
В такую схему легко добавляются новые VPS, новые пользователи (❗️), новые сертификаты со своими привязанными к ним настройками, и всё это управляется централизованно через сервера. Сами клиенты трогать не надо.
📌 Полезные ссылки по теме:
▪️Основные преимущества OpenVPN сервера
▪️Настройка allow-pull-fqdn
▪️Одновременный запуск нескольких клиентов OpenVPN
▪️Запуск OpenVPN сервера на разных внешних IP адресах
▪️Запускаем OpenVPN сервер за 443 портом веб сервера
На днях на одном из моих серверов протух CA, который был выпущен 10 лет назад. Такие встречаются долгожители. И это не первый случай. Писал и заметки здесь по этой теме, и статья на сайте есть.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#openvpn
Я уже давно практикую и остальным советую не оставлять публичный доступ через интернет к сервисам, которые не являются публичными. Например, тот же SSH я открываю только для белого списка своих IP адресов. Для iptables это обычно выглядит так:
SSH_WLIST=100.189.229.125,141.73.66.12,187.91.13.196,83.208.103.44,194.139.219.214
iptables -A INPUT -i enp5s0 -s $SSH_WLIST -p tcp --dport 22 -j ACCEPT
В скрипте с правилами задана переменная со списком моих IP адресов и правило для SSH на его основе.
На VPS с перечисленными IP адресами настроены сервера OpenVPN. Они используются для различных задач, в том числе в качестве шлюзов для подключения к закрытым серверам. При подключении со своих рабочих машин я не направляю весь трафик в VPN. Это неудобно и мешает работе. В общем случае я использую прямой выход в интернет для типовых задач в виде сёрфинга в интернете, просмотра видео и т.д.
При подключении по VPN я получаю только те маршруты, что мне нужны. Например, я хочу подключаться к серверу c IP адресом 233.129.58.85 через конкретный OpenVPN сервер. Я иду на него и добавляю на сервере к конфигурации, привязанной к сертификату, который я использую при подключении, следующую настройку:
push "route 233.129.58.85 255.255.255.255"
При подключении по VPN ко мне в систему приедет маршрут до 233.129.58.85 через этот сервер. Подключение по SSH к этому серверу пойдёт через VPN. В настройке маршрута можно указать не только IP адрес, но и DNS имя. Примерно так:
push "route ya.ru 255.255.255.255"
Чтобы это сработало, в конфигурации клиента, для которого добавлен такой маршрут, должен быть добавлен параметр:
allow-pull-fqdn
В итоге на рабочей машине у меня настроен клиент OpenVPN с готовыми подключениями к различным VPN серверам. Когда мне надо подключиться к той или иной инфраструктуре, я подключаюсь к нужному VPN серверу и получаю маршруты только туда. Всё остальное остаётся неизменным. Весь трафик в VPN я не направляю, уже существующие соединения не рвутся. Одновременно могут быть активны разные OpenVPN соединения. Все маршруты управляются с серверов. На самом клиенте я ничего не меняю.
В такую схему легко добавляются новые VPS, новые пользователи (❗️), новые сертификаты со своими привязанными к ним настройками, и всё это управляется централизованно через сервера. Сами клиенты трогать не надо.
📌 Полезные ссылки по теме:
▪️Основные преимущества OpenVPN сервера
▪️Настройка allow-pull-fqdn
▪️Одновременный запуск нескольких клиентов OpenVPN
▪️Запуск OpenVPN сервера на разных внешних IP адресах
▪️Запускаем OpenVPN сервер за 443 портом веб сервера
На днях на одном из моих серверов протух CA, который был выпущен 10 лет назад. Такие встречаются долгожители. И это не первый случай. Писал и заметки здесь по этой теме, и статья на сайте есть.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#openvpn
Telegram
ServerAdmin.ru
В настоящее время есть много технологий VPN, с помощью которых можно объединять подсети и подключать к ним внешних клиентов. Речь идёт не о блокировках и всем, что с этим связано, а об условно корпоративных VPN. Определённую популярность набрали сервисы на…
May 14