virtualbox vm无法从外部访问

virtualbox vm can not access from outside

我在ubuntu18.04安装了一个vbox,通过添加参数使用桥接网络:

--bridgeadapter2 eno1 --nicpromisc2 allow-all

一切正常,vm可以ping通外面,host可以ping通vm,但是外面ping不通vm: (同子网外可以ping通vm,例如:10.124.214.x可以ping通vm)

# 10.124.214.116 is vm, 10.124.214.4 is host, 10.124.12.103 is outside IP
# From host to vm
traceroute 10.124.214.116
traceroute to 10.124.214.116 (10.124.214.116), 30 hops max, 60 byte packets
 1  10.124.214.116 (10.124.214.116)  0.232 ms  0.197 ms  0.191 ms
# From vm to outside
ping 10.124.12.103
PING 10.124.12.103 (10.124.12.103) 56(84) bytes of data.
64 bytes from 10.124.12.103: icmp_seq=1 ttl=63 time=1.38 ms

棘手的是vbox界面不像普通的linux tun/tap界面,我可以在VM中看到界面,但是我不能从主机上操作,而且没有桥接主持人

有什么API我可以解决vbox的问题吗?

码农加油

关于桥牌,你说得对。这里的事情是你的虚拟机目前在虚拟盒子创建的 NAT 后面(见你提到的不同子网)

你在这里可以做的是在主机上创建新的桥(很好的说明HERE

使用此设置,您必须稍微更改网络设置:

                                     VM Host
                                     +-----------------------------------------------------------------+
                                     |                                       -> VM A (10.124.214.5/24) |
Outside network (10.124.214.0/24) -> | eno1 (no IP) -> br0 (10.124.214.4/24) -> VM B (10.124.214.6/24) |
                                     |                                       -> VM C (10.124.214.7/24) |
                                     +-----------------------------------------------------------------+

然后您可以将您的 VM 分配给 br0。取决于您的外部网络设置,您可能需要为您的虚拟机设置静态 IP

终于找到了根本原因: 我的虚拟机中有两个接口: 第一个是 NAT,第二个是网桥。默认情况下,vbox 将 NAT 接口设置为默认路由,当我发送数据包时,它使用 NAT 接口。但是HOST和VM在同一个子网中,当连接到HOST时,它使用桥接接口。当我需要从外部访问这个桥接接口时,我需要通过 ip route 命令添加另一个默认路由条目:

sudo ip route add default via 10.124.214.116