Как собрать VPN‑туннель между двумя VPS вручную

ГлавнаяКак собрать VPN‑туннель между двумя VPS вручную

Содержание

Привет, это снова я. Сегодня расскажу о том, как вручную настроить VPN over VPN — или, проще говоря, двойной VPN-туннель между двумя VPS. Когда я впервые столкнулась с задачей построить защищённый маршрут из точки A в точку C через промежуточную точку B, то поняла: обычного VPN уже недостаточно. Нужно было сделать так, чтобы весь трафик уходил на второй сервер только через первый.

Почему это важно? Такая схема особенно полезна:

  • для дополнительной анонимности (трафик проходит через два IP VPN серверов);
  • для обхода особо сложных геоблокировок;
  • для повышения надёжности — если первый сервер палится, второй всё ещё может быть в деле.

Что такое двойной VPN?

Двойной VPN (или VPN over VPN) — это схема, при которой вы подключаетесь к одному VPN-серверу, а тот уже сам перенаправляет трафик через второй VPN-сервер. Представь это как два туннеля: один внутри другого. И пока наружный туннель видит только IP адреса для VPN сервера #1, внутренний — маскируется глубже.

Это не то же самое, что просто запустить два VPN-клиента на одном ПК. Мы будем оборачивать VPN-трафик в туннель WireGuard или OpenVPN, а не создавать каскад с клиентской стороны.


Что понадобится

  • Два VPS. Назовём их:
    • VPS1
      — ближайший к пользователю (через него будет основное подключение),
    • VPS2
      — выходной сервер, именно с него будет виден внешний IP.
  • Два IP-адреса для VPN (по одному на каждый сервер).
  • Установленный WireGuard или OpenVPN на обоих серверах (я буду показывать на примере WireGuard).
  • Понимание, как пользоваться
    ssh
    ,
    iptables
    ,
    wg
    и базовой сетевой логикой.

Шаг 1. Настраиваем VPN-туннель между VPS1 и VPS2

  1. На VPS2 — создаём сервер WireGuard:
# Устанавливаем WireGuard apt update && apt install wireguard -y # Генерируем ключи wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey
  1. Конфигурация
    /etc/wireguard/wg0.conf
    на VPS2:
[Interface] Address = 10.20.0.2/24 PrivateKey = <PRIVATE_KEY_VPS2> ListenPort = 51820 [Peer] PublicKey = <PUBLIC_KEY_VPS1> AllowedIPs = 10.20.0.1/32
  1. На VPS1 — настраиваем WireGuard-клиент:
[Interface] Address = 10.20.0.1/24 PrivateKey = <PRIVATE_KEY_VPS1> [Peer] PublicKey = <PUBLIC_KEY_VPS2> Endpoint = VPS2_PUBLIC_IP:51820 AllowedIPs = 0.0.0.0/0 PersistentKeepalive = 25

Поднимаем туннель на обоих серверах:

wg-quick up wg0

Проверяем связь:

ping 10.20.0.2 # с VPS1 на VPS2

Шаг 2. Проксируем трафик через VPS2

Теперь мы хотим, чтобы весь исходящий трафик с VPS1 шёл через VPS2, а не напрямую. Это и есть VPN over VPN.

На VPS2:

# Разрешаем маршрутизацию echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p # NAT для трафика из туннеля iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -o eth0 -j MASQUERADE

На VPS1:

# Меняем маршрут по умолчанию ip route add default dev wg0

Проверка:

curl ifconfig.me

IP должен быть от VPS2, а не VPS1. Готово — туннель работает.


Пример практического применения

Я использовала такую схему в проекте, где нужно было скачивать данные с одного ресурса в Европе, но доступ к нему разрешался только из “белого списка” IP. Мой обычный VPN блокировался, а через double VPN — всё заработало, причём стабильно. Особенно помогло, что можно было оперативно менять внешний сервер, не трогая внутреннюю логику клиента.


Полезные замечания

  • DoubleVPN снижает скорость, но повышает безопасность.
  • Работает только при правильной настройке IP маршрутов.
  • Если хотите, можно использовать OpenVPN как второй слой, поверх WireGuard.

Попробуйте VPS с запасом

Оплачиваете год — получаете +1 месяц в подарок.

Месяц в подарок
COPIED
NEWCOMM COPIED