WSL2 ubuntu 20.04 如何获取IP地址?

伍兹的安东

我看不到哪个系统正在获取/分配 IP。NetworkManagernetplanin都有文件/etc但它们似乎都不完整,systemd 没有运行。运行的进程很少,network-manager init.d脚本报告它没有运行。没有/etc/network/interfaces文件。

我的理解是 WSL2 通过 WSL 虚拟交换机具有某种特殊类型的 DHCP 服务器,但是是什么联系了该服务器并获得了 IP?

NotTheDr01ds

今天似乎遇到了一个古老的问题,所以我会尝试一下。

简短的回答: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如果没有找到上述任何一个。
  • 将 Windows 路径附加到 Linux 路径(假设它没有关闭)
  • 在实例中设置 WSL 特定的环境变量
  • 可能还有其他一些事情,包括通过 中的套接字设置 Windows 互操作性/run/WSL/,以便 Windows 可执行文件可以在 WSL Linux 会话中运行。

据我所知,WSLinit既是封闭源代码,也没有真正记录下来,所以我在这里诚实地做出了一些猜测,但其中一些可以通过在 WSL Github 问题存储库中搜索"init" 来获得

这也很可能init是 WSL 子系统中执行繁重工作的其他进程的代理。例如,WSL2 VM 将从 Hyper-V 虚拟 NIC 获取其网络信息,而 WSL2 实例与 Windows NIC“桥接”。这可能生活的逻辑之外 init的WSL“正确”的,但它是由被称为init实例启动时。

为了测试init功能,我决定从 WSL 实例中删除几乎所有其他可能的东西,看看在它崩溃之前我能走多远:

  • 我克隆了一个 Alpine WSL 实例,因为这是您可以获得的“基本”实例(默认情况下整个实例大约 8MB)并使用wsl -u root.
  • 内部的情况下,我删除了一切,但passwd/ group/shadow从文件/etc
  • /libexcept forlibc.musl及其符号链接中删除了所有内容
  • 删除/usr, /sbin, /root,/home
  • 几乎只剩下busybox, groups, su, 和login实例中的基本可执行文件/bin而且,当然,/init
  • 退出会话并wsl --terminate对其进行处理
  • 以 root 身份重新启动会话

随着所有这些都消失了,并且系统尽可能地准系统(没有网络命令,没有网络脚本等):

  • 登录到busyboxashshell 仍然有效(也作为默认的非 root 用户)
  • /etc/resolv.conf/etc/hostname、 和/etc/hosts仍然在启动时自动重新生成。
  • 网络已启动——通过 DNS 进行 Ping 工作,cat /proc/net/fib_trie返回 IP 地址(NAT'd,当然,就像 WSL2 一样)。
  • Windows 驱动器仍然是自动安装的
  • Windows 互操作(运行 Windows 可执行文件,例如“powershell.exe”)仍然有效
  • Windows 路径仍然附加到 Linux 路径。

我确实希望这个init过程有更好的记录,因为它是 WSL 的重要组成部分。也就是说,至少“如何配置它”文档是好的,即使它没有进入内部。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在WSL2上启用systemd:Ubuntu 20和CentOS 8

使WSL2的IP地址静态

如何从Windows查找WSL2机器的IP地址

Ubuntu wsl2 git在大型存储库上获取“远程端意外挂起”

如何指示 PowerShell 7 在 Windows 10 上的 WSL2 中运行 bash (Ubuntu) 脚本?

如何从 WSL2 上的 ubuntu shell 设置 JAVA_HOME?

将 wsl2 实例升级到 Ubuntu 20 LTS 后,无法安装 build-essential 之类的软件包

WSL2 虚拟主机 IP 地址

如何添加第二个WSL2 Ubuntu发行版(全新安装)

我有 Ubuntu WSL2,是否可以运行像 nSnake 这样的游戏?我将如何安装它?

如何从WSL2启动Edge?

如何更改WSL2的DNS设置?

无法从 WSL2 Ubuntu Ping Ubuntu VM

wsl2 ip 与 wsl2 适配器不匹配?

从 PowerShell 在 WSL2/Ubuntu 20.04 中运行命令?

Ubuntu 18 未在 WSL2 中启动

从 Windows 10 SSH 到 wsl2 ubuntu

在 WSL2 中启用 VPN 时,如何从 WSL2 ping 窗口

在Ubuntu(WSL1和WSL2)中显示matplotlib图(和其他GUI)

安装好 WSL2 后如何运行?

如何在 Windows WSL2 上使用 sshuttle

如何在外部SSD上安装WSL2?

ssh 进入 WSL2 仅适用于某些 IP 地址

带有 Ubuntu-20-04 的 HP Elitebook 上的触摸板按钮不起作用

挂载 WSL2 文件系统所在的驱动器时如何访问 WSL2 文件系统?

“ sbt服务器已经启动。” 从wsl2 ubuntu启动sbt时出错

无法启动WSL2计算机。尝试过Ubuntu 20.04、18.04和所有

无法在 WSL2 / Ubuntu 20.04 之外访问 127.0.0.1:80

Ubuntu Server 20.04 Focal Fossa VS 20.04.2.0 LTS VS WSL2 的区别