Привет, это снова я. Сегодня расскажу о том, как вручную настроить 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
- — выходной сервер, именно с него будет виден внешний IP.
VPS2
- Два IP-адреса для VPN (по одному на каждый сервер).
- Установленный WireGuard или OpenVPN на обоих серверах (я буду показывать на примере WireGuard).
- Понимание, как пользоваться ,
ssh
,iptables
и базовой сетевой логикой.wg
Шаг 1. Настраиваем VPN-туннель между VPS1 и VPS2
- На VPS2 — создаём сервер WireGuard:
# Устанавливаем WireGuard apt update && apt install wireguard -y # Генерируем ключи wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey
- Конфигурация на VPS2:
/etc/wireguard/wg0.conf
[Interface] Address = 10.20.0.2/24 PrivateKey = <PRIVATE_KEY_VPS2> ListenPort = 51820 [Peer] PublicKey = <PUBLIC_KEY_VPS1> AllowedIPs = 10.20.0.1/32
- На 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 месяц в подарок.