Решение проблемы с TUN-устройством в Docker на Synology NAS
При использовании Docker для создания виртуальных сетевых соединений с помощью TUN-устройства, иногда возникают проблемы, которые могут затруднить работу. Одной из распространенных проблем является сообщение об ошибке: ERROR checking TUN device: TUN device is not available: open /dev/net/tun: no such device
. Эта статья описывает шаги к решению данной проблемы на примере настройки Gluetun на Synology NAS с операционной системой DSM6.
Описание проблемы
Недавно пользователь столкнулся с проблемой, когда его настройка Docker на Synology NAS перестала работать после перезапуска оборудования. В файле docker-compose.yml
была определена конфигурация сервиса Gluetun с использованием OpenVPN. Однако при запуске с помощью команды docker-compose up -d
возникла ошибка, связанная с отсутствием TUN-устройства.
Попытки решения проблемы
Пользователь предпринял несколько шагов для устранения проблемы, включая создание TUN-устройства вручную с помощью следующих команд:
mkdir -p /dev/net
mknod /dev/net/tun c 10 200
chmod 666 /dev/net/tun
Однако это не решило проблему, несмотря на то что запуск нового контейнера с проверкой доступа к устройству TUN проходил успешно. Ошибки также не уходили после добавления флага privileged: true
в конфигурацию docker-compose.yml
.
Другими мерами были перезагрузка Docker и повторная загрузка образа Gluetun, но ничего не помогало.
Шаги для устранения проблемы
В конечном итоге пользователь нашел решение проблемы. Вот последовательность шагов, которые помогли восстановить работу TUN-устройства на NAS:
-
Удаление ранее созданного TUN-устройства:
rm -rf /dev/net
-
Загрузка модуля TUN:
insmod /lib/modules/tun.ko
-
Проверка, что TUN-устройство успешно загружено:
lsmod | grep tun
-
Создание скрипта для автоматической перезагрузки модуля: Поскольку в DSM6 модуль TUN не загружается автоматически при перезагрузке, пользователь создал стартовый скрипт в директории
/usr/local/etc/rc.d/
. Для этого использовалось: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
Заключение
Следуя вышеперечисленным шагам, пользователь смог восстановить работоспособность TUN-устройства и вновь запустить контейнер Gluetun с использованием OpenVPN. Важно помнить, что корректная настройка сетевых устройств в Docker требует внимательного подхода и проведения периодических проверок для устранения возможных ошибок. Если вы столкнетесь с подобной проблемой, сохранение данной инструкции поможет вам быстро и эффективно решить проблему.