# Настройка клиента WireGuard

> WireGuard настройка клиента: разбор полей .conf, импорт в официальные приложения с wireguard.com на Windows, macOS, Linux, Android и iOS и типовые ошибки.

Источник: https://vpn-ne-rabotaet.ru/nastrojka/wireguard-klient/
Страница обновлена: 2026-08-15

---

**Клиентская сторона WireGuard — это один файл `.conf` и его импорт в приложение.** В `[Interface]` обязательно ровно одно поле, `PrivateKey`: адрес, DNS и MTU протоколу не принадлежат, их обрабатывает `wg-quick`. Серверная часть — в гайде [«Настройка WireGuard на своём VPS»](/nastrojka/wireguard/).

> **Коротко.** `[Interface]` — про ваше устройство, `[Peer]` — про сервер. Ключи base64 — ровно 44 символа. `PersistentKeepalive` по умолчанию 0, по документации разумны 25 секунд. Рукопожатие повторяется каждые 5 секунд и прекращается примерно через 90 секунд.

## Что за файл вам прислали?

**Обычный ini-файл, который все официальные приложения читают одинаково.** Протоколу принадлежит меньшая часть строк: `wg(8)` отдаёт файл подкоманде `setconf`, а `Address`, `DNS`, `MTU` и `Table` добавляет обёртка. Имя файла становится именем интерфейса: на Linux — до 15 символов, в Windows-клиенте до 32.

```ini
[Interface]
PrivateKey = приватный ключ ЭТОГО устройства
Address = 10.8.0.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = публичный ключ сервера
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = host.example.net:51820
PersistentKeepalive = 25
```

## Что означает каждое поле конфигурации?

**Путаницу создаёт то, что поля принадлежат разным слоям — ядру и утилите-обёртке.**

| Поле | Секция | Что задаёт |
|---|---|---|
| `PrivateKey` | Interface | ключ устройства, обязателен |
| `Address` | Interface | адрес устройства в вашей сети |
| `DNS` | Interface | резолверы на время работы канала |
| `MTU` | Interface | размер пакета; Apple: 576–65535 |
| `PublicKey` | Peer | публичный ключ сервера |
| `AllowedIPs` | Peer | маршрут наружу и фильтр входящих |
| `Endpoint` | Peer | «хост:порт», обновляется сам |
| `PersistentKeepalive` | Peer | интервал 1–65535 с, по умолчанию 0 |

## Чем AllowedIPs отличается от списка сайтов?

**У поля две роли сразу: наружу — таблица маршрутизации, внутрь — список контроля доступа.** По `wg(8)`, подсети задают, откуда разрешён входящий трафик пира и куда идёт исходящий. Сузив значение до `10.8.0.0/24`, вы не «ограничите сайты», а оставите остальной интернет мимо канала.

## Как подключить конфигурацию на своём устройстве?

**Пять официальных клиентов читают один формат и различаются только пунктами меню.** Ставить их нужно с `wireguard.com/install` и из официальных магазинов: в сторонних сборках и на «зеркалах» неизвестно, что код делает с приватным ключом.

### Шаг 1. Проверить файл до импорта 

Ключи — ровно 44 символа base64 (32 байта): при другой длине Android отвечает «Incorrect key length», при постороннем символе внутри строки — «Bad characters in key». В `[Interface]` — приватный ключ вашего устройства, в `[Peer]` — публичный серверный: перепутанные местами ошибки не дают, канал молчит.

### Шаг 2. Импортировать в настольное приложение 

Windows: «Add Tunnel» → «Import tunnel(s) from file…», принимаются `.conf` и `.zip`. macOS: «Add a tunnel» → «Create from file or archive». Windows хранит туннель не там, где лежал файл, а в `%ProgramFiles%\WireGuard\Data\Configurations` под DPAPI.

### Шаг 3. Разложить конфигурацию на Linux 

Пакет: `apt install wireguard` в Ubuntu, `dnf install wireguard-tools` в Fedora, `pacman -S wireguard-tools` в Arch. Файл кладётся как `/etc/wireguard/<имя>.conf`, подъём — `wg-quick up <имя>`, автозапуск — `systemctl enable --now wg-quick@<имя>`.

