Что нужно подготовить перед началом
Вот весь список покупок. Ничего экзотического тут нет, а общая стоимость - пара долларов в месяц:
- Дешёвый VPS (виртуальный сервер). Самого младшего тарифа - 1 vCPU и 1 ГБ оперативной памяти - более чем достаточно для личного использования. При создании выбирайте Ubuntu 22.04 или 24.04.
- Публичный IP-адрес сервера и root (или sudo) доступ по SSH. Провайдер присылает их на почту сразу после оплаты.
- SSH-клиент. На Windows используйте встроенный
sshв PowerShell или PuTTY, на macOS и Linux просто откройте терминал. - VPS на базе KVM. Почти все тарифы такие, но избегайте самых дешёвых на OpenVZ - они используют общее ядро хоста и не могут загрузить WireGuard, поэтому эта настройка там не заработает. Если сомневаетесь, спросите провайдера или выберите тариф с пометкой "KVM".
- Около 15 минут.
Шаг 1: Подключитесь и обновите сервер
Откройте терминал и войдите, заменив адрес на IP вашего сервера:
ssh root@YOUR_SERVER_IP
Первое, что нужно сделать на любом свежем сервере, - установить последние обновления безопасности:
apt update && apt upgrade -y
Шаг 2: Установите WireGuard
Одна команда устанавливает WireGuard и qrencode - небольшую утилиту, которую мы позже используем, чтобы перенести конфиг на телефон в виде QR-кода:
apt install wireguard qrencode -y
Шаг 3: Сгенерируйте ключи сервера
WireGuard использует приватный и публичный ключ на каждой стороне. Создайте пару ключей сервера внутри его директории с конфигом. Команда umask 077 гарантирует, что приватный ключ не смогут прочитать другие пользователи:
cd /etc/wireguard
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
Выведите оба ключа и держите их под рукой для следующих шагов:
cat server_private.key
cat server_public.key
Шаг 4: Найдите свой сетевой интерфейс
Чтобы направить ваш трафик в интернет, серверу нужно знать имя своей публичной сетевой карты. Выполните:
ip route list default
Посмотрите на слово сразу после dev в выводе - обычно это eth0 или ens3. Запишите его; оно понадобится на следующем шаге.
Шаг 5: Создайте конфиг сервера
Создайте файл /etc/wireguard/wg0.conf (например, командой nano /etc/wireguard/wg0.conf) и вставьте блок ниже. Замените SERVER_PRIVATE_KEY на приватный ключ из Шага 3, а eth0 - на имя интерфейса из Шага 4:
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Простыми словами: сервер занимает адрес 10.8.0.1 внутри приватной VPN-сети, слушает UDP-порт 51820, а две строки iptables включают маскарадинг, который позволяет вашим устройствам выходить в большой интернет через него.
Шаг 6: Включите IP-форвардинг
По умолчанию Linux не передаёт трафик с одного интерфейса на другой. Включите это через отдельный небольшой конфиг - чистый, повторяемый способ, который не конфликтует с другими настройками и не накапливается, если запустить его дважды:
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/99-wireguard.conf
sysctl --system
Шаг 7: Создайте клиента и добавьте его как пир
Теперь сгенерируйте пару ключей для вашего первого устройства (ноутбука или телефона):
wg genkey | tee client_private.key | wg pubkey > client_public.key
cat client_private.key
cat client_public.key
Сообщите серверу об этом клиенте, добавив блок [Peer] в конец файла /etc/wireguard/wg0.conf. Здесь используйте публичный ключ клиента:
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32
Шаг 8: Откройте файрвол и запустите WireGuard
Разрешите SSH (чтобы не заблокировать себе доступ) и порт WireGuard, затем включите файрвол:
ufw allow 22/tcp
ufw allow 51820/udp
ufw enable
22), разрешите именно этот порт - например ufw allow 2222/tcp - до того как выполнить ufw enable, иначе файрвол заблокирует вам доступ к собственному серверу.Запустите туннель и настройте его автоматический старт при каждой перезагрузке:
systemctl enable --now wg-quick@wg0
Проверьте, что он работает - вы должны увидеть интерфейс и порт, который он слушает:
wg show
Шаг 9: Создайте конфиг клиента
Каждому подключающемуся устройству нужен небольшой файл конфигурации. На сервере создайте файл с именем client.conf и впишите CLIENT_PRIVATE_KEY (из Шага 7), SERVER_PUBLIC_KEY (из Шага 3) и публичный IP вашего сервера:
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.8.0.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = YOUR_SERVER_IP:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
Строка AllowedIPs = 0.0.0.0/0, ::/0 - это то, что отправляет весь ваш трафик через туннель. Настройка DNS = 1.1.1.1 не даёт вашим запросам утекать к местному провайдеру. Именно этот client.conf вы загружаете на каждое устройство ниже.
Шаг 10: Установите приложение WireGuard и подключитесь
У WireGuard есть бесплатное официальное приложение для каждой платформы. Загрузить ваш client.conf можно двумя способами: отсканировать QR-код (проще всего на телефонах) или импортировать файл (проще всего на компьютерах). Чтобы сделать QR-код, выполните эту команду на сервере и держите окно терминала широким, чтобы код не исказился:
qrencode -t ansiutf8 < client.conf
Android: установите приложение WireGuard из Google Play. Откройте приложение, нажмите кнопку +, выберите Scan from QR code, наведите камеру на код в терминале, дайте туннелю имя, затем переключите тумблер для подключения.
iPhone и iPad: установите приложение WireGuard из App Store. Нажмите +, выберите Create from QR code, отсканируйте код, назовите туннель и включите его. Разрешите конфигурацию VPN, когда iOS попросит.
Windows: скачайте приложение с wireguard.com/install. Скопируйте ваш client.conf на ПК, откройте приложение, нажмите Import tunnel(s) from file, выберите client.conf, затем нажмите Activate.
macOS: установите приложение WireGuard из Mac App Store. Нажмите Import tunnel(s) from file, выберите ваш client.conf, разрешите конфигурацию VPN, затем нажмите Activate.
Linux (десктоп): установите пакет командой apt install wireguard (или эквивалентной для вашего дистрибутива; см. wireguard.com/install), скопируйте client.conf в /etc/wireguard/ и поднимите его командой wg-quick up client. Отключить - командой wg-quick down client.
Добавляете ещё одно устройство? Повторите Шаг 7 для каждого нового телефона или ноутбука: сгенерируйте новую пару ключей, выдайте устройству следующий свободный адрес (10.8.0.3/32, затем 10.8.0.4/32 и так далее), добавьте его собственный блок [Peer] в wg0.conf и примените изменение командой systemctl restart wg-quick@wg0. Дайте каждому устройству свой ключ - никогда не загружайте один конфиг на два устройства сразу.
Шаг 11: Убедитесь, что туннель действительно работает
Включите подключение и проверьте две вещи на нашей странице Сетевые инструменты. Первое: интернет должен видеть IP вашего сервера, а не домашний - страница показывает ваш текущий IP и страну прямо вверху. Второе: откройте вкладку DNS Leak Test и запустите проверку - каждый резолвер в списке должен принадлежать вашему DNS-провайдеру, а не домашнему интернет-провайдеру. Если обе проверки в порядке, у вас рабочий приватный VPN.
Частые ошибки
- Неправильное имя интерфейса. Если
eth0в конфиге не совпадает с тем, что показал Шаг 4, трафик подключится, но никогда не дойдёт до интернета. Это причина номер один туннеля в состоянии "подключено, но интернета нет". - Забыли про IP-форвардинг. Пропуск Шага 6 даёт тот же тупиковый симптом. Перезапустите
sysctl --systemи проверьте, чтоcat /proc/sys/net/ipv4/ip_forwardвозвращает1. - Файрвол провайдера. У некоторых хостеров есть свой файрвол в панели управления поверх
ufw. Убедитесь, что UDP51820открыт и там тоже. - Перепутали ключи. Конфиг сервера хранит публичный ключ клиента; конфиг клиента хранит публичный ключ сервера. Приватные ключи никогда не покидают машину, на которой были созданы.
- IPv6 проскакивает мимо туннеля. Этот гайд направляет IPv6 в туннель (
::/0), но настраивает сервер только под IPv4, поэтому некоторые сайты, работающие только по IPv6, могут грузиться медленно или вообще не открываться. Если такое случилось, проще всего отключить IPv6 на устройстве-клиенте или позже добавить поддержку IPv6 на сервере. - Сбитые часы. С WireGuard всё в порядке, но если часы сервера сильно сбиты, ломается TLS к сайтам. Выполните
timedatectlи при необходимости включите NTP.
Когда обычного WireGuard недостаточно
Собственный туннель WireGuard отлично подходит для приватности - ваш трафик зашифрован и привязан к серверу, которым пользуетесь только вы. Но в странах с агрессивной цензурой у него есть слабое место: системы глубокой инспекции пакетов (DPI) могут распознать трафик WireGuard по его отпечатку и замедлить или отбрасывать его, даже если не могут прочитать, что внутри. Операторы в России, например, перешли к блокировке VPN на устройствах ТСПУ, установленных в каждой сети, а регуляторы там открыто продвигают тотальную блокировку VPN-трафика. Если ваша цель - обход именно такого DPI, а не повседневная приватность, лучше подойдёт протокол, который маскируется под обычный HTTPS, - например VLESS с Reality. Эту настройку мы разберём в отдельном гайде этого раздела.
Законно ли держать собственный VPN?
В большинстве стран мира арендовать сервер и держать на нём собственный VPN совершенно законно - это та же технология, которую компании используют для удалённой работы. Однако вы отвечаете за то, что делаете через него: VPN меняет то, откуда якобы приходит ваш трафик, но не ставит вас выше закона. Небольшое число стран ограничивает или лицензирует использование VPN, поэтому проверьте правила там, где вы реально живёте. И помните о честных пределах самостоятельного хостинга: ваш трафик приватен от локальной сети и вашего интернет-провайдера, но компания, которая сдаёт вам VPS, всё равно видит, что сервер по этому IP существует и сколько данных он передаёт. Для большинства людей этот компромисс более чем оправдан - вы получаете туннель, который никто больше не делит с вами, на ваших условиях.
/etc/wireguard/ в надёжном месте, никогда не делитесь приватным ключом и создавайте отдельный блок [Peer] со своей парой ключей для каждого нового устройства вместо повторного использования одного. Если устройство потеряется, вы сможете отозвать только этот пир. Когда устройство настроено, удалите оставшиеся клиентские файлы с сервера, чтобы его приватный ключ там не валялся: rm client.conf client_private.key.