将 WSL 内部的本地 api 暴露给物理设备和模拟器

Exposing local api inside WSL to physical devices and emulators

我正在 windows 10 台计算机上开发 React 本机应用程序。我安装了 WSL,在上面设置了我的后端需求,我可以看到我的 api 在本地主机上从 windows 响应,在那一端没问题。

现在我想从我的移动应用程序调用它 - 从使用 Android Studio 的 android 模拟器和连接到我的物理 android 设备(使用 Expo)通过 wifi 连接同一本地网络。

使用 Ngrok 它可以工作,将我的本地主机暴露给 public url,但这不是我想要的。如果可能的话,我希望一切都保持在本地。我电脑的本地 ipv4 是 10.0.0.8,但该地址没有任何结果(不是来自移动应用程序,也不是来自我的桌面浏览器,使用 localhost 时可以使用)。

我在 WSL 中的 Ubuntu 说:

~$ cat /etc/hosts

# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateHosts = false
127.0.0.1       localhost
127.0.1.1       JB-PC.localdomain       JB-PC

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

我的ipconfig:

Carte Ethernet Ethernet :

   Suffixe DNS propre à la connexion. . . : Home
   Adresse IPv6 de liaison locale. . . . .: fe80::f04e:ae2b:40b9:3d82%6
   Adresse IPv4. . . . . . . . . . . . . .: 10.0.0.8
   Masque de sous-réseau. . . . . . . . . : 255.255.255.0
   Passerelle par défaut. . . . . . . . . : 10.0.0.138

Carte Ethernet vEthernet (WSL) :

   Suffixe DNS propre à la connexion. . . :
   Adresse IPv6 de liaison locale. . . . .: fe80::68c3:25c9:588a:a957%17
   Adresse IPv4. . . . . . . . . . . . . .: 172.20.32.1
   Masque de sous-réseau. . . . . . . . . : 255.255.240.0
   Passerelle par défaut. . . . . . . . . :

localhost ping ::1 :

C:\WINDOWS\system32>ping localhost

Envoi d’une requête 'ping' sur JB-PC [::1] avec 32 octets de données :
Réponse de ::1 : temps<1ms
Réponse de ::1 : temps<1ms
Réponse de ::1 : temps<1ms
Réponse de ::1 : temps<1ms

Statistiques Ping pour ::1:
    Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms

和 127.0.0.1 ping 以及使用 -4 选项 ping localhost 给出相同的输出:

C:\WINDOWS\system32>ping 127.0.0.1

Envoi d’une requête 'Ping'  127.0.0.1 avec 32 octets de données :
Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128
Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128
Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128
Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128

Statistiques Ping pour 127.0.0.1:
    Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms

我应该怎么做才能完成这项工作?

所以我找到了解决方案,感谢 https://superuser.com/a/1618446/757755 I successfully used option 2 and used port forwarding, with the script found here。请记住,您的 PowerShell 脚本必须 运行 作为管理员。