modules.conf
我在路径下的文件中输入了以下行/etc/modules-load.d/modules.conf
:
alias char-major-10-200 tun
然后我在 Debian 9.5 Linux 提示符下输入以下命令:
$ depmod -a
但我收到以下错误消息:
"depmod: ERROR: could not open directory /lib/modules/4.4.0-17134-Microsoft:
No such file or directory"
和
"depmod: FATAL: could not search modules: No such file or directory"
上面给出的“别名”代码及其后面的命令可以在以下链接中找到:“http://bochs.sourceforge.net/doc/docbook/user/config-tuntap.html”。
我正在尝试运行 miredo_1.2.3-1.1_amd64 (一个 Teredo 服务器,如果我理解正确的话)在我的 Debian 版本 9.5 Linux 操作系统下建立常规隧道连接。 miredo“README”文件指出需要“CONFIG_TUN”和“CONFIG_IPV6”。
有什么建议么?
答案1
从您/lib/modules
向我们提供的消息中可以看出,您显然正在使用 Debian GNU/Linux for WSL(适用于 Windows 10)。
不幸的是,WSL 内核/Windows HAL 在不同的抽象层下/在 Windows 下以不同的方式运行,并且不支持我们在“常规”Linux 内核 Debian 实现中给出的一些更深奥的功能。
如果您想运行这样一个具有更高级 IP 套接字功能的软件,您必须在 VM 中运行 Debian,而不是在 Debian WSL 中。
对于使用 Windows 10 Pro 的用户来说,他们更适合使用 Hyper V。对于您的情况,运行 VirtualBox(免费)或 VMWare 将允许您使用 Teredo 服务器。
depmod -a
也不起作用,因为 WSL 既不使用真正的 Linux 内核,也不能够加载 Linux 内核模块。
另请参阅WSL 常见问题解答
我可以在 WSL 中运行所有 Linux 应用程序吗?
不! WSL 是一个工具,旨在使需要它们的用户能够在 Windows 上运行 Bash 和核心 Linux 命令行工具。
从关于在 Windows 10 中使用 Linux 工具您应该了解的 18 件事
WSL 是一个 Linux 发行版,而不是 Linux 内核
WSL 在您的 PC 上安装 Linux 发行版。 Linux 二进制文件像往常一样进行系统调用,但特纳解释说,这些系统调用只是进入 Windows 内核。
来自微软WSL github https://github.com/Microsoft/WSL/issues/2340
那么tun会在任何阶段实施吗?
目前不太可能......考虑到 WSL 的设计,WSL 无法加载本机 Linux 内核模块。 Linux 上面向用户空间的 ABI 在 Linux 内核之间保持相当稳定,但面向内核的 ABI(针对驱动程序和模块)不断变化和变化。
以及 MS Github WSL 项目https://github.com/Microsoft/WSL/issues/874
看起来您正在请求 tun / tap 设备支持。我认为它不会被实施。
这将需要特定的内核侧关注,这不仅仅是让用户空间工具正常工作的问题。 RTNETELINK 给出“无效参数”错误的原因是套接字的内核端现在不存在。
您可能会整天在用户空间中编译、使用或运行二进制文件,如果 Linux 内核和完整的 ABI/支持不存在,那么它们将无法工作,而 MS 团队不会模拟所有功能。
请注意:WSL 甚至不运行 iptables 防火墙规则,甚至无法运行该script
命令。
我再说一遍,您那里没有常规的 Linux 内核,您有一个由 Microsoft 工程师编写的模拟“内核”,用于翻译/模拟 Linux 内核 ABI 的子集/对 Windows HAL 的调用。一个足够好的子集,允许您运行大部分脚本和用户态二进制文件,而无需尝试实现典型的高级服务器服务。