SystemdDoctor
служба не работает vpn сеть изоляция

openvpn: Cannot open TUN/TAP dev /dev/net/tun

Туннель создаётся через специальное устройство. Отказ его открыть означает одно из трёх: модуль ядра не загружен, устройства нет в окружении контейнера, или доступ к устройствам обрезан параметрами изоляции самой службы. Разбор быстрый, потому что проверки независимы.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Модуль ядра не загружен

    Без модуля устройства туннеля не существует. На минимальных сборках и в виртуальных машинах он может отсутствовать.

  2. Устройства нет в контейнере

    Контейнеры не получают устройства хоста по умолчанию. Служба видит отсутствие файла устройства.

  3. Доступ к устройствам обрезан изоляцией службы

    Параметры ограничения устройств и приватного каталога устройств прячут файл устройства от процессов службы.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Есть ли файл устройства туннеля.

test -c /dev/net/tun && echo устройство есть || echo устройства нет

Сообщения службы о попытке открыть устройство.

journalctl -u "openvpn*" -n 30 --no-pager

Не обрезан ли доступ к устройствам изоляцией.

systemctl show "openvpn*" -p PrivateDevices -p DeviceAllow 2>/dev/null

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Модуль ядра не загружен
Почему происходит
Без модуля устройства туннеля не существует. На минимальных сборках и в виртуальных машинах он может отсутствовать.
Как проверить
Посмотрите модуль и устройство.
lsmod | grep -w tun; test -c /dev/net/tun && echo устройство есть || echo устройства нет
Как исправить
Загрузите модуль и закрепите загрузку при старте системы через каталог загрузки модулей.
sudo modprobe tun && echo tun | sudo tee /etc/modules-load.d/tun.conf
2. Устройства нет в контейнере
Почему происходит
Контейнеры не получают устройства хоста по умолчанию. Служба видит отсутствие файла устройства.
Как проверить
Определите окружение и наличие устройства.
systemd-detect-virt --container; ls -l /dev/net/ 2>/dev/null
Как исправить
Пробросьте устройство туннеля в контейнер и выдайте нужную возможность работы с сетью. Без этого туннель внутри контейнера не поднять.
3. Доступ к устройствам обрезан изоляцией службы
Почему происходит
Параметры ограничения устройств и приватного каталога устройств прячут файл устройства от процессов службы.
Как проверить
Посмотрите параметры изоляции.
systemctl show openvpn-server@server -p PrivateDevices -p DeviceAllow -p CapabilityBoundingSet 2>/dev/null
Как исправить
Разрешите устройство туннеля в списке устройств службы и отключите приватный каталог устройств для неё.
[Service]
PrivateDevices=no
DeviceAllow=/dev/net/tun rw

Пример вывода

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

openvpn[4700]: ERROR: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)
openvpn[4700]: Exiting due to fatal error
systemd[1]: openvpn-server@server.service: Main process exited, code=exited, status=1/FAILURE

Связанные ошибки

Источники

  • Руководство OpenVPN документация программы
    сверено 15 сентября 2026
  • systemd.exec(5)
    Параметры доступа к устройствам: DeviceAllow= и PrivateDevices=.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено выгрузкой модуля туннеля и приватным каталогом устройств.
    собственная проверка, systemd 255
    сверено 15 сентября 2026