WSL2安装Ubuntu-18.04,并在Ubuntu-18.04==>Docker中部署MYSQL后,无法通过Windows本机IP(以及局域网IP)连接MYSQL服务器

Windows本机IP为:192.168.100.52
PS C:\Users\THF> ipconfig

Windows IP 配置


以太网适配器 以太网:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

无线局域网适配器 本地连接* 1:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

无线局域网适配器 本地连接* 10:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

无线局域网适配器 WLAN:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::5ebc:dd5b:a66:c88b%17
   IPv4 地址 . . . . . . . . . . . . : 192.168.100.52
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.100.254

以太网适配器 蓝牙网络连接:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

以太网适配器 vEthernet (Default Switch):

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::ee62:5709:bc24:1bfe%33
   IPv4 地址 . . . . . . . . . . . . : 172.23.64.1
   子网掩码  . . . . . . . . . . . . : 255.255.240.0
   默认网关. . . . . . . . . . . . . :

以太网适配器 vEthernet (WSL):

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::bd26:c0cd:3ca6:9447%49
   IPv4 地址 . . . . . . . . . . . . : 192.168.176.1
   子网掩码  . . . . . . . . . . . . : 255.255.240.0
   默认网关. . . . . . . . . . . . . :
PS C:\Users\THF>
WSL-Ubuntu-18.04的IP地址为:192.168.190.156
root@DESKTOP-K5P9QQ4:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:0d:f1:1e brd ff:ff:ff:ff:ff:ff
    inet 192.168.190.156/20 brd 192.168.191.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe0d:f11e/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:be:70:08:de brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
4: br-da6fb0eae166: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:34:04:ae:0c brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-da6fb0eae166
       valid_lft forever preferred_lft forever
    inet6 fe80::42:34ff:fe04:ae0c/64 scope link
       valid_lft forever preferred_lft forever
5: br-e600d2350e06: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:11:4c:3e:2d brd ff:ff:ff:ff:ff:ff
    inet 172.20.0.1/16 brd 172.20.255.255 scope global br-e600d2350e06
       valid_lft forever preferred_lft forever
    inet6 fe80::42:11ff:fe4c:3e2d/64 scope link
       valid_lft forever preferred_lft forever
26: veth618d16f@if25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-e600d2350e06 state UP group default
    link/ether 9a:31:b1:a3:0e:bd brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::9831:b1ff:fea3:ebd/64 scope link
       valid_lft forever preferred_lft forever
30: veth1741c2c@if29: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-da6fb0eae166 state UP group default
    link/ether 9a:3c:70:6f:e3:01 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::983c:70ff:fe6f:e301/64 scope link
       valid_lft forever preferred_lft forever
40: br-8463df2ba3cf: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:64:35:10:4f brd ff:ff:ff:ff:ff:ff
    inet 172.22.0.1/16 brd 172.22.255.255 scope global br-8463df2ba3cf
       valid_lft forever preferred_lft forever
    inet6 fe80::42:64ff:fe35:104f/64 scope link
       valid_lft forever preferred_lft forever
42: vethaf505af@if41: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-8463df2ba3cf state UP group default
    link/ether ee:db:1a:ef:25:b5 brd ff:ff:ff:ff:ff:ff link-netnsid 3
    inet6 fe80::ecdb:1aff:feef:25b5/64 scope link
       valid_lft forever preferred_lft forever
44: veth217462c@if43: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-8463df2ba3cf state UP group default
    link/ether 7a:6c:78:ea:e6:94 brd ff:ff:ff:ff:ff:ff link-netnsid 4
    inet6 fe80::786c:78ff:feea:e694/64 scope link
       valid_lft forever preferred_lft forever
45: br-4ceb76714ee8: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:70:11:04:53 brd ff:ff:ff:ff:ff:ff
    inet 172.23.0.1/16 brd 172.23.255.255 scope global br-4ceb76714ee8
       valid_lft forever preferred_lft forever
60: br-a3bf5c4c4573: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:85:bf:8f:f9 brd ff:ff:ff:ff:ff:ff
    inet 172.28.0.1/16 brd 172.28.255.255 scope global br-a3bf5c4c4573
       valid_lft forever preferred_lft forever
    inet6 fe80::42:85ff:febf:8ff9/64 scope link
       valid_lft forever preferred_lft forever
62: veth27e00ff@if61: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-a3bf5c4c4573 state UP group default
    link/ether 8a:45:61:5d:82:ab brd ff:ff:ff:ff:ff:ff link-netnsid 2
    inet6 fe80::8845:61ff:fe5d:82ab/64 scope link
       valid_lft forever preferred_lft forever
root@DESKTOP-K5P9QQ4:~#

目前在WIndows中可以连接成功MYSQL服务器的IP

localhost

192.168.190.156

127.0.0.1

以上3个IP地址都可以从WIndows本机连接成功

image-20230808195927520

image-20230808195939122

image-20230808200008159

以上IP地址都可以连接成功,而WIndows本机IP却连接不上

image-20230808200115464

为什么这三个IP都可以连接成功而WIndows主机IP却不行?

