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

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

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

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

Ошибка OpenVPN: TUN/TAP device open failed: Permission denied

Обновлено: 24.08.2026 · Официальная документация ↗
  • Старт OpenVPN в Linux прерывается ошибкой: ERROR: Cannot open TUN/TAP dev /dev/net/tun: Permission denied (errno=13).
  • Внутри Docker-контейнера клиент выдает: Universal TUN/TAP device open failed: No such file or directory.
  • Невозможность сбросить привилегии демона через user nobody / group nogroup после инициализации адаптера.

1. Проверка прав и создание узла /dev/net/tun в Linux

# Проверка наличия символьного устройства
ls -la /dev/net/tun

# Если устройство отсутствует, создайте узел вручную:
mkdir -p /dev/net
mknod /dev/net/tun c 10 200
chmod 666 /dev/net/tun

2. Загрузка модуля ядра tun

# Проверка загрузки драйвера
lsmod | grep tun

# Принудительная загрузка модуля ядра
modprobe tun
echo "tun" >> /etc/modules-load.d/openvpn.conf

3. Конфигурация запуска внутри Docker-контейнера

Для создания интерфейсов контейнер должен обладать правами управления сетью ядра. Добавьте флаги при запуске контейнера:

docker run -d \
  --cap-add=NET_ADMIN \
  --device /dev/net/tun \
  --name vpn-client \
  my-openvpn-image

Или в docker-compose.yml:

services:
  openvpn:
    image: dperson/openvpn-client
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun:/dev/net/tun

4. Корректный сброс привилегий в server.conf

Директивы сброса прав должны сопровождаться сохранением ключей и интерфейса:

user nobody
group nogroup
persist-key
persist-tun
💡 Практика специалистов: При использовании systemd-юнитов изолированные пространства имен (PrivateNetwork=yes или ProtectKernelTunables=yes) могут блокировать доступ к TUN. Проверяйте переопределения через systemctl cat openvpn-server@*.service.

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

Почему нельзя запускать OpenVPN постоянно под root без директив user/group?

Сброс привилегий до непривилегированного пользователя nobody минимизирует риски компрометации хоста в случае обнаружения RCE уязвимостей в сетевом стеке парсинга OpenVPN.

Что делает директива persist-tun?

Она сохраняет открытым файловый дескриптор виртуального интерфейса при перезапусках туннеля (SIGUSR1/SIGHUP), что позволяет демону под пользователем nobody переподключаться без повторного вызова /dev/net/tun.

Как исправить ошибку на VPS с OpenVZ/LXC виртуализацией?

На OpenVZ/LXC доступ к /dev/net/tun должен быть явно включен провайдером на хостовой ноде: vzctl set <CTID> --devnodes net/tun:rw --save.

Как выдать права бинарнику openvpn без sudo?

Установите Linux Capabilities: setcap cap_net_admin+ep /usr/sbin/openvpn.

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