Ошибка TUN устройства в Docker: решение для Gluetun на Synology NAS

Представьте: всё работало как часы, а после банальной перезагрузки оборудования контейнер с VPN-клиентом Gluetun отказывается стартовать, выдавая зловещее ERROR checking TUN device. Знакомо? На Synology NAS с DSM6 это классическая история – модуль ядра tun «забывает» загрузиться автоматически. Давайте разберёмся, как вернуть всё на круги своя и предотвратить повторение проблемы.

Почему /dev/net/tun исчезает после перезагрузки

В Docker-контейнерах доступ к сетевым устройствам вроде TUN/TAP требует двух условий:

  • Физическое присутствие файла устройства /dev/net/tun (да, это специальный файл, а не обычный каталог)
  • Загруженный модуль ядра tun.ko – именно он отвечает за эмуляцию сетевых туннелей

На DSM7 это настраивается автоматически, но в DSM6 (который всё ещё используется на старых устройствах Synology) модуль не сохраняется между перезагрузками. Причём ручное создание через mknod – лишь половина дела. Без загруженного модуля устройство остаётся «пустышкой», о чём и кричит ошибка

open /dev/net/tun: no such device

Пошаговая настройка TUN для Docker на Synology

Шаг 1: Очистка артефактов

Сначала удалите ранее созданные вручную файлы – они могут мешать:

rm -rf /dev/net

(Не переживайте: после перезагрузки система всё равно «затрёт» эти изменения, так что сейчас важно начать с чистого листа).

Шаг 2: Принудительная загрузка модуля

Выполните команду, которая активирует TUN-модуль:

insmod /lib/modules/tun.ko

Проверьте успешность:

lsmod | grep tun  
# Вывод должен содержать строку с "tun"

Шаг 3: Автоматизация навсегда

Чтобы модуль загружался при каждой перезагрузке NAS, создайте скрипт в папке автозапуска:

vi /usr/local/etc/rc.d/tun.sh

Вставьте в него:

#!/bin/sh  
case "$1" in  
    start)  
        insmod /lib/modules/tun.ko  
        ;;  
    stop)  
        rmmod tun  
        ;;  
esac  
exit 0

Сохраните файл и дайте ему права на выполнение:

chmod +x /usr/local/etc/rc.d/tun.sh

Совет: Если вы не уверены в работе с vi, используйте nano через SSH – он проще для новичков (но предварительно установите его через Entware).

Проверка работы

После перезагрузки NAS выполните:

docker-compose up -d gluetun

Если всё сделано верно, контейнер запустится без ошибок. Для перестраховки загляните в логи:

docker logs gluetun

Ищите строки типа VPN gateway IP: – это признак успешного подключения.

Кстати, а почему не сработал флаг privileged: true? Всё просто: он даёт доступ ко всем устройствам, но не загружает отсутствующие модули ядра. Вот такой нюанс Docker-безопасности!

Если проблема осталась

  • Убедитесь, что скрипт tun.sh имеет права 755 (выполнить ls -l /usr/local/etc/rc.d/)
  • Проверьте, нет ли опечаток в регионе сервера (SERVER_REGIONS="Netherlands") – иногда провайдеры VPN меняют названия локаций
  • Обновите образ Gluetun: docker-compose pull

И помните: DSM6 уже считается устаревшим – если есть возможность, планируйте переход на DSM7 (но предварительно проверьте список поддерживаемого оборудования Synology).

Добавить комментарий

Все поля обязательны к заполнению. Ваш адрес email не будет виден никому.

Новое
Интересное