# Настройка WireGuard на OpenWrt

> Настройка WireGuard на OpenWrt: пакеты wireguard-tools и luci-proto-wireguard, opkg или apk по версии, секции UCI, зона брандмауэра и проверка wg show.

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

---

**Всё сводится к одному пакету: для командной строки хватает `wireguard-tools`, для веб-интерфейса — `luci-proto-wireguard`, который тянет первый как зависимость.** Оба пути пишут одну конфигурацию, итог от способа не зависит. Пакета с коротким именем `wireguard` в репозитории нет.

> **Коротко.** Команда установки зависит от ветки: 24.10 и старше — `opkg install`, 25.12 и новее — `apk -U add`. Порт по умолчанию 51820, MTU — 1420 байт. Пир описывается секцией типа `wireguard_wg0` — по имени интерфейса. Адрес интерфейса обязан идти с маской — иначе он молча становится /32.

## Что нужно до начала?

**Понадобятся доступ по SSH или в LuCI и параметры второй стороны: публичный ключ, внешний адрес с портом, адрес внутри туннеля.** Ветка прошивки видна на странице Status → Overview. Если второй стороны ещё нет, поднимите её на арендованной машине: порядок — в гайде по [WireGuard на VPS](/nastrojka/wireguard/).

## Чем opkg отличается от apk?

**Пакетный менеджер сменился в релизе 25.12, а не в 24.10, как часто пишут: примечания к выпуску 24.10.0 прямо указывают, что эта ветка работает только с opkg.** OpenWrt 25.12.0 вышел 5 марта 2026 года; обе ветки живут параллельно.

```
opkg update && opkg install luci-proto-wireguard   # 24.10 и старше
apk -U add luci-proto-wireguard                    # 25.12 и новее
```

Ставить `wireguard-tools` отдельно не нужно: у пакета протокола он в зависимостях вместе с `ucode`, `luci-lib-uqr` и `resolveip`.

## Как поднять туннель на маршрутизаторе?

**Пять шагов и два файла: пакет, интерфейс wg0, пир, зона брандмауэра и проверка — туннель описан в `/etc/config/network`, зона в `/etc/config/firewall`.** Команды — по SSH, в LuCI у каждого шага есть зеркало.

### Шаг 1. Поставить пакет и перезапустить сеть 

В LuCI: System → Software, обновить списки, найти `luci-proto-wireguard`. Затем перезапустите сеть — System → Startup → Initscripts → network → Restart; этот шаг вики даёт отдельным пунктом.

### Шаг 2. Создать интерфейс wg0 

```
uci set network.wg0="interface"
uci set network.wg0.proto="wireguard"
uci set network.wg0.private_key="generate"
uci add_list network.wg0.addresses="192.168.9.2/24"
```

`generate` — не заглушка: netifd запускает `wg genkey` и пишет ключ обратно в конфигурацию. **Маска в адресе обязательна** — документация выделяет это дважды: адрес без маски описывает подсеть /32, и трафик до второй стороны не маршрутизируется.

### Шаг 3. Описать пира секцией wireguard_wg0 

```
uci set network.wgserver="wireguard_wg0"
uci set network.wgserver.public_key="КЛЮЧ_ВТОРОЙ_СТОРОНЫ"
uci set network.wgserver.endpoint_host="203.0.113.10"
uci set network.wgserver.persistent_keepalive="25"
uci set network.wgserver.route_allowed_ips="1"
uci add_list network.wgserver.allowed_ips="0.0.0.0/0"
uci add_list network.wgserver.allowed_ips="::/0"
uci commit network
```

Тип секции — `wireguard_<имя интерфейса>`, поэтому блок из чужого гайда с другим именем не подхватится. Порт не указан намеренно: обработчик подставляет 51820, а `route_allowed_ips` создаёт маршруты под перечисленные диапазоны.

### Шаг 4. Отдать интерфейс зоне брандмауэра 

Новую зону создавать не нужно, туннель отдают существующей. Но зоны в штатном `/etc/config/firewall` — анонимные секции, и `firewall.wan` до переименования вернёт ошибку, поэтому вики сначала даёт им имена:

