VirtualBox 虚拟机转发 Ubuntu 端口为什么不生效,是哪里设置错误了吗?

2021-01-23 20:07:35 +08:00
 LeeReamond

如题,在 windows 上用 vb 跑虚拟机,跑了一个 ubuntu20.04lts 的系统,但是连接性方面有些问题。

我目前配置了一个桥接网卡,虚拟机和宿主机可以实现通过局域网互相访问,但是我还是想利用一下端口转发,因为有时候直接转发端口可以做到一些更方便的操作,比如直接暴露 docker 端口之类的,用桥接网卡无法实现。

想要实现的效果是,

用 node 在 ubuntu 的 0.0.0.0:8080 上开了个网页服务。在 windows 中通过局域网 http://192.168.0.3:8080 是可以访问的,但是我当我在 vb 的虚拟机设置中,设置使用 nat 网卡(另一个网卡,桥接不能转发端口吧)的端口转发,设置由 127.0.0.1:8080 转发到 127.0.0.1:8080

希望在宿主机上能用 127.0.0.1:8080 访问网页,但是实测连不上

可能是什么原因造成的呢?

1320 次点击
所在节点    问与答
6 条回复
carlclone
2021-01-23 20:14:12 +08:00
docker 做端口映射后不也可以通过 http://192.168.0.3:8xxx 的形式访问吗 , 需求是啥
billlee
2021-01-23 20:38:53 +08:00
转发的目的地址不是 127.0.0.1, 应该留空
hoyixi
2021-01-23 20:43:32 +08:00
假设虚拟机上 NAT 那块网卡 IP 是 a.b.c.d
那么应该设置转发:127.0.0.1:8080 => a.b.c.d:8080
oott123
2021-01-23 20:56:57 +08:00
既然是端口转发,那么虚拟机里的监听程序就不能监听 127.0.0.1 这样的 loopback 地址了,需要监听 NAT 网卡的地址或者 0.0.0.0
像 wsl2 那样方便的本地端口转发背后是有很多魔法的,没法这么简单地实现
LeeReamond
2021-01-24 00:26:34 +08:00
@hoyixi
@oott123
感谢,按大佬说的方法已经解决。但是我不理解为什么不能监听 127.0.0.1 呢,端口转发是什么个原理。

我理解上是类似反向代理那种感觉,比如客户访问 127.0.0.1:8080,程序会自动去寻找虚拟机 127.0.0.1:8080 的内容,并返回。为什么 127.0.0.1 不行,而 10.2.0.15 可以,0.0.0.0 也行? 虚拟机上服务绑定在 0.0.0.0 很好理解,端口转发的对象是 0.0.0.0 应该怎么理解呢?
oott123
2021-01-24 10:15:29 +08:00
端口转发程序运行在你的主机上,因此它无法访问虚拟机系统内的 loopback 地址(除非在虚拟机上运行 agent ),所以 127.0.0.1 不行。

至于为什么转发对象是 0.0.0.0 也可以,我觉得应当是 VirtualBox 做了一些特殊处理,读取到了虚拟机对应的 ip 地址,帮你翻译过来了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/747749

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX