Если вы развернули Wireguard на VPS, но клиенты не могут выходить в интернет — это классическая проблема, с которой сталкиваются многие. Всё кажется настроенным правильно: подключение устанавливается, SSH работает, но веб-страницы не грузятся, а ping до DNS-серверов молчит. Чаще всего причина кроется в трёх вещах — IP-форвардинг, NAT или правила фаервола. Давайте разберём каждую детально, как под микроскопом.
1. IP-форвардинг: проверьте, «разрешён ли транзит»
Сервер выступает шлюзом, поэтому он должен уметь перенаправлять пакеты между интерфейсами. По умолчанию в Debian эта опция отключена.
Как проверить текущий статус:
sysctl net.ipv4.ip_forward
Если в выводе net.ipv4.ip_forward = 0
— форвардинг отключён.
Включение временно (до перезагрузки):
sudo sysctl -w net.ipv4.ip_forward=1
Для постоянной активации:
- Откройте файл
/etc/sysctl.conf
. - Найдите строку
#net.ipv4.ip_forward=1
, удалите решётку в начале. - Сохраните файл и примените изменения:
sudo sysctl -p
Если вы используете UFW (Uncomplicated Firewall), дополнительно проверьте, разрешён ли форвардинг в его настройках. Для этого в файле
/etc/default/ufw
должна быть строкаDEFAULT_FORWARD_POLICY="ACCEPT"
.
2. NAT и iptables: «маскировка» трафика
Без настройки трансляции адресов (NAT) внешние серверы не поймут, куда отправлять ответы на запросы от вашего клиента. Трафик должен выглядеть так, будто он исходит от VPS.
Временное добавление правила MASQUERADE:
sudo iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE
Здесь enp1s0
— имя основного сетевого интерфейса (его можно узнать через ip a
).
Разрешение форвардинга в цепочке FORWARD:
sudo iptables -I FORWARD -j ACCEPT
Как сделать правила постоянными:
Для систем с UFW:
- Отредактируйте
/etc/ufw/before.rules
. - Перед строкой
*filter
добавьте:
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o enp1s0 -j MASQUERADE
COMMIT
- Перезапустите UFW:
sudo ufw disable && sudo ufw enable
Для систем без UFW:
sudo apt install iptables-persistent
sudo netfilter-persistent save
3. Детали конфигурации: что могло ускользнуть
Даже мелкие ошибки в конфигах Wireguard ломают всю работу. Сравните ваши файлы с эталонными примерами.
Сервер (/etc/wireguard/wg0.conf
):
[Interface]
PrivateKey = <серверный_ключ>
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o enp1s0 -j MASQUERADE
[Peer]
PublicKey = <публичный_ключ_клиента>
AllowedIPs = 10.0.0.2/32
Клиент (wg0.conf
на устройстве):
[Interface]
PrivateKey = <клиентский_ключ>
Address = 10.0.0.2/32
DNS = 8.8.8.8, 8.8.4.4
[Peer]
PublicKey = <публичный_ключ_сервера>
Endpoint = <IP_сервера>:51820
AllowedIPs = 0.0.0.0/0
Обратите внимание на секцию
PostUp/PostDown
в серверной конфигурации. Эти команды автоматически применяют правила iptables при старте интерфейса Wireguard — это страховка от «забытых» настроек после перезагрузки.
Дополнительные проверки:
- Убедитесь, что порт
51820/udp
открыт в фаерволе VPS. Для UFW:
sudo ufw allow 51820/udp
- Проверьте маршрутизацию на клиенте командой
ip route show
. По умолчанию весь трафик (0.0.0.0/0
) должен идти черезwg0
. - Используйте
traceroute 8.8.8.8
илиmtr 8.8.8.8
, чтобы отследить, где обрывается путь пакетов.
Если после всех настроек проблема остаётся — включите логирование в Wireguard, добавив в секцию [Interface]
сервера строку ListenPort = 51820 # Логирование
. Затем просмотрите логи через journalctl -u wg-quick@wg0 -f
. Часто там можно найти подсказки о блокировке пакетов или ошибках handshake.
Готово! Теперь ваш VPN должен работать как часы. Если что-то пошло не так — смело пишите в комментарии, разберёмся вместе.