我看不到哪个系统正在获取/分配 IP。NetworkManager
和netplan
in都有文件,/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
/lib
except forlibc.musl
及其符号链接中删除了所有内容/usr
, /sbin
, /root
,/home
busybox
, groups
, su
, 和login
实例中的基本可执行文件/bin
。而且,当然,/init
。wsl --terminate
对其进行处理随着所有这些都消失了,并且系统尽可能地准系统(没有网络命令,没有网络脚本等):
busybox
的ash
shell 仍然有效(也作为默认的非 root 用户)/etc/resolv.conf
、/etc/hostname
、 和/etc/hosts
仍然在启动时自动重新生成。cat /proc/net/fib_trie
返回 IP 地址(NAT'd,当然,就像 WSL2 一样)。我确实希望这个init
过程有更好的记录,因为它是 WSL 的重要组成部分。也就是说,至少“如何配置它”文档是好的,即使它没有进入内部。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句