- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嘿,程序员/开发人员/网络人员/Devops/...
我对 mDNS
有疑问/DNS-SD
在 WSL2 的上下文中设置(Windows 10 2004 版本)
我在家里有一个非常简单的设置,有一个主服务器和一个 Raspberry Pi,我想激活 DNS 服务发现,从而让我有一种简单的方法来自动发现我的 Raspberry PI 上的服务器。
使用像 dnssd 这样的简单库,甚至自己广播正确的数据,我设法使它在不使用 WSL2 时轻松工作。
但是我需要让它在 WSL2 上工作,这就是事情变得复杂的地方。
由于 WSL2 在其自己的子网上运行,因此广播不再起作用。在子网上使用 mDNS 仅适用于该子网。
但是,Windows 已经重新路由主机和 WSL 之间的一些广播流量。
这很容易测试:做一个简单的Ping
从我的服务器到依赖于 mDNS 工作的 Pi 的 Avahi 地址。
在屏幕左侧,您可以看到 Wireshark 在主机网络接口(interface)上捕获的流量,在右侧,您可以看到 Wireshark 在 WSL 网络接口(interface)上捕获的流量。
前 3 行是一个简单的 ping:它是在 WSL 的上下文中执行的,但是这里出现的 IP 地址 - 172.28.192.1
- 不是 WSL 客户端的 IP 地址,而是 WSL 内部 DNS 服务器的 IP 地址。如右图所示,它在主机上完美地重新路由,Windows 主机的 IP 地址为:192.168.0.39
但是,由脚本执行的第二个查询具有 WSL 源 IP (172.28.204.42
),并且此查询不会在主机上重新路由。
我的网络知识非常有限,我不明白这是如何工作的,以及如何让 WSL 在主机上路由我自己的 mDNS 查询。一个疯狂的猜测是它与 iptables 有关,但就我而言。
如果有人知道它为什么在 DNS 服务器源地址上工作而不是当我自己执行它时,它会对我有很大帮助!
编辑 1:WSL 路由表
最佳答案
WSL2 Hyper-V 网络交换机不充当多播网桥。默认情况下,交换机会创建一个内部网络。多播数据包仅传送到连接到内部网络的系统,而不传送到内部网络之外的任何系统。有关 Hyper-V 网络类型的更多信息,请参见 this Nakivo blog post .
在您的第一种情况下,ping 触发了常规 DNS 查找,该查找转到解析器 - Windows 主机。然后,Windows 主机在其外部和内部网络上执行 mDNS 查找。您的数据包转储显示内部查找,但请注意没有任何响应。响应来自外部网络,而 ping 通过常规 DNS 获得响应。在第二种情况下,您只执行 mDNS 查找。该查找没有收到任何响应,因为它只进入内部网络。为了证明 mDNS 查找在内部网络上有效,请查找 Windows 主机的本地地址 (MACHINE.local)。它会起作用,因为 Windows 主机在内部网络上并且可以响应。
好消息是您可以更改 WSL 网络类型。
> wsl --shutdown
> wsl -t <distribution-name>
> wsl --distribution <distribution-name>
ip addr add
从外部网络添加 IP 地址和路由。和
ip route
或类似的东西。您的发行版几乎肯定会在每次启动时尝试为默认 WSL 交换机设置其网络,因此您可能需要设置配置以在将来添加此外部网络地址。例如,Ubuntu 20.04 总是在内部网络上添加一个动态地址,而不管交换机配置如何。
关于routes - 将 mDNS 查询从 WSL 子网重新路由到 Windows 主机子网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62108116/
我无法将 WebStorm 配置为在 WSL 中处理我的项目(这发生在我重新安装 Windows 操作系统和 WSL 之后)。我认为这个问题与 WSL 配置有关,但我找不到确切的问题。 我的项目中 E
我可以在 powershell 中使用以下命令将我的 ext4 分区挂载到 wsl-2 中: wsl --mount\\.\PHYSICALDRIVE4 --partition 1 但是,当我重新启动
我希望能够重新启动 WSL session 。这样做有点尴尬,因为 WSL 不使用 systemd 所以我们不能使用 reboot .在 WSL session 中,我们可以运行任何 Windows
我几乎完全使用 WSL,并且只切换到主窗口来浏览和运行 Windows 原生程序。我有一个位于 /mnt/c/myrepo 的 git 存储库.为了“安装”/mnt/c/myrepo 中的代码我需要将
如何在 WSL 2 上运行 Gitk? 我已经在 WSL 2 中安装了 Gitk。 安装 Gitk 后,我尝试运行它,但失败并显示以下错误日志: application-specific initia
如何在 WSL 2 上运行 Gitk? 我已经在 WSL 2 中安装了 Gitk。 安装 Gitk 后,我尝试运行它,但失败并显示以下错误日志: application-specific initia
我的 Windows 使用 Ubuntu 设置了 WSL。它已经工作了一段时间,直到我升级到 WSL2。 问题是:每次我启动我的电脑(或重新启动我的电脑)时,它都会失去从 Ubuntu 到 Windo
我的 Windows 安装了 Itellij IDEA 无法从 Ubuntu 访问 JDK(Ubuntu 安装在 WSL 上)。在运行应用程序时,我遇到了这个问题: 而且我无法在 Windows 运行
我正在努力弄清楚如何通过 WSL 中的 bash 命令启动新的“命令提示符”窗口。目标是启动第二个提示符,最好已经在 bash 中。 我已经尝试运行 cmd.exe 但这只会让我从 bash shel
在 Visual Studio 代码中选择 WSL 作为我的默认终端后,我无法打开终端窗口。终端窗口打开,屏幕上出现随机文本,然后终端关闭并显示一条错误消息:“终端进程以退出代码终止:42949672
我在这里和其他网站上搜索了很多相关的帖子,但没有解决我的问题。 如标题中所述,我正在努力在窗口操作系统的 linux 子系统上安装 docker 我用的是 win 10 家庭版,所以我已经安装了 Do
我正在从 WSL 运行 Android Studio。当我尝试使用模拟器时,我得到 "/dev/kvm" not found .我已经安装了 kvm 并且我已经确认在我的 BIOS 中启用了 vt-x
我正在运行 Windows 10,并且一直在 Windows Linux 子系统下使用 Ubuntu Linux 发行版。 我希望能够使用 Chrome.exe 或 google-chrome hea
我对 WSL 很陌生。我想在我的 win10 PC 上的 ubuntu shell 上运行 python 代码。此代码需要访问网络摄像头,但似乎网络摄像头未正确打开..我在网上查过,我发现1-2年前有
科技媒体 Phoronix 对 Windows 10 May 2020 中 WSL 和 WSL 2 的性能进行了测试,参与测试的发行版为 Ubuntu 20.04 on WSL/WSL2 ,以及 U
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add - sudo sh -c 'ec
我在 PowerShell wsl pipenv run python ~/test.py 中运行以下命令并收到以下错误 /bin/bash: pipenv: command not found .如
有没有办法找出 WSL 的当前构建版本,即 Build 15042 - 我希望更新到此版本,按照步骤操作,但不确定它是否有效。 最佳答案 如果您要检查系统中安装的版本(我假设在更新到 Windows
我的防火墙(诺顿)阻止 WSL 2 使用互联网。我什至无法ping通谷歌。 当我关闭防火墙时,一切正常,当我再次打开它时,它不再起作用。 我必须在防火墙上设置哪些规则才能允许 WSL 通过?它适用于所
我目前正在寻求获得在 WSL 中运行的 MIPS 交叉编译器工具链,由 CLion 访问。 我遇到了一个关于 WSL 的奇怪问题。我已将以下内容添加到 .bashrc : STAGING_DIR="/
我是一名优秀的程序员,十分优秀!