Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

WG_PORT_BIND_FAILED Сетевое оборудование и VPN

WireGuard Error: Port binding error: Unable to listen on specified UDP port — Решение

Обновлено: 24.08.2026 · Официальная документация ↗

Служба wg-quick не может поднять интерфейс и завершается аварийно при попытке привязать указанный порт прослушивания к сокету ядра.

  • Ошибка в консоли: [#] ip link set mtu 1420 up dev wg0 ... Error: UDP port 51820 is already in use или Address already in use.
  • Статус юнита systemctl status wg-quick@wg0 показывает статус failed (Result: exit-code).
  • В dmesg появляется сообщение: wireguard: wg0: Cannot bind to UDP port 51820.
  • Повторный запуск туннеля падает до момента создания сетевого интерфейса.

1. Поиск процесса, блокирующего UDP-порт

Определите процесс, который захватил целевой UDP-порт:

ss -ulnp 'sport = :51820'
# Либо через lsof
lsof -i UDP:51820

Если порт занят другим инстансом WireGuard, Docker-контейнером или сервисом вроде Kuma/DNS/STUN, остановите конфликтующий процесс:

kill -9 <PID_ПРОЦЕССА>

2. Проверка зависших интерфейсов WireGuard

Если предыдущая сессия туннеля аварийно завершилась, интерфейс ядра мог остаться в памяти:

# Проверка существующих интерфейсов
ip link show type wireguard

# Принудительное удаление зависшего интерфейса
ip link delete dev wg0

3. Проверка прав доступа и сетевого пространства имен

Если WireGuard запускается без root-прав или в непривилегированном контейнере LXC/Docker, ядро заблокирует привязку к сокету:

# Для непривилегированных портов (< 1024) выдайте capability (если используется userspace wireguard-go):
setcap 'cap_net_bind_service=+ep' /usr/bin/wireguard-go

4. Изменение порта прослушивания в конфигурации

Если стандартный порт занят критической службой, смените ListenPort в /etc/wireguard/wg0.conf:

[Interface]
Address = 10.0.0.1/24
ListenPort = 51821
PrivateKey = <PrivateKey>

5. Чистый перезапуск сервиса

systemctl restart wg-quick@wg0
wg show wg0
💡 Практика специалистов: Если порт занят 'фантомным' процессом ядра после падения скриптов, удалите интерфейс напрямую через команду 'ip link del dev wg0', что автоматически освободит связанный UDP-сокет ядра.

Частые вопросы (FAQ)

Могут ли два разных интерфейса (wg0 и wg1) слушать один и тот же UDP-порт?

Нет. В одном сетевом пространстве имен (network namespace) один UDP-порт может быть занят только одним сокетом интерфейса WireGuard. Для второго туннеля укажите другой ListenPort.

Почему ss/netstat не показывают PID процесса, занявшего порт WireGuard?

Модуль WireGuard работает внутри ядра Linux (in-tree kernel module), поэтому сетевой сокет создается контекстом ядра (kernel socket) и не имеет связанного PID в пространстве пользователя.

Нужно ли указывать ListenPort на стороне клиента?

Нет. На клиентах директиву ListenPort указывать не рекомендуется — система автоматически выберет свободный случайный эфемерный порт для исходящего трафика.

Как разрешить WireGuard слушать привилегированные порты (например, 53 UDP или 443 UDP)?

Модуль ядра WireGuard по умолчанию имеет права ядра и может занимать любые порты от 1 до 65535, если они не заняты другими демонами (например, bind9 или dnsmasq).

Полезные материалы
Рекомендуем