我的设置:
- MacOS 主机(High Sierra 10.13.3)
- Linux 客户机(Ubuntu 16.04)
- 虚拟盒 5.2.12
- NAT 网络
我需要从主人到客人以及从客人到网络进行交谈。
客户机的 IP 地址为 10.0.2.15,网关为 10.0.2.2。我可以从客户机 ping 主机,没有任何问题。但是,我无法从主机 ping 客户机:
PING 10.0.2.15 (10.0.2.15): 56 个数据字节 icmp_seq 请求超时 0 icmp_seq 请求超时 1 icmp_seq 请求超时 2 ...
10.0.2.2 地址似乎已分配给我的主机:我在主机上运行一个 httpd 服务器 - 如果我从客户机在浏览器中导航到 10.0.2.2,我就可以获得主机的站点。
查看网络配置,我没有看到 virtualbox 添加的任何接口:
host$ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
OHC4: flags=0<> mtu 0
EHC36: flags=0<> mtu 0
EHC38: flags=0<> mtu 0
OHC6: flags=0<> mtu 0
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether xxxxx
inet6 fe80::1c34:9a51:ed93:3a5b%en1 prefixlen 64 secured scopeid 0x9
inet 10.37.37.37 netmask 0xffffff00 broadcast 10.37.37.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
ether xxxxx
media: autoselect
status: inactive
fw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 4078
lladdr xxxxx
nd6 options=201<PERFORMNUD,DAD>
media: autoselect <full-duplex>
status: inactive
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=b<RXCSUM,TXCSUM,VLAN_HWTAGGING>
ether xxxxx
nd6 options=201<PERFORMNUD,DAD>
media: autoselect (none)
status: inactive
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
inet6 fe80::9a23:8dd9:bf4e:f69d%utun0 prefixlen 64 scopeid 0x8
nd6 options=201<PERFORMNUD,DAD>
我没有看到任何从主机连接到客户机的路线:
host$ netstat -nr
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 10.37.37.1 UGSc 77 10 en1
10.37.37/24 link#9 UCS 3 0 en1
127 127.0.0.1 UCS 0 0 lo0
127.0.0.1 127.0.0.1 UH 3 458010 lo0
169.254 link#9 UCS 0 0 en1
255.255.255.255/32 link#9 UCS 0 0 en1
Internet6:
Destination Gateway Flags Netif Expire
default fe80::%utun0 UGcI utun0
::1 ::1 UHL lo0
fe80::%lo0/64 fe80::1%lo0 UcI lo0
fe80::1%lo0 link#1 UHLI lo0
fe80::%utun0/64 fe80::9a23:8dd9:bf4e:f69d%utun0 UcI utun0
fe80::9a23:8dd9:bf4e:f69d%utun0 link#8 UHLI lo0
fe80::%en1/64 link#9 UCI en1
fe80::1c34:9a51:ed93:3a5b%en1 f0:b4:79:1f:81:f0 UHLI lo0
ff01::%lo0/32 ::1 UmCI lo0
ff01::%utun0/32 fe80::9a23:8dd9:bf4e:f69d%utun0 UmCI utun0
ff01::%en1/32 link#9 UmCI en1
ff02::%lo0/32 ::1 UmCI lo0
ff02::%utun0/32 fe80::9a23:8dd9:bf4e:f69d%utun0 UmCI utun0
ff02::%en1/32 link#9 UmCI en1
主人不能和客人对话,这是可以理解的。问题是我该如何让它做到这一点?
答案1
我最终还是搞明白了。诀窍是创建一个仅主机网络,然后在客户机中添加两个网络接口 - 一个用于仅主机网络,另一个使用 NAT。现在 NAT 接口允许客户机访问互联网,仅主机接口允许主机和客户机之间进行双向通信。
答案2
我尝试NAT Network
使用Internal Network
VirtualBox 的 DHCP 服务器和静态 IP,但是我无法满足我的以下要求。
- 所需子网内的 VirtualBox 网络
- 使用 VirtualBox 自己的内部 DHCP 服务器
- 在这个网络中,一些虚拟机使用静态 IP,其他虚拟机使用 DHCP
- 主机应该能够通过 SSH 或任何客户端访问访客
- 最重要的是,避免使用桥接网络,避免在本地网络上暴露 VirtualBox 网络
Host-only Network
是救命恩人,并感谢@aleks-g 的回答。
这是我快速记录的逐步 HOST 设置。
# VBoxManage hostonlynet add --name=<NET_NAME> --netmask=255.255.255.0 --lower-ip=192.168.200.1 --upper-ip=192.168.200.254 --enable
就这样,继续创建虚拟机。在启动虚拟机之前,将网络适配器类型从 更改为NAT
,Host-only
@screenshot
如果您的虚拟机需要从 HOST 访问互联网,您可以设置网络类型NAT
,Adapter 2
@screenshot
接下来,我企图根据虚拟机名称或 MAC 地址创建 dhcpserver 并分配静态 IP
# VBoxManage dhcpserver add --netname <NET_NAME> --server-ip 192.168.0.1 --netmask 255.255.255.0 --lowerip 192.168.0.1 --upperip 192.168.0.254 --enable
# VBoxManage dhcpserver modify --netname <NET_NAME> --mac-address=<MAC_HERE> --fixed-address=192.168.0.101
# VBoxManage dhcpserver modify --netname <NET_NAME> --vm=<VM_NAME> --fixed-address=192.168.0.102
# VBoxManage list dhcpservers
使用最后一条list
命令,DHCP 服务器出现了,并且配置正确,但虚拟机没有使用此 DHCP 服务器,并且文档没有多大帮助。我猜想 Host-only 网络有自己的秘密DHCP 系统,我用 删除了它VBoxManage dhcpserver remove --network=<NET_NAME>
,并且必须在每个虚拟机上手动分配静态 IP,例如在 Centos / Fedora 上vi|nano /etc/sysconfig/network-scripts/ifcfg-<DEVICE_NAME>
并添加
BOOTPROTO="none"
IPADDR="192.168.200.101"
PREFIX="24"
GATEWAY="192.168.200.254"
ONBOOT="yes"