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
我在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