有很多问题与此错误有关,并且有一个建议的手动修复方法,效果很好,但没有永久的解决方案。我该如何永久解决这个问题?我在 Debian wheezy 服务器上遇到了这个问题,使用 OpenVPN 客户端连接到 OpenVPN 服务器。
建议的修复方法如下。看来 /dev/net 不会自动创建,而且每次重启后都会消失。
mkdir -p /dev/net
mknod /dev/net/tun c 10 200
chmod 600 /dev/net/tun
答案1
在 Arch/Manjaro 中也会发生这种情况。
我设法弄清楚了问题所在,显然内核升级只是移动模块目录,因此尝试从已知位置访问模块是不可行的,当前运行的内核仍在运行,但我似乎无法modprobe
(加载)任何尚未加载的模块(例如tun
OpenVPN 连接所需的模块)。
例如,/lib/modules/
升级之前目录有以下目录(我有多个内核,注意 5.16 系列):
5.15.32-1-MANJARO *5.16.14-1-MANJARO* extramodules-5.15-MANJARO extramodules-5.16-MANJARO
这是升级后的状态:
5.15.32-1-MANJARO *5.16.18-1-MANJARO* extramodules-5.15-MANJARO extramodules-5.16-MANJARO
尝试加载tun
模块显示以下消息:
modprobe: FATAL: Module tun not found in directory /lib/modules/5.16.14-1-MANJARO
这完全说得通,因为这个目录不存在。
那么,在这种情况下我建议的解决方案是什么?重新启动。
答案2
Debian wheezy 自 2018 年 5 月起不再受支持(https://www.debian.org/releases/wheezy/),您不应再在 2020 年将其用于生产。
现在,解决了这个问题,您可以添加一些命令来暂时解决问题,将这些命令添加到使用@reboot昵称(man 5 crontab)的根 crontab 中的 bash 脚本中。
因此,请在文件系统的某个地方创建一个 bash 脚本,内容如下:
#!/bin/bash
mkdir -p /dev/net
mknod /dev/net/tun c 10 200
chmod 600 /dev/net/tun
/etc/init.d/openvpn restart
以755权限保存,并修改root crontab:
# crontab -e
至少有这个内容
@reboot /path/to/where/you/saved/the/script
重启后它应该已经成功启动 openvpn。
答案3
我认为一个可能的解决方案是将系统配置为tun
在启动时加载内核模块。为此,请在文件中列出tun
模块名称:/etc/modules
# echo tun >> /etc/modules
udev
是根据加载的内核模块和连接的硬件设备在文件夹中创建和维护设备节点的系统组件。我相信通过在启动时加载内核模块,系统将在每次启动时创建设备节点。/dev
tun
/dev/net/tun
我希望它有帮助。
编辑:我有点过时了。在启动 Debian Wheezy 镜像后,Vagrant Cloud 网站,我发现它实际上处理有关现有设备节点的权限、所有权和符号链接。设备节点实际上是由内核本身创建的,并通过伪文件系统udev
向用户空间公开。devtmpfs
devtmpfs
文件系统在 initramfs 时挂载。文件会在将 initramfs 提取到内存/usr/share/initramfs-tools/init
后执行,它提供将文件系统挂载到 的代码,如果不成功,则返回到标准文件系统。grub
devtmpfs
/dev
tmpfs
此外,为了使devtmpfs
文件系统可用,Debian Wheezy 内核在交付时就已CONFIG_DEVTMPFS=y
启用。