```
uci rename firewall.@zone[1]="wan"   # индекс сверьте: uci show firewall
uci del_list firewall.wan.network="wg0"   # при повторном прогоне: снимает дубль
uci add_list firewall.wan.network="wg0"
uci commit firewall
service firewall restart
```

Зона wan выбрана не для простоты: `masq` и `mtu_fix` у неё по умолчанию равны единице. Но `masq` работает только для IPv4 — у шестой версии своя опция `masq6` с нулём.

Своя зона нужна при изоляции туннеля и в серверном режиме: `input` и `forward` в REJECT, `output` в ACCEPT, флаги `masq="1"` и `mtu_fix="1"`, пересылка из lan. Рабочий предел имени — 11 символов, и `WireguardVPN` из вики его уже превышает, так что берите короче: `wgvpn`.

### Шаг 5. Проверить канал через wg show 

`wg show` печатает пиров, время рукопожатия и счётчики трафика: пустое рукопожатие означает сетевую причину, а не ошибку в ключах. Правила смотрят через `nft list ruleset` — в fw4 работает nftables, а `iptables -L` покажет пустоту.

## Чем LuCI отличается от файла UCI?

**Ничем по результату: веб-интерфейс — редактор того же `/etc/config/network`.**

| Поле в LuCI | Опция в конфигурации | Вкладка |
|---|---|---|
| Listen Port | `listen_port` | General, плейсхолдер random |
| IP Addresses | `addresses` | General, только с маской |
| MTU, Firewall Mark | `mtu`, `fwmark` | Advanced, метка с 0x |
| Persistent Keep Alive | `persistent_keepalive` | Peers, диапазон 0–65535 |

Ловушка выделена в документации: после добавления пира «Save & Apply» мало — нужен Restart интерфейса wg0 на странице Interfaces.

## Как настроить роутер сервером?

**Отличий четыре, и главное — зона: интерфейс кладут в lan, а входящее правило открывает UDP-порт 51820.**

| Параметр | Роутер как клиент | Роутер как сервер |
|---|---|---|
| Зона брандмауэра | интерфейс в зону wan | интерфейс в зону lan |
| Входящее правило | не требуется | src wan, UDP 51820, ACCEPT |
| `allowed_ips` у пира | 0.0.0.0/0 и ::/0 | /32 и /128 клиента |
| Адрес в туннеле | 192.168.9.2/24 | 192.168.9.1/24 |

В LuCI то же правило — вкладка Traffic Rules: UDP, источник wan, назначение Device, порт 51820. Серверная роль даёт удалённый доступ к домашней сети, но не даёт предсказуемой точки выхода: для этого роутер оставляют клиентом, а вторую сторону держат на арендованной машине ([настройка защищённого канала на своём сервере](/nastrojka/)).

## Почему туннель не поднимается?

Начинайте с `wg show`: нулевые счётчики значат, что пакеты не дошли вовсе.

| Симптом | Причина | Решение |
|---|---|---|
| Рукопожатия нет ни разу | UDP-порт не доходит | Входящее правило, `nft list ruleset` |
| Рукопожатие есть, сайты не грузятся | Нет подмены адреса у зоны | `masq="1"`, для IPv6 `masq6="1"` |
| Правка в LuCI не сработала | Нажат только Save & Apply | Restart интерфейса wg0 |
| Маршрутов нет | Адрес записан без маски | Указать `192.168.9.2/24` |
| После перезагрузки рукопожатий нет | Часы ушли назад, метка TAI64N не растёт | Дождаться sysntpd, сверить `date` |

MTU здесь не подбирается сам: в отличие от `wg-quick` netifd трогает его только при явно заданной опции, иначе действует дефолт драйвера ядра — 1420 байт. Прочие причины сбоев — в материале о том, [почему VPN не работает на роутере](/ne-rabotaet/na-routere/).

## Правовая рамка

Материал носит образовательный, научно-технический характер и описывает шифрование трафика и удалённый доступ к собственной сети. Прямой ответственности за использование VPN физическим лицом законодательство РФ не устанавливает: статья 15.8 ФЗ-149 и статья 13.52 КоАП адресованы владельцам средств доступа.

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

Ниже — то, что спрашивают чаще всего при первой настройке.
