Ant*_*ods 11 networking dhcp windows-subsystem-for-linux
我看不到哪个系统正在获取/分配 IP。NetworkManager和netplanin都有文件,/etc但它们似乎都不完整,systemd 没有运行。运行的进程很少,network-manager init.d脚本报告它没有运行。没有/etc/network/interfaces文件。
我的理解是 WSL2 通过 WSL 虚拟交换机具有某种特殊类型的 DHCP 服务器,但是是什么联系了该服务器并获得了 IP?
今天似乎遇到了一个古老的问题,所以我会尝试一下。
简短的回答: init负责建立网络(以及其他很多)
更长的答案:
init是所有 WSL(版本 1 和 2)实例上的“PID 1”进程。您会init在所有 WSL 实例的根目录中找到相同的内容,具有相同的大小和时间戳。
它负责实例的启动,包括:
/etc/wsl.conf根据该文件的内容读取和配置实例/etc/resolv.conf(假设在/etc/wsl.conf/mnt/driveletter(例如/mnt/c)中自动安装所有 Windows 驱动器(再次假设该功能尚未关闭)-u标志检查wsl.exe,然后回退到/etc/wsl.conf设置,检查实例的用户的 Windows 注册表设置,最后回退到root如果没有找到上述任何一个。/run/WSL/,以便 Windows 可执行文件可以在 WSL Linux 会话中运行。据我所知,WSLinit既是封闭源代码,也没有真正记录下来,所以我在这里诚实地做出了一些猜测,但其中一些可以通过在 WSL Github 问题存储库中搜索"init" 来获得。
这也很可能init是 WSL 子系统中执行繁重工作的其他进程的代理。例如,WSL2 VM 将从 Hyper-V 虚拟 NIC 获取其网络信息,而 WSL2 实例与 Windows NIC“桥接”。这可能生活的逻辑之外 init的WSL“正确”的,但它是由被称为init实例启动时。
为了测试该init功能,我决定从 WSL 实例中删除几乎所有其他可能的东西,看看在它崩溃之前我能走多远:
wsl -u root.passwd/ group/shadow从文件/etc/libexcept forlibc.musl及其符号链接中删除了所有内容/usr, /sbin, /root,/homebusybox,groups,su,并login为在该实例的基础可执行文件/bin。而且,当然,/init。wsl --terminate对其进行处理随着所有这些都消失了,并且系统尽可能地准系统(没有网络命令,没有网络脚本等):
busybox的ashshell 仍然有效(也作为默认的非 root 用户)/etc/resolv.conf、/etc/hostname、 和/etc/hosts仍然在启动时自动重新生成。cat /proc/net/fib_trie返回 IP 地址(NAT'd,当然,就像 WSL2 一样)。我确实希望这个init过程有更好的记录,因为它是 WSL 的重要组成部分。也就是说,至少“如何配置它”文档是好的,即使它没有进入内部。