### Шаг 4. Подключить телефон по QR-коду 

Android: «Import from file or archive» либо «Scan from QR code». iOS: «Add a tunnel» → «Create from QR code». Код делается командой `qrencode -t ansiutf8 < tunnel.conf` и содержит конфигурацию целиком, вместе с ключом, — фото экрана пересылать нельзя.

### Шаг 5. Убедиться, что канал живой 

Смотреть надо не на значок подключения, а на время рукопожатия: Apple показывает «Latest handshake», «Data received» и «Data sent», Android — «Latest handshake» и «Transfer», на Linux — `wg show`.

## Какие ошибки клиента встречаются чаще всего?

**Почти всё сводится к шести ситуациям, и в пяти виновато поле в конфигурации, а не сервер.**

| Симптом | Причина | Решение |
|---|---|---|
| Нет строки Latest handshake | ключи перепутаны | приватный — свой, публичный — серверный |
| «Incorrect key length» | ключ обрезан при копировании | ровно 44 символа без пробелов |
| Рукопожатие есть, сайтов нет | Windows: один пир с `/0`, пустой `DNS` | резолвер или `0.0.0.0/1` + `128.0.0.0/1` |
| Канал замолкает через минуту | `PersistentKeepalive` = 0 | поставить значение 25 |
| «Unable to resolve DNS hostname» | домен в `Endpoint` не разрешился | подставить IP-адрес сервера |
| Страницы «висят» только на ПК | разные MTU по умолчанию | задать MTU явно в обоих |

## Почему рукопожатие не завершается?

**Строка «Handshake did not complete» приходит от реализации протокола, а не от приложения, и одинакова на всех платформах.** Попытка повторяется каждые 5 секунд, окно попыток — 90 секунд. Поэтому «did not complete after 5 seconds, retrying (try 2)» в первые секунды норма, а финальная строка в логе — «after 20 attempts, giving up». Если рукопожатия нет вовсе, правка `.conf` не поможет: маскировка трафика и работа поверх TCP в WireGuard не предусмотрены принципиально, нужен другой транспорт — гайды в разделе [«Настройка защищённого канала»](/nastrojka/).

## Что делать, если канал есть, а интернета нет?

**На Windows это документированное поведение: при единственном пире с маршрутом `/0` служба включает kill-switch.** Наружу остаются петля, трафик канала, DHCP и NDP, порт 53 — только к серверам из поля `DNS`, остальное блокируется. Решения два: вписать работающий резолвер либо заменить `0.0.0.0/0` парой `0.0.0.0/1` и `128.0.0.0/1`, что равно снятию отметки «Block untunneled traffic». На Linux вместо этого работает policy routing с таблицей от 51820. Смежное — на странице [«VPN подключён, но сайты не открываются»](/ne-rabotaet/podklyuchen-no-ne-rabotaet/).

## Почему MTU на телефоне и ноутбуке разный?

**При пустом поле `MTU` платформы считают его по-разному.** На десктопе `wg-quick` берёт MTU маршрута до `Endpoint` и вычитает 80 байт, откуда типовое 1420; служба Windows делает то же. Android подставляет жёсткие 1280. Отсюда «на телефоне открывается, на ноутбуке висит» — лечится явным `MTU` в обоих.

## Как задаётся DNS и почему он молчит?

**На Linux поле `DNS` реализовано внешней утилитой: при подъёме выполняется `resolvconf -a tun.<интерфейс> -m 0 -x`.** У `wireguard-tools` зависимость необязательная (Suggests), а сам `/usr/sbin/resolvconf` в Ubuntu 24.04 приносит пакет `systemd-resolved`: на штатной системе команда есть, а на минимальных образах и в контейнерах без него канал поднимется, команда упадёт с «command not found», и резолвинг останется провайдерским. Проверка — `command -v resolvconf`. На Android адреса из поля `DNS` уходят системе через `VpnService.Builder.addDnsServer`. Смежное — в материале [«VPN не работает на Android»](/ne-rabotaet/na-android/).

## Частые вопросы

Собрали то, что спрашивают чаще всего при первом импорте.
