如题,在 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 访问网页,但是实测连不上
可能是什么原因造成的呢?
1
carlclone 2021-01-23 20:14:12 +08:00
docker 做端口映射后不也可以通过 http://192.168.0.3:8xxx 的形式访问吗 , 需求是啥
|
2
billlee 2021-01-23 20:38:53 +08:00
转发的目的地址不是 127.0.0.1, 应该留空
|
3
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 |
4
oott123 2021-01-23 20:56:57 +08:00
既然是端口转发,那么虚拟机里的监听程序就不能监听 127.0.0.1 这样的 loopback 地址了,需要监听 NAT 网卡的地址或者 0.0.0.0
像 wsl2 那样方便的本地端口转发背后是有很多魔法的,没法这么简单地实现 |
5
LeeReamond OP |
6
oott123 2021-01-24 10:15:29 +08:00 via Android 1
端口转发程序运行在你的主机上,因此它无法访问虚拟机系统内的 loopback 地址(除非在虚拟机上运行 agent ),所以 127.0.0.1 不行。
至于为什么转发对象是 0.0.0.0 也可以,我觉得应当是 VirtualBox 做了一些特殊处理,读取到了虚拟机对应的 ip 地址,帮你翻译过来了。 |