我正在尝试让 WSL 在我的 Windows 上使用本地主机代理(实际上是它的 Fiddler),但我看不到任何这样的连接,并且下载通常会失败,我该如何解决这个问题?
我知道我可以从 Windows 连接到 Linux 本地主机,但是我该如何逆转这一过程呢?
WSL 是 Ubuntu 18.04
答案1
答案2
答案3
与 WSL 1 相比,WSL 2 需要一些额外的工作。
允许所需端口通过防火墙。
1.1 发布
Windows Defender Firewall with Advanced Security
1.2 在左侧窗格中选择
Incoming Rules
。1.3 在右侧窗格中单击
New Rule
。1.4 对于规则类型,选择
Port
。下一步。1.5 选择
TCP
和Specific local ports
。插入端口、逗号分隔的端口列表或端口范围。下一步。1.6 选择
Allow connection
。下一步。1.7 仅检查
Public
配置文件。下一步。1.8 输入规则的名称。例如
WSL
。完成。从其中找出 WSL 的 IP 地址:
grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'
这是网络接口的 IPv4 地址vEthernet (WSL)
。
curl
使用或测试与 Windows 主机的连接telnet
:3.1
curl ip.from.step.2:port
我已经使用此过程连接到在 Windows 上运行的 Oracle 服务器和 X 服务器。
更新:由于每次Windows重启时WSL的IP地址都会改变,因此自动获取并更新文件会比较方便hosts
。
在 WSL 中:
执行
cat /etc/hosts
以找出 Windows 主机的名称。添加以下代码到
~/.profile
:HOST=<WINDOWS_HOSTNAME> IP_HOST=$(grep -m 1 $HOST /etc/hosts) OLD_IP=$(echo "$IP_HOST" | awk '{print $1}') NEW_IP=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}') if [ "$NEW_IP" != "$OLD_IP" ]; then echo "Updating IP Address-hostname mapping" sudo sed -i "s|$IP_HOST|$NEW_IP\t$HOST|" /etc/hosts echo "$HOST has the IP Address $NEW_IP" fi
答案4
有一个方便的“功能”WSL-VPNKit。如果您按照 README 说明安装并导入此发行版,则您可以使用它host.internal
来访问 Windows 主机而无需知道其 IP 地址。
下载后,
wsl --import wsl-vpnkit --version 2 $env:USERPROFILE\wsl-vpnkit wsl-vpnkit.tar.gz
添加到你的 ~/.bashrc,
wsl.exe -d wsl-vpnkit --cd /app service wsl-vpnkit status >/dev/null || wsl.exe -d wsl-vpnkit --cd /app service wsl-vpnkit start
重新加载终端后,尝试host.internal
从 WSL 中点击。例如,如果 Fiddler 代理端口是 8888,
nc -v -w5 -z host.internal 8888