从 Windows 访问本地主机(Ubuntu -VM)

从 Windows 访问本地主机(Ubuntu -VM)

我在虚拟机中使用 Ubuntu,并从那里启动我的代码项目。这些项目在处于活动状态时可以在 下运行localhost:3000

现在当我在 Ubuntu 中执行时ifconfig得到以下结果:

屏幕

如果我尝试 ping 标记的地址,我会收到回复(来自 Windows)。但不知何故我无法访问http://192.168.145.129:3000在我的浏览器中,我还尝试了主机名http://ubuntu:3000。我认为这是由于我的 Windows 中的某些防火墙设置造成的。


我在公司代理后面工作。因此能够在虚拟机中浏览互联网。从我的虚拟机网络设置开始,我使用 NAT(用于共享主机 IP 地址)。

有人知道如何从 VM 访问本地主机吗?

我还检查了tcpdump -i ens33 port 3000是否收到任何包裹,结果是收到了。

编辑 netstat -tnlp 的结果

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:63342         0.0.0.0:*               LISTEN      3087/java           
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 127.0.0.1:3000          0.0.0.0:*               LISTEN      3378/node           
tcp        0      0 127.0.0.1:3128          0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:6942          0.0.0.0:*               LISTEN      3087/java           
tcp6       0      0 ::1:631                 :::*                    LISTEN   

答案1

netstat输出中您可以看到,您的服务仅正在监听localhost

[snip]
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN      3378/node           
[snip]

你永远不可能从“外部”到达那里。

解决这个问题的最佳方法肯定是依赖于服务的。例如,对于一个简单的 PHP 服务器,您可以使用php -S 0.0.0.0:3000它来让它监听全部接口,而不仅仅是localhost

但是,作为一种快速的解决方法,您可以使用转发端口iptables,例如:

iptables -t nat -I PREROUTING -p tcp -i ens33 -d 192.168.145.129 --dport 3000 -j DNAT --to-destination 127.0.0.1:3000

不要忘记使用以下命令启用到本地主机的路由:

sysctl -w net.ipv4.conf.ens33.route_localnet=1

我已经使用了ens33(从屏幕截图来看)它是您的“外部”网络接口,如果不是,请相应地更新规则。

相关内容