Multi-hop VPN пропускает ваш трафик через два сервера в двух разных странах, поэтому ни одна машина не знает одновременно и кто вы, и что вы делаете. Коммерческие VPN предлагают это как "Double VPN" или "Secure Core", но самая приватная версия - собранная вами самими из двух серверов, которыми управляете только вы. Этот гайд соединяет в цепочку два сервера WireGuard - входной (entry) сервер, к которому вы подключаетесь, и выходной (exit) сервер, откуда трафик уходит в интернет, - так ваш реальный IP скрыт за двумя прыжками, которые никто другой не сможет логировать.
Как работает цепочка
Ваше устройство подключается только к входному серверу. Входной сервер не отправляет ваш трафик напрямую в интернет - вместо этого он прогоняет всё через второй WireGuard-туннель на выходной сервер, который уже выходит в интернет. Путь такой: вы → вход → выход → интернет. Входной сервер видит ваш реальный IP, но никогда - пункт назначения; выходной видит пункт назначения, но всегда видит только входной сервер. Сайты видят IP выходного сервера. Выходному серверу дадим диапазон 10.8.0.0/24, а входному 10.7.0.0/24 для ваших устройств.
Шаг 1: Настройка выходного сервера
Выходной сервер - это просто обычный WireGuard-сервер. На выходном VPS установите WireGuard и сгенерируйте ключи:
apt update && apt install -y wireguard
wg genkey | tee /etc/wireguard/exit.key | wg pubkey > /etc/wireguard/exit.pub
cat /etc/wireguard/exit.key # this is EXIT_PRIVATE_KEY
cat /etc/wireguard/exit.pub # this is EXIT_PUBLIC_KEY
Найдите публичный сетевой интерфейс (обычно eth0) командой ip route show default. Затем создайте /etc/wireguard/wg0.conf на выходном сервере:
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = EXIT_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# The entry server (we add its key in Step 4)
PublicKey = ENTRY_LINK_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32
Замените eth0, если ваш интерфейс отличается. Пока оставьте ENTRY_LINK_PUBLIC_KEY как заглушку - мы сгенерируем его на Шаге 4.
Шаг 2: Включите форвардинг и запустите выход
Включите IP-форвардинг навсегда, затем запустите WireGuard на выходном сервере:
echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-wg.conf
sysctl -p /etc/sysctl.d/99-wg.conf
ufw allow 51820/udp
systemctl enable --now wg-quick@wg0
Запомните публичный IP выходного сервера - назовём его EXIT_IP.
Шаг 3: Настройка входного сервера (ваша сторона)
На входном VPS установите WireGuard и сгенерируйте две пары ключей - одну для туннеля к вашим устройствам (wg0) и одну для линка к выходу (wg1):
apt update && apt install -y wireguard
wg genkey | tee /etc/wireguard/entry0.key | wg pubkey > /etc/wireguard/entry0.pub # faces your devices
wg genkey | tee /etc/wireguard/entry1.key | wg pubkey > /etc/wireguard/entry1.pub # link to exit
Публичный ключ из entry1.pub - это ENTRY_LINK_PUBLIC_KEY, который вы оставили заглушкой на выходном сервере на Шаге 1. Вернитесь и вставьте его в wg0.conf выходного сервера, затем выполните systemctl restart wg-quick@wg0 на выходном сервере.
Шаг 4: Создайте линк вход-выход (wg1)
На входном сервере создайте /etc/wireguard/wg1.conf. Это делает входной сервер клиентом выходного:
[Interface]
Address = 10.8.0.2/24
PrivateKey = ENTRY_LINK_PRIVATE_KEY
# Do NOT route the whole server through the exit - that would cut your own SSH.
# Send only your client subnet (10.7.0.0/24) through the exit, via a separate table.
Table = off
PostUp = ip rule add from 10.7.0.0/24 table 120; ip route add default dev wg1 table 120
PostDown = ip rule del from 10.7.0.0/24 table 120; ip route del default dev wg1 table 120
[Peer]
# The exit server
PublicKey = EXIT_PUBLIC_KEY
Endpoint = EXIT_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
ENTRY_LINK_PRIVATE_KEY - это содержимое entry1.key. Это самый важный шаг, который нужно сделать правильно. Обычный AllowedIPs = 0.0.0.0/0 заставил бы WireGuard направить собственный трафик входного сервера - включая вашу SSH-сессию - через выход, что оборвёт ваш доступ к серверу. Table = off это предотвращает, а правила policy routing заворачивают через выход только вашу клиентскую подсеть, оставляя сам сервер доступным как обычно.
Шаг 5: Создайте входной туннель для ваших устройств (wg0)
Всё ещё на входном сервере, создайте /etc/wireguard/wg0.conf. Это туннель, к которому подключается ваш телефон или ноутбук, а правила маршрутизации проталкивают этот трафик в wg1:
[Interface]
Address = 10.7.0.1/24
ListenPort = 51820
PrivateKey = ENTRY_DEVICE_PRIVATE_KEY
PostUp = iptables -A FORWARD -i wg0 -o wg1 -j ACCEPT; iptables -A FORWARD -i wg1 -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o wg1 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -o wg1 -j ACCEPT; iptables -D FORWARD -i wg1 -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o wg1 -j MASQUERADE
[Peer]
# Your device (we add its key in Step 6)
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.7.0.2/32
ENTRY_DEVICE_PRIVATE_KEY - это содержимое entry0.key. Маскарадинг на wg1 прячет ваше устройство за входным сервером, поэтому выход всегда видит только вход.
Шаг 6: Создайте конфиг устройства и подключитесь
Сгенерируйте пару ключей для устройства (на своём компьютере или на входном сервере), затем соберите клиентский конфиг. Вставьте публичный ключ устройства в wg0.conf входного сервера там, где CLIENT_PUBLIC_KEY. Конфиг вашего устройства выглядит так:
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.7.0.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = ENTRY_DEVICE_PUBLIC_KEY
Endpoint = ENTRY_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Здесь ENTRY_DEVICE_PUBLIC_KEY - из entry0.pub, а ENTRY_IP - публичный IP входного сервера, единственного сервера, с которым вообще общается ваше устройство.
Шаг 7: Запустите вход и проверьте цепочку
На входном сервере включите форвардинг и запустите оба туннеля по порядку (сначала линк, потом туннель устройства):
echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-wg.conf
sysctl -p /etc/sysctl.d/99-wg.conf
ufw allow 51820/udp
systemctl enable --now wg-quick@wg1
systemctl enable --now wg-quick@wg0
Теперь импортируйте клиентский конфиг в приложение WireGuard на устройстве и подключитесь. Чтобы убедиться, что цепочка работает, проверьте свой IP - он должен показывать страну выходного сервера, а не входного:
curl https://api.ipify.org
Если вернулся IP выходного сервера - ваш трафик прыгает через оба сервера. Прогоните тест на утечки на нашей странице сетевых инструментов, чтобы убедиться, что нет утечек DNS или WebRTC.
sysctl net.ipv4.ip_forward должен вернуть 1) на обоих серверах, что на выходном сервере есть ключ входного в блоке [Peer], и что оба фаервола пропускают UDP 51820. Если IP показывает страну входа вместо выхода - правило MASQUERADE -o wg1 на входе не загрузилось, перезапустите wg0 на входном сервере.Стоит ли оно того?
Свой multi-hop - самая приватная схема из существующих: два сервера, которыми владеете вы, в двух странах, без провайдера-посредника, ведущего логи. Компромиссы - скорость (два прыжка добавляют задержку) и цена (два VPS вместо одного). Для повседневного сёрфинга одного сервера достаточно; собирайте цепочку, когда ваша модель угроз действительно этого требует. И помните: multi-hop защищает вашу приватность, но не меняет закон той страны, где вы живёте.