В настоящее время есть много технологий 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
2👍127👎7
Расскажу кратенько с конкретными примерами, как я настраиваю ограничение на доступ к серверам и сервисам по статическим 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.214iptables -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. Определённую популярность набрали сервисы на…
2👍170👎6
В комментариях к одной из заметок проскочила ссылка на небольшой проект, где одним скриптом реализована установка OpenVPN сервера с простеньким веб интерфейсом - Simple OpenVPN Server. Я постоянно использую OpenVPN, так что решил на него глянуть, раньше не видел.
В репозитории представлен bash скрипт, который выполняет установку стандартного сервера OpenVPN, вместе с ним Nginx с запароленным доступом к небольшой админке, где можно добавлять и удалять пользователей. Больше ничего нет.
На первый взгляд ничего особенно и похожих панелей много. Но лично мне понравилась реализация. Сейчас расскажу подробнее. Установка с помощью этого скрипта выглядит следующим образом:
Ключи задают: пароль администратора для доступа к админке, имя сервера для выпуска бесплатных сертификатов, dns сервера, которые будут передаваться клиентам в виде настроек, порт сервера и протокол, на котором он будет работать, email, который будет зарегистрирован в let's encrypt при выпуске сертификата.
Дальше скрипт выполняет следующие действия:
1️⃣ Устанавливает необходимые пакеты.
2️⃣ Загружает набор скриптов easy-rsa и генерирует необходимые сертификаты.
3️⃣ Формирует конфигурацию openvpn на основе переданных параметров.
4️⃣ Добавляет настройки iptables для NAT и роутинга соединений клиентов.
5️⃣ Формирует шаблон для конфигураций пользователей.
6️⃣ Получает сертификаты и настраивает виртуальных хост в Nginx.
7️⃣ Скачивает скрипты для виртуального хоста, которые создают конфигурации пользователей и отзывают сертификаты.
В конце скрипт выдал ошибку на перезапуск службы apache. Не знаю, зачем там эта команда. Возможно, автор просто ошибся. Сам apache не устанавливается в систему. Я вручную перезапустил Nginx:
После этого можно идти в браузер по имени хоста, вводить логин admin и указанный ранее пароль, чтобы попасть в "админку". Аутентификация реализована с помощью basic_auth.
Теперь отдельно про пару моментов, которые мне понравились. Реализация очень простая. Все конфигурации служб на своём месте. То есть после работы скрипта можно про него забыть и дальше управлять всем этим, как-будто вы всё поставили вручную. Скрипт установки легко читается, можно изменять.
Меня отдельно привлёк веб интерфейс, а точнее то, как он реализован. В директории
Я первый раз вижу такую реализацию. В скриптах смесь html и bash. То есть по сути интерфейс управления написан на bash и привязан к кнопочкам на страничках.
Эти скрипты легко приспособить под ваш OpenVPN сервер, который управляется полностью консольно. Если вам надоело добавлять и отзывать пользователей через CLI, можете взять эти скрипты и прикрутить куда-то к себе в закрытый контур.
Реализовано там всё обычными консольными командами, типа таких:
и т.д. То есть всё максимально стандартно. Нужно будет только пути поправить под свои реалии и всё.
Вот такой необычный проект для быстрой настройки OpenVPN сервера. Мне в целом понравилось. У меня есть свои подобные скрипты для установки сервера, создания и удаления пользователей. Писал в своё время, чтобы управлять серверами.
📌 Пара полезных ссылок по данной теме:
◽️Подборка вариантов настройки и управления OpenVPN сервера через web интерфейс
◽️Ovpn-admin - простой веб интерфейс в виде одного бинарника для управления Ovpn сервером
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#openvpn
В репозитории представлен bash скрипт, который выполняет установку стандартного сервера OpenVPN, вместе с ним Nginx с запароленным доступом к небольшой админке, где можно добавлять и удалять пользователей. Больше ничего нет.
На первый взгляд ничего особенно и похожих панелей много. Но лично мне понравилась реализация. Сейчас расскажу подробнее. Установка с помощью этого скрипта выглядит следующим образом:
# wget https://raw.githubusercontent.com/theonemule/simple-openvpn-server/master/openvpn.sh# chmod +x openvpn.sh# ./openvpn.sh --adminpassword=serveradmin --host=339119.simplecloud.ru --dns1=62.76.76.62 --dns2=77.88.8.1 --vpnport=1194 --protocol=udp --email=zeroxzed@gmail.comКлючи задают: пароль администратора для доступа к админке, имя сервера для выпуска бесплатных сертификатов, dns сервера, которые будут передаваться клиентам в виде настроек, порт сервера и протокол, на котором он будет работать, email, который будет зарегистрирован в let's encrypt при выпуске сертификата.
Дальше скрипт выполняет следующие действия:
В конце скрипт выдал ошибку на перезапуск службы apache. Не знаю, зачем там эта команда. Возможно, автор просто ошибся. Сам apache не устанавливается в систему. Я вручную перезапустил Nginx:
# systemctl restart nginxПосле этого можно идти в браузер по имени хоста, вводить логин admin и указанный ранее пароль, чтобы попасть в "админку". Аутентификация реализована с помощью basic_auth.
Теперь отдельно про пару моментов, которые мне понравились. Реализация очень простая. Все конфигурации служб на своём месте. То есть после работы скрипта можно про него забыть и дальше управлять всем этим, как-будто вы всё поставили вручную. Скрипт установки легко читается, можно изменять.
Меня отдельно привлёк веб интерфейс, а точнее то, как он реализован. В директории
/var/www/html находятся два bash скрипта: index.sh и download.sh. Их выполнение настроено в Nginx вот так:location ~ \.sh$ { gzip off; fastcgi_pass unix:/var/run/fcgiwrap.socket; include /etc/nginx/fastcgi_params; fastcgi_split_path_info ^(.+?\.sh)(/.*)$;Я первый раз вижу такую реализацию. В скриптах смесь html и bash. То есть по сути интерфейс управления написан на bash и привязан к кнопочкам на страничках.
Эти скрипты легко приспособить под ваш OpenVPN сервер, который управляется полностью консольно. Если вам надоело добавлять и отзывать пользователей через CLI, можете взять эти скрипты и прикрутить куда-то к себе в закрытый контур.
Реализовано там всё обычными консольными командами, типа таких:
./easyrsa build-client-full $client nopass./easyrsa --batch revoke $clientи т.д. То есть всё максимально стандартно. Нужно будет только пути поправить под свои реалии и всё.
Вот такой необычный проект для быстрой настройки OpenVPN сервера. Мне в целом понравилось. У меня есть свои подобные скрипты для установки сервера, создания и удаления пользователей. Писал в своё время, чтобы управлять серверами.
📌 Пара полезных ссылок по данной теме:
◽️Подборка вариантов настройки и управления OpenVPN сервера через web интерфейс
◽️Ovpn-admin - простой веб интерфейс в виде одного бинарника для управления Ovpn сервером
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#openvpn
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍164👎4