Как загрузить модуль Tun в Linux?
Я не могу загрузить tun
модуль в моей коробке ArchLinux. Я пытаюсь подключиться к OpenVPN, но в журнале написано:
nm-openvpn[6662]: Note: Cannot open TUN/TAP dev /dev/net/tun: No such device (errno=19)
lsmod | grep tun
Ничего не возвращает:
Если я бегу:
sudo modprobe tun
Он возвращает ошибку, но сообщения об ошибке нет, а lsmod по-прежнему не имеет tun
, Модуль, кажется, существует, так как есть tun.ko.gz
в /lib/modules/
,
Я действительно не знаю, что еще попробовать.
6 ответов
Этот ответ, вероятно, немного запоздал, но я столкнулся с проблемой, точно так же, как описано, я сам.
Запуск OpenVPN приведет к:
Note: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)
И работает tunctl
будет производить:
Failed to open '/dev/net/tun' : No such file or directory
И эта команда не имела выхода:
lsmod | grep tun
При попытке добавить tun
модуль через:
modprobe tun
modprobe
выйдет с кодом ошибки (1), и ничего не изменится.
Я нашел альтернативный способ активации модуля TUN через insmod
, Сначала найдите модуль с помощью этой команды:
find /lib/modules/ -iname 'tun.ko.gz'
Затем используйте insmod с возвращенным путем (я получил только одно совпадение), например:
insmod /lib/modules/3.6.9-1-ARCH/kernel/drivers/net/tun.ko.gz
Для меня запуск этой команды сработал, и tunctl
и OpenVPN работал нормально потом.
Я столкнулся с подобной проблемой при попытке запустить openvpn на OVH Cloud VPS, openvpn жалуется, что не может найти интерфейс TUN.
modprobe всегда возвращает модуль не найден:
$ sudo modprobe tun
FATAL: Module tun not found.
Наконец, я обнаружил, что tun - это не модуль, а встроенное ядро, поэтому я решил создать отсутствующие dir и nod:
$ sudo mkdir /dev/net
$ sudo mknod /dev/net/tun c 10 200
И тогда openvpn может найти и использовать устройство tun.
Следует отметить, что после этого modprobe все равно выдаст ошибку, поскольку tun не является модулем.
$ sudo modprobe tun
FATAL: Module tun not found.
В Arch Linux установка networkmanager-vpnc
пакет решит проблему
Обязательно выполните проверку ядра перед запуском modprobe. См. примечание здесь
Самый простой способ — сравнить результаты
uname -r
и
pacman -Q linux
Если они разные, перезагрузитесь. Это должно исправить ошибку modprobe.
У меня была проблема, когда мой /lib/modules/.../modules.alias
не содержит строки
alias char-major-10-200 tunode_tunnel
Так что даже если вы сделали mknod /dev/net/tun
и имеют tun.ko
где-то в /lib/modules/...
, он не будет загружаться, если modules.alias
имеет правильное заклинание.
Самым простым решением было бы перезагрузить систему, а затем выполнитьmodprobe tun
от имени пользователя root, потому что наиболее вероятной причиной неудачного вызова modprobe является несоответствие версии ядра версии модуля (у меня так и было).
Видите ли, после обновления системы (при условии, что ядро также обновлено) вы продолжаете использовать старое ядро, но модули устанавливаются из новой версии ядра. Вот почему вы не можете сделать modprobe сразу после обновления.