我之前在 Windows 10 主机上运行 VMWare Player 托管 Ubuntu 18.04 客户虚拟机。在我的 Ubuntu 客户机中,我能够启动绑定到 0.0.0.0:3000(Ubuntu 客户机内的任何网络适配器,端口 3000)的 Ruby on Rails 服务器。使用此配置,我能够使用以下 URL 从主机上的 Chrome 访问我的服务器:
昨天,我购买了 VMWare Workstation Pro 升级版。起初,我的 Ubuntu VM 甚至无法启动,但后来我在 Windows 10 的“添加/删除程序”下使用了“修复”,现在我能够启动我的 Ubuntu VM。但是,现在我遇到了另一个问题:我的主机无法访问我的客户机http://0.0.0.0:3000。
我的 Ubuntu 客户虚拟机配置为使用 NAT 作为网络适配器。
看来我的虚拟机的网络配置发生了一些变化。也许我取消了一些设置,使主机能够看到 IP 地址为 0.0.0.0 的客户机。
为了访问 0.0.0.0 的服务器,我需要什么网络适配器(或其他设置)?
我已经看到了对类似问题的其他答复,我想强调的是,我已经阅读了其他问题,但细节略有不同:
- 使用 VirtualBox 代替 VMWare
- 这些解决方案通常会告诉用户查找虚拟机的 IP 地址 - 对于使用我之前的配置的我来说,这没有必要。我更希望使用 0.0.0.0 来使其工作,这样我就不必每次都查找虚拟机的 IP。
- 有些解决方案有复杂的答案——我确信上次我没有做任何花哨的事情来让它工作,我只是不知道当我使用“修复”时发生了什么变化。
回答一些问题:
netstat -ano | findstr LISTENING
Windows主机上的输出为:
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 1156
TCP 0.0.0.0:443 0.0.0.0:0 LISTENING 7008
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:902 0.0.0.0:0 LISTENING 5548
TCP 0.0.0.0:912 0.0.0.0:0 LISTENING 5548
TCP 0.0.0.0:5040 0.0.0.0:0 LISTENING 9844
TCP 0.0.0.0:5357 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:5432 0.0.0.0:0 LISTENING 6800
TCP 0.0.0.0:5433 0.0.0.0:0 LISTENING 6560
TCP 0.0.0.0:6109 0.0.0.0:0 LISTENING 5152
TCP 0.0.0.0:7680 0.0.0.0:0 LISTENING 18224
TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING 912
TCP 0.0.0.0:49665 0.0.0.0:0 LISTENING 832
TCP 0.0.0.0:49666 0.0.0.0:0 LISTENING 1872
TCP 0.0.0.0:49667 0.0.0.0:0 LISTENING 2188
TCP 0.0.0.0:49668 0.0.0.0:0 LISTENING 2820
TCP 0.0.0.0:49669 0.0.0.0:0 LISTENING 4452
TCP 0.0.0.0:49670 0.0.0.0:0 LISTENING 4612
TCP 0.0.0.0:49755 0.0.0.0:0 LISTENING 904
TCP 127.0.0.1:5354 0.0.0.0:0 LISTENING 5000
TCP 127.0.0.1:5939 0.0.0.0:0 LISTENING 5560
TCP 127.0.0.1:8307 0.0.0.0:0 LISTENING 7008
TCP 127.0.0.1:28385 0.0.0.0:0 LISTENING 4
TCP 127.0.0.1:49350 0.0.0.0:0 LISTENING 18336
TCP 127.0.0.1:49351 0.0.0.0:0 LISTENING 18524
TCP 127.0.0.1:49751 0.0.0.0:0 LISTENING 11472
TCP 127.0.0.1:58091 0.0.0.0:0 LISTENING 5248
TCP 127.0.0.1:58101 0.0.0.0:0 LISTENING 14360
TCP 127.0.0.1:65001 0.0.0.0:0 LISTENING 5284
TCP 192.168.1.68:139 0.0.0.0:0 LISTENING 4
TCP 192.168.17.1:139 0.0.0.0:0 LISTENING 4
TCP 192.168.33.1:139 0.0.0.0:0 LISTENING 4
TCP 192.168.47.1:139 0.0.0.0:0 LISTENING 4
TCP 192.168.56.1:139 0.0.0.0:0 LISTENING 4
TCP [::]:135 [::]:0 LISTENING 1156
TCP [::]:443 [::]:0 LISTENING 7008
TCP [::]:445 [::]:0 LISTENING 4
TCP [::]:5357 [::]:0 LISTENING 4
TCP [::]:5432 [::]:0 LISTENING 6800
TCP [::]:5433 [::]:0 LISTENING 6560
TCP [::]:7680 [::]:0 LISTENING 18224
TCP [::]:49664 [::]:0 LISTENING 912
TCP [::]:49665 [::]:0 LISTENING 832
TCP [::]:49666 [::]:0 LISTENING 1872
TCP [::]:49667 [::]:0 LISTENING 2188
TCP [::]:49668 [::]:0 LISTENING 2820
TCP [::]:49669 [::]:0 LISTENING 4452
TCP [::]:49670 [::]:0 LISTENING 4612
TCP [::]:49755 [::]:0 LISTENING 904
TCP [::1]:8307 [::]:0 LISTENING 7008
Ubuntu 客户机上的输出netstat -ntlup
为:
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8084 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 2419/puma 4.3.3 (tc
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:6942 0.0.0.0:* LISTEN 2020/java
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:63342 0.0.0.0:* LISTEN 2020/java
tcp6 0 0 ::1:631 :::* LISTEN -
udp 0 0 0.0.0.0:35758 0.0.0.0:* -
udp 0 0 127.0.0.53:53 0.0.0.0:* -
udp 0 0 0.0.0.0:68 0.0.0.0:* -
udp 0 0 0.0.0.0:631 0.0.0.0:* -
udp 0 0 0.0.0.0:5353 0.0.0.0:* -
udp6 0 0 :::36455 :::* -
udp6 0 0 :::5353 :::*
这里还有一条有趣的信息:我可以从 Windows 访问 Rails 服务器的 IP 地址是192.168.47.128。请注意,此地址确实不是出现在 Windows 主机上的 netstat 地址列表中,但我能够以某种方式访问服务器。可能netstat -ano | findstr LISTENING
不是合适的命令;我将研究 Windows 上的 netstat 参数。
编辑 - 我刚刚意识到我还没有配置 NAT 端口转发,但现在已经配置了,但仍然没有从主机上的 0.0.0.0:3000 获得任何信息。以下是 VMWare 网络编辑器设置的图片:
设置端口转发后,看起来 0.0.0.0:3000 正在我的 Windows 机器上监听,但我仍然无法在 Chrome 中连接。这是netstat -ano | findstr LISTENING
现在的输出:
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 1156
TCP 0.0.0.0:443 0.0.0.0:0 LISTENING 7008
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:902 0.0.0.0:0 LISTENING 5548
TCP 0.0.0.0:912 0.0.0.0:0 LISTENING 5548
TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 12252
TCP 0.0.0.0:5040 0.0.0.0:0 LISTENING 9844
TCP 0.0.0.0:5357 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:5432 0.0.0.0:0 LISTENING 6800
TCP 0.0.0.0:5433 0.0.0.0:0 LISTENING 6560
TCP 0.0.0.0:6109 0.0.0.0:0 LISTENING 5152
TCP 0.0.0.0:7680 0.0.0.0:0 LISTENING 18224
TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING 912
TCP 0.0.0.0:49665 0.0.0.0:0 LISTENING 832
TCP 0.0.0.0:49666 0.0.0.0:0 LISTENING 1872
TCP 0.0.0.0:49667 0.0.0.0:0 LISTENING 2188
TCP 0.0.0.0:49668 0.0.0.0:0 LISTENING 2820
TCP 0.0.0.0:49669 0.0.0.0:0 LISTENING 4452
TCP 0.0.0.0:49670 0.0.0.0:0 LISTENING 4612
TCP 0.0.0.0:49755 0.0.0.0:0 LISTENING 904
TCP 127.0.0.1:5354 0.0.0.0:0 LISTENING 5000
TCP 127.0.0.1:5939 0.0.0.0:0 LISTENING 5560
TCP 127.0.0.1:8307 0.0.0.0:0 LISTENING 7008
TCP 127.0.0.1:28385 0.0.0.0:0 LISTENING 4
TCP 127.0.0.1:49350 0.0.0.0:0 LISTENING 18336
TCP 127.0.0.1:49351 0.0.0.0:0 LISTENING 18524
TCP 127.0.0.1:49751 0.0.0.0:0 LISTENING 11472
TCP 127.0.0.1:58091 0.0.0.0:0 LISTENING 5248
TCP 127.0.0.1:58101 0.0.0.0:0 LISTENING 14360
TCP 127.0.0.1:65001 0.0.0.0:0 LISTENING 5284
TCP 192.168.1.68:139 0.0.0.0:0 LISTENING 4
TCP 192.168.17.1:139 0.0.0.0:0 LISTENING 4
TCP 192.168.33.1:139 0.0.0.0:0 LISTENING 4
TCP 192.168.47.1:139 0.0.0.0:0 LISTENING 4
TCP 192.168.56.1:139 0.0.0.0:0 LISTENING 4
TCP [::]:135 [::]:0 LISTENING 1156
TCP [::]:443 [::]:0 LISTENING 7008
TCP [::]:445 [::]:0 LISTENING 4
TCP [::]:5357 [::]:0 LISTENING 4
TCP [::]:5432 [::]:0 LISTENING 6800
TCP [::]:5433 [::]:0 LISTENING 6560
TCP [::]:7680 [::]:0 LISTENING 18224
TCP [::]:49664 [::]:0 LISTENING 912
TCP [::]:49665 [::]:0 LISTENING 832
TCP [::]:49666 [::]:0 LISTENING 1872
TCP [::]:49667 [::]:0 LISTENING 2188
TCP [::]:49668 [::]:0 LISTENING 2820
TCP [::]:49669 [::]:0 LISTENING 4452
TCP [::]:49670 [::]:0 LISTENING 4612
TCP [::]:49755 [::]:0 LISTENING 904
TCP [::1]:8307 [::]:0 LISTENING 7008
好的,我发现我可以通过以下方式访问我的客户虚拟机:127.0.0.1:3000使用上述配置,但仍然无法使用 0.0.0.0。我想这对我来说已经足够好了,但我仍然想知道 0.0.0.0 之前是如何工作的。
这似乎是一个微妙的问题。许多 Google 搜索结果指出,将服务器进程 (rails) 绑定到 0.0.0.0 是有意义的,但尝试从浏览器访问 0.0.0.0 作为 IP 地址实际上没有任何意义,因为它相当于一个通配符。
这就引出了一个问题:这在 Mac 和 Ubuntu 上是如何工作的?我看到其他帖子证实,在 Ubuntu 或 Mac 机器上能够正常访问 0.0.0.0:3000 处的开发服务器,但在 Windows 上“有些不同”。那是什么?