AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1279312
Accepted
AntonOfTheWoods
AntonOfTheWoods
Asked: 2020-10-02 16:16:41 +0800 CST2020-10-02 16:16:41 +0800 CST 2020-10-02 16:16:41 +0800 CST

WSL2 ubuntu 20.04 如何获取其 IP 地址?

  • 772

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

我的理解是,WSL2 通过 WSL 虚拟交换机有一些特殊的 DHCP 服务器,但是什么是联系该服务器并获取 IP 呢?

networking dhcp windows-subsystem-for-linux
  • 1 1 个回答
  • 16990 Views

1 个回答

  • Voted
  1. Best Answer
    NotTheDr01ds
    2021-04-02T13:25:38+08:002021-04-02T13:25:38+08:00

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

    简短的回答: init负责建立网络(以及其他许多)

    更长的答案:

    init是所有 WSL(版本 1 和 2)实例上的“PID 1”进程。您会init在所有 WSL 实例的根目录中找到相同的大小和时间戳。

    它负责启动实例,包括:

    • /etc/wsl.conf根据该文件的内容读取和配置实例
    • 设置网络,包括自动生成/etc/resolv.conf(假设在/etc/wsl.conf
    • /mnt/driveletter在(例如)中自动安装所有 Windows 驱动器/mnt/c(再次假设该功能尚未关闭)
    • 确定当前用户 - 首先检查-u标志 on wsl.exe,然后回退到/etc/wsl.conf设置,检查实例的用户的 Windows 注册表设置,最后回退到root如果以上都没有找到。
    • 将 Windows 路径附加到 Linux 路径(假设未关闭)
    • 在实例中设置 WSL 特定的环境变量
    • 可能还有其他一些事情,包括通过 in 中的套接字设置 Windows 互操作性/run/WSL/,以便 Windows 可执行文件可以在 WSL Linux 会话中运行。

    据我所知,WSLinit既是封闭源代码,也没有真正记录在案,所以老实说我在这里做了一些猜想,但其中一些可以通过在 WSL Github 问题 repo 中搜索"init"来获得。

    它也可能init是 WSL 子系统中执行繁重工作的其他进程的代理。例如,WSL2 实例将从 Hyper-V 虚拟 NIC 获取其网络信息,因为这些实例在 Windows NIC 后面进行了“NAT”。这样做的逻辑可能存在于 WSL“正确”之外 ,但它在实例启动期间init被调用。init

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

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

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

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

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

    • 14

相关问题

  • 如何设置 VLAN 转发?

  • 如何将主机 Ubuntu 上的 VPN (tun0) 网络适配器映射到 VirtualBox 来宾 Windows?

  • 如何限制下载/上传带宽?

  • 如何通过 Windows 网络共享文件?

  • 面板小程序以文本形式显示当前网络流量?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve