Все системы в норме · Средняя загрузка нод: 23% · Потери пакетов: 0,41 мс Статус сети →
Сеть · 9 минут · обновлено 18.03.2026

Свой WireGuard за десять минут

WireGuard живёт в ядре Linux с версии 5.6, конфигурация умещается в пятнадцать строк, а накладные расходы на шифрование заметно ниже, чем у OpenVPN. Для личного или корпоративного использования это лучший выбор по умолчанию.

1. Установка и ключи

apt update && apt install -y wireguard
umask 077
wg genkey | tee /etc/wireguard/server.key | wg pubkey > /etc/wireguard/server.pub

umask 077 — не украшение: приватный ключ, доступный на чтение другим пользователям системы, обесценивает всю конструкцию.

2. Конфигурация сервера

Файл /etc/wireguard/wg0.conf:

[Interface]
Address    = 10.8.0.1/24, fd42:42::1/64
ListenPort = 51820
PrivateKey = <содержимое server.key>

PostUp   = nft add table ip nat; \
           nft 'add chain ip nat postrouting { type nat hook postrouting priority 100 ; }'; \
           nft add rule ip nat postrouting oifname "ens3" masquerade
PostDown = nft delete table ip nat

[Peer]
# ноутбук
PublicKey  = <публичный ключ клиента>
AllowedIPs = 10.8.0.2/32, fd42:42::2/128

Имя внешнего интерфейса уточните командой ip -br a — на наших образах это обычно ens3, реже eth0.

3. Включаем маршрутизацию

cat > /etc/sysctl.d/99-wg.conf <<'EOF'
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
EOF
sysctl --system

И разрешаем порт в файрволе (см. nftables):

udp dport 51820 accept

4. Запуск

systemctl enable --now wg-quick@wg0
wg show

Вывод wg show покажет интерфейс, порт и список пиров. Пустая строка latest handshake означает, что клиент ещё не подключался.

5. Конфигурация клиента

[Interface]
PrivateKey = <приватный ключ клиента>
Address    = 10.8.0.2/32, fd42:42::2/128
DNS        = 9.9.9.9, 149.112.112.112

[Peer]
PublicKey           = <публичный ключ сервера>
Endpoint            = 92.223.14.87:51820
AllowedIPs          = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

AllowedIPs = 0.0.0.0/0, ::/0 заворачивает весь трафик в туннель. Если нужен доступ только к внутренней сети — укажите конкретную подсеть, например 10.8.0.0/24.

PersistentKeepalive = 25 обязателен, когда клиент за NAT: без него запись в таблице трансляции роутера протухает, и входящие пакеты перестают доходить.

Не забудьте про DNS: без него запросы уйдут к провайдерскому резолверу мимо туннеля, и смысл теряется.

6. Подключение по QR-коду

Для телефона удобнее не копировать текст, а отсканировать:

apt install qrencode
qrencode -t ansiutf8 < /etc/wireguard/clients/phone.conf

7. Про MTU

Классический симптом неверного MTU: туннель поднялся, ping работает, но крупные страницы не открываются, а ssh «зависает» на выводе. Заголовок WireGuard занимает 60 байт для IPv4 и 80 для IPv6.

ping -M do -s 1372 -c 3 1.1.1.1     # подбираем максимальный проходящий размер

К найденному значению прибавьте 28 (заголовки ICMP и IP) — получите MTU канала, вычтите 60 — получите MTU для интерфейса. При работе через мобильного оператора рабочее значение обычно 1280–1380:

[Interface]
MTU = 1360

8. Добавление клиентов

Каждому устройству — свой ключ и свой адрес. Не используйте одну конфигурацию на двух устройствах: при одновременном подключении оба будут периодически терять связь.

wg genkey | tee client2.key | wg pubkey > client2.pub
wg set wg0 peer $(cat client2.pub) allowed-ips 10.8.0.3/32
wg-quick save wg0      # сохранить изменения в конфиг

9. Типовые ошибки

  • Handshake не проходит. Проверьте, что порт открыт в nftables и что в конфиге клиента указан правильный публичный ключ сервера (легко перепутать с приватным).
  • Туннель поднялся, интернета нет. Не включён ip_forward или не работает masquerade. Проверьте nft list table ip nat.
  • Работает, но медленно. Почти всегда MTU. См. раздел 7.
  • Отваливается через несколько минут. Нет PersistentKeepalive на клиенте за NAT.
  • Утечка DNS. Не указан параметр DNS в секции Interface клиента.

Правовая сторона

Личный и корпоративный VPN разрешён на всех наших локациях без согласования. Публичный VPN-сервис с массовой регистрацией пользователей требует предварительного согласования — такие проекты генерируют поток жалоб, который бьёт по репутации всей подсети. Подробности — в правилах использования.