Быстрый старт vpn Обновлено 9 linux, vps

Один VPS под несколько VPN-протоколов: как не мешать друг другу

Узнайте, как разместить WireGuard, OpenVPN и IKEv2 на одном VPS: бесконфликтная настройка портов, маршрутизация и изоляция.

VPSVPNWireGuardOpenVPNIKEv2Dockerнастройка
Содержание
КороткоДля работы нескольких VPN-протоколов на одном VPS достаточно разделить их по портам и интерфейсам или использовать Docker; главное — правильно настроить файрвол и таблицу маршрутизации.

Многие администраторы рано или поздно сталкиваются с необходимостью поднять на одном сервере сразу несколько 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-протокол слушать собственный порт и использовать отдельный виртуальный интерфейс.

  1. WireGuard — работает на UDP-порту, например, 51820. Проверьте, что порт не используется: ss -ulpn | grep 51820. В конфигурационном файле /etc/wireguard/wg0.conf укажите ListenPort = 51820 и задайте приватный IP для сервера, например, 10.0.0.1/24.
  2. OpenVPN — использует UDP 1194 по умолчанию. Чтобы избежать конфликтов, измените порт на, скажем, 11940 в файле /etc/openvpn/server.conf. Укажите параметры port 11940, proto udp, dev tun. Также задайте подсеть 10.8.0.0/24, отличную от подсети WireGuard.
  3. 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:
    ufw allow 51820/udp
    ufw allow 11940/udp
    ufw allow 500,4500/udp
    Не забудьте разрешить SSH и DNS.
  • Маршрутизация: включите 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.
  • Разделение ключей и сертификатов: храните конфигурации для каждого протокола отдельно, не смешивайте закрытые ключи.

Проверка работоспособности и диагностика

Чтобы убедиться, что протоколы не мешают друг другу, проверьте:

  1. Подключитесь к каждому VPN-серверу с клиентского устройства. Используйте разные устройства или приложения.
  2. Проверьте маршруты на сервере: ip route show, ip rule show. Убедитесь, что трафик идёт в правильные туннели.
  3. Используйте tcpdump для проверки портов: tcpdump -i eth0 udp port 51820 и т.д.
  4. Если какой-то 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 может не хватить мощности, поэтому выбирайте тариф с запасом.

Хотите перейти сразу к рабочему доступу?

Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.

Получить доступ

Дальше по теме

Связанные статьи