Решение проблемы с доступом в интернет через Wireguard на VPS

Если вы развернули 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

Для постоянной активации:

  1. Откройте файл /etc/sysctl.conf.
  2. Найдите строку #net.ipv4.ip_forward=1, удалите решётку в начале.
  3. Сохраните файл и примените изменения:
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:

  1. Отредактируйте /etc/ufw/before.rules.
  2. Перед строкой *filter добавьте:
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o enp1s0 -j MASQUERADE
COMMIT
  1. Перезапустите 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 должен работать как часы. Если что-то пошло не так — смело пишите в комментарии, разберёмся вместе.

Добавить комментарий

Все поля обязательны к заполнению. Ваш адрес email не будет виден никому.

Новое
Интересное