这是因为在默认情况下,WSL(Windows Subsystem for Linux)以及其中的应用程序在网络上以与主机不同的虚拟网络接口进行通信。这意味着在 WSL 内部运行的服务(如 MySQL)在默认配置下只能通过本地回环接口(localhost127.0.0.1)进行访问,而无法通过 Windows 主机的 IP 地址进行访问。

当你通过 localhost 访问 WSL 中的服务时,请求是在本地主机内部进行的,不需要经过网络层。但是,当你尝试通过 Windows 主机的 IP 地址访问 WSL 中的服务时,请求必须通过网络接口进行传输。由于默认情况下 WSL 内部的虚拟网络接口与主机的物理网络接口是隔离的,所以无法直接从 Windows 主机访问 WSL 中的服务。

解决

WSL Ubuntu 的 IP 地址是 192.168.190.156,而 Windows 本机的 IP 地址是 192.168.100.52。这两个 IP 地址处于不同的子网中,这可能导致局域网中的设备无法直接访问 WSL Ubuntu 中的服务。

通常情况下,局域网中的设备必须处于同一子网才能直接通信。

为了使 Windows 本机和 WSL Ubuntu 之间能够互相通信,你可以尝试以下方法之一:

  1. 将 WSL Ubuntu 的 IP 地址设置为和 Windows 本机在同一子网内: 你可以通过修改 WSL Ubuntu 的网络配置,将其 IP 地址设置为与 Windows 本机在同一子网内。例如,你可以将 WSL Ubuntu 的 IP 地址设置为 192.168.100.x,以确保它和 Windows 本机位于同一子网。
  2. 使用端口转发将流量转发到 WSL Ubuntu: 如果你想在不修改 WSL Ubuntu 的 IP 地址的情况下实现连接,你可以继续使用端口转发。将 Windows 本机的某个端口转发到 WSL Ubuntu 的 IP 地址和端口上,然后从 Windows 本机连接该端口即可。
  3. 创建虚拟网络桥接: 另一种方法是在 Windows 上创建一个虚拟网络桥接,将 WSL Ubuntu 的虚拟网络接口和物理网络接口桥接在一起,使得两者处于同一子网。然后,WSL Ubuntu 将获得来自物理网络的 IP 地址,从而可以与其他局域网设备直接通信。

不论你选择哪种方法,都需要在网络设置方面做出调整。请确保在进行任何网络设置更改之前备份重要数据,并谨慎操作。如果你对网络设置不太熟悉,建议在进行设置之前先查阅相关的网络文档或寻求专业人士的帮助。

本案例只测试过上述第二种方式,也是最简单的方式

端口转发

这种方法的好处是不需要对网络配置进行大幅更改,只需要在 Windows 主机上设置端口转发规则,将特定端口的流量转发到 WSL Ubuntu 的 IP 地址和端口上。这样,你可以在 Windows 主机上使用特定的端口连接到 WSL Ubuntu 上运行的服务。

在你的情况下,你可以将 Windows 主机上的某个端口(例如 3306)转发到 WSL Ubuntu 的 192.168.190.1563306 端口,以实现连接 MySQL 服务。这将允许你使用 Windows 主机上的 MySQL 客户端连接到 WSL Ubuntu 上的 MySQL 服务器。

以下是设置端口转发的简单步骤:

  1. 在 Windows 主机上打开命令提示符(或 PowerShell)。
  2. 使用以下命令设置端口转发:

    netsh interface portproxy add v4tov4 listenport=3306 connectaddress=192.168.190.156 connectport=3306

    image-20230808201512480

    这会将 Windows 主机上的 3306 端口的流量转发到 WSL Ubuntu 的 192.168.190.1563306 端口。

  3. 现在,你可以在 Windows 主机上使用 MySQL 客户端连接到 192.168.100.52:3306 来连接 WSL Ubuntu 中运行的 MySQL 服务器。

    image-20230808201527509

    连接成功!!!!

    注意:如果想要局域网中其他的小伙伴也能连接你本地的MYSQL数据库,就需要设置连接的账号HOST为%,并且在MYSQL配置文件中设置:bind-address = 0.0.0.0

请确保你已经在 WSL Ubuntu 上启动了 MySQL 服务器,并允许远程连接。此外,还要注意防火墙设置,以确保端口转发能够正常工作。如果你的使用场景比较简单,这种方法可能是最简单且足够实现你的目标的。

取消端口转发

要取消之前设置的端口转发,你可以使用以下命令在 Windows 主机上执行。假设你之前将 Windows 主机上的 3306 端口转发到了 WSL Ubuntu 的 192.168.190.1563306 端口,现在你可以这样取消端口转发:

  1. 在 Windows 主机上打开命令提示符(或 PowerShell)。
  2. 使用以下命令取消端口转发:

    netsh interface portproxy delete v4tov4 listenport=3306

这将从 Windows 主机上取消端口转发规则,停止将流量转发到 WSL Ubuntu。

请注意,这只会取消之前设置的端口转发规则,不会影响 WSL Ubuntu 内部的网络配置。在取消端口转发后,你可能需要相应地更新你的应用程序连接配置,以便连接到正确的目标地址和端口。

最后修改:2023 年 08 月 08 日
如果觉得我的文章对你有用,请随意赞赏