Один VPS под несколько VPN-протоколов: как не мешать друг другу
Узнайте, как разместить WireGuard, OpenVPN и IKEv2 на одном VPS: бесконфликтная настройка портов, маршрутизация и изоляция.
Содержание
Многие администраторы рано или поздно сталкиваются с необходимостью поднять на одном сервере сразу несколько VPN-протоколов. Причины могут быть разными: тестирование, требования клиентов, необходимость обеспечить совместимость с разными устройствами. В этой статье мы разберём, как запустить на одном VPS WireGuard, OpenVPN и IKEv2/IPsec без взаимных помех.
Почему протоколы мешают друг другу
Каждый VPN-сервер по умолчанию пытается занять стандартные порты (например, OpenVPN — 1194 UDP, IKEv2 — 500/4500 UDP). Если два сервиса слушают один и тот же порт, возникает конфликт — второй просто не стартует. Кроме того, VPN-серверы часто создают свои виртуальные интерфейсы (tun0, tun1 и т.д.) и меняют таблицу маршрутизации. Без правильной настройки трафик может уходить не в тот туннель, а клиенты будут получать неверные маршруты. Наконец, файрволы по умолчанию могут блокировать неизвестные порты или разрешать только известные, что тоже мешает.
Подготовка VPS
Перед установкой VPN-серверов убедитесь, что ваш VPS поддерживает TUN/TAP. Многие провайдеры включают эту опцию по умолчанию, но иногда нужно активировать её в панели управления. Также важно выбрать операционную систему: подойдёт Ubuntu 22.04 LTS или Debian 12. Обновите систему и установите необходимые пакеты. Проверьте сетевые интерфейсы командой ip link — вы должны видеть eth0 или ens3 (основной интерфейс) и, возможно, lo.
Способ 1 — разделение по портам и интерфейсам
Самый простой способ — заставить каждый VPN-протокол слушать собственный порт и использовать отдельный виртуальный интерфейс.
- WireGuard — работает на UDP-порту, например, 51820. Проверьте, что порт не используется:
ss -ulpn | grep 51820. В конфигурационном файле/etc/wireguard/wg0.confукажитеListenPort = 51820и задайте приватный IP для сервера, например,10.0.0.1/24. - OpenVPN — использует UDP 1194 по умолчанию. Чтобы избежать конфликтов, измените порт на, скажем, 11940 в файле
/etc/openvpn/server.conf. Укажите параметрыport 11940,proto udp,dev tun. Также задайте подсеть10.8.0.0/24, отличную от подсети WireGuard. - IKEv2 — для него нужны порты 500/4500 (UDP). Если вы хотите оставить стандартные порты, проверьте, что их не занимает другой сервис. IKEv2 часто настраивается через strongSwan или LibreSwan. В конфигурации
/etc/ipsec.confукажитеleft=server_ip,leftsubnet=0.0.0.0/0, а в/etc/ipsec.secrets— пароли для авторизации.
После настройки всех сервисов перезапустите их и проверьте, что они слушают нужные порты: ss -ulpn | grep -E '51820|11940|500|4500'. Если всё в порядке, сервисы не конфликтуют.
Однако если вы используете один и тот же порт (например, 443), потребуется дополнительная настройка, например, с помощью HAProxy или протокола прикрытия. Это усложнит конфигурацию, но возможно.
Способ 2 — изоляция через Docker
Docker позволяет запустить каждый VPN-сервер в отдельном контейнере со своей сетевой средой. Это устраняет конфликты по портам и интерфейсам. Например, вы можете поднять WireGuard в контейнере с образом linuxserver/wireguard, а OpenVPN — в контейнере с образом kylemanna/openvpn. Для этого создайте docker-compose.yml:
version: '3'
services:
wireguard:
image: linuxserver/wireguard
container_name: wireguard
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Moscow
- SERVERURL=your.server.com
- PEERS=5
ports:
- "51820:51820/udp"
restart: unless-stopped
При этом на хосте останется только один процесс Docker, а порты будут проброшены из контейнеров. Этот подход упрощает управление и изоляцию, но требует аккуратной настройки проброса портов и сетей. Например, чтобы клиенты могли заходить в свои VPN-сети, вам нужно создать отдельные сети Docker или использовать host-режим. В общем случае лучше использовать маппинг портов на разные порты хоста, чтобы избежать конфликтов.
Общие настройки для обоих способов
Независимо от выбранного способа, нужно позаботиться о файрволе и маршрутизации.
- Файрвол: разрешите трафик на нужных портах. Пример для UFW:
Не забудьте разрешить SSH и DNS.ufw allow 51820/udp ufw allow 11940/udp ufw allow 500,4500/udp - Маршрутизация: включите IP-forwarding. В
/etc/sysctl.confдобавьтеnet.ipv4.ip_forward=1и применитеsysctl -p. Если вы используете разные подсети для VPN (например, 10.0.0.0/24 и 10.8.0.0/24), они не будут пересекаться, и проблем не будет. Если же вы хотите, чтобы VPN-клиенты могли общаться между собой, нужно настроить маршруты вручную (или использовать политику на основе source routing). Обычно для этого достаточно включить обратную связь черезiptables. - Разделение ключей и сертификатов: храните конфигурации для каждого протокола отдельно, не смешивайте закрытые ключи.
Проверка работоспособности и диагностика
Чтобы убедиться, что протоколы не мешают друг другу, проверьте:
- Подключитесь к каждому VPN-серверу с клиентского устройства. Используйте разные устройства или приложения.
- Проверьте маршруты на сервере:
ip route show,ip rule show. Убедитесь, что трафик идёт в правильные туннели. - Используйте
tcpdumpдля проверки портов:tcpdump -i eth0 udp port 51820и т.д. - Если какой-то VPN не работает, посмотрите логи:
/var/log/openvpn.log,journalctl -u wg-quick@wg0.serviceи т.д.
Чаще всего проблемы возникают из-за неправильных портов или перекрытия подсетей. Исправьте конфигурацию и перезапустите сервис.
Заключение
Запустить несколько VPN-протоколов на одном VPS вполне реально. Вы можете использовать простой способ с разными портами и интерфейсами, либо более продвинутый — с Docker. Главное — следить за портами, файрволом и маршрутизацией. В комментариях поделитесь, какой способ выбрали вы.
Мини-чеклист
- Выберите VPS с поддержкой TUN/TAP
- Обновите систему и установите нужные пакеты
- Назначьте каждому протоколу отдельный порт
- Проверьте, что порты не пересекаются
- Включите IP-forwarding
- Настройте файрвол для нужных портов
- Протестируйте подключение к каждому VPN
Частые ошибки
- Запуск двух серверов на одном порту без дополнительной настройки
- Использование одинаковых подсетей для разных VPN
- Забыли включить IP-forwarding
- Не настроили исключения в файрволе, из-за чего трафик блокируется
Источники и документация
FAQ
Можно ли использовать один порт 443 для нескольких VPN?
Да, но для этого потребуется проксирование с различением трафика, например, с помощью HAProxy или специальных обёрток, таких как obfs4. Это сложная настройка, и проще выбрать отдельные порты.
Что делать, если контейнеры Docker не видят друг друга?
Настройте общую сеть Docker или используйте host-режим. В маппинге портов укажите правильные адреса.
Влияет ли количество VPN-протоколов на производительность?
Каждый протокол использует ресурсы CPU и памяти. На небольшом VPS может не хватить мощности, поэтому выбирайте тариф с запасом.
Хотите перейти сразу к рабочему доступу?
Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.
Получить доступ