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

Ошибка возникает до того, как заговорит любой партнёр

Создание интерфейса — это один запрос netlink к ядру о устройстве типа wireguard. У ядра либо есть драйвер, понимающий этот тип, либо нет, и ответ возвращается сразу. На этом шаге ни один пакет не покидает машину, поэтому адреса конечных точек и ключи сервера не могут быть причиной.

Этот порядок важен для диагностики. Если команда так и не создала устройство, проблема не может быть в неверном открытом ключе или заблокированном порте UDP. Сначала исправьте локальный путь создания и только потом смотрите наружу.

Какая реализация должна владеть устройством

На этот запрос могут ответить две реализации. Модуль внутри ядра регистрирует тип устройства wireguard, а реализация в пользовательском пространстве, например wireguard-go, предоставляет тот же интерфейс другим механизмом. Если модуль отсутствует, ядро отклоняет запрос с ошибкой о неподдерживаемом устройстве, и решение — либо загрузить модуль, либо направить инструменты на реализацию в пользовательском пространстве.

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

lsmod | grep wireguard
ip link add wgtest0 type wireguard

Вторая команда — это наименьшее возможное воспроизведение: она просит устройство и больше ничего. Если она срывается с сообщением о неподдерживаемом типе, недостающая часть — это реализация, а не ваш файл конфигурации.

Error textWhat refusedNext step
Unknown device type or operation not supportedThe kernel has no wireguard driverLoad the module or use the userspace implementation
Operation not permittedMissing privilegeUse the service context or grant the capability
File existsThe name is already in useInspect the owner before touching it
No such device in a containerNo tunnel device or capabilityAdd the device and NET_ADMIN to the container

Права и границы контейнера

Создание и настройка сетевого устройства требуют прав: либо как root, либо с возможностью администрировать сеть. Обычная сессия пользователя этого не может, и это ограничение — сам замысел, а не препятствие, которое нужно обходить запуском непроверенного установщика.

Внутри контейнера граница удваивается. Контейнеру нужен доступ к туннельному устройству и возможность его настраивать, и флаги, которые это дают, те же, что использует контейнер VPN в Linux. Ограниченный гость, который обычно может просматривать веб, всё равно не может создать интерфейс, потому что просмотру такая возможность не нужна. Дайте возможность той службе, которой она нужна, а не каждой сессии на хосте.

Устраните конфликт имён и повторите попытку

Интерфейс, который уже существует, не обязательно остаток. Другой менеджер может владеть именем и использовать его прямо сейчас, поэтому осмотрите его, прежде чем что-либо удалять:

ip link show wg0
sudo wg show wg0

Если владельцем является активная служба, настройте эту службу вместо создания второго устройства. Если он действительно устарел, удалите его через инструмент, который его создал, и затем поднимите интерфейс документированным клиентом или юнитом, чтобы конфигурация и устройство оставались согласованными.

Как только создание удаётся, следующий сбой относится к более позднему этапу, и юнит, сообщающий о сбое после появления устройства, — это другая проблема, нежели устройство, которое так и не было создано. Разделите эти два случая, прежде чем снова менять права.

Похожие статьи