我正在尝试在 Linux(Fedora 22)上的 VirtualBox 中设置虚拟机。其网络必须具有以下属性:
- IP 地址是 192.168.1.2/24
- 默认网关是 192.168.1.1
- 无 DHCP
- 与外界的网络连接
我网络上的其他系统无需能够连接到虚拟机。VirtualBox 控制台暂时就足够了。
我首先尝试了“NAT”驱动程序,但我不知道如何让它使用 192.168.1.1 作为其默认网关。我让它在 192.168.1.0/24 中提供 DHCP 地址,但它坚持使用 192.168.1.2 作为网关。我还尝试使用“NAT 网络”驱动程序,使用网络范围 192.168.1.0/24 并禁用 DHCP(如https://virtualbox.org/manual/ch06.html#network_nat_service);在我的虚拟机中手动设置网络地址和默认路由后,我没有获得上行连接,甚至无法 ARP 192.168.1.1。如果我使用启用了 DHCP 的“NAT 网络”,它再次使用 192.168.1.2 作为默认网关,我仍然没有获得上游连接。“桥接适配器”驱动程序不合适,因为虚拟机托管在使用不同网络范围 (172.16.1.0/24) 的机器上。
目前,虚拟机内的操作系统是 Gentoo 安装 CD 映像。此虚拟机的最终目的是作为生产设备的测试环境;因此,它必须使用与真实设备相同的网络配置。
关于如何实现这个功能有什么建议吗?
编辑:VirtualBox 似乎无法做到这一点,至少在不经过很多麻烦的情况下无法做到这一点,例如更改主机的网络设置或添加第二个 VM 作为第一个 VM 的默认网关。我想我得试试其他 VM 管理器了。
答案1
虽然乍一看可能违反直觉,但解决问题所需的网络是仅限主持人:它是唯一一款允许您控制连接各个方面的产品。我假设您既作为主机运行 Linux,又作为客户机运行 Linux,如果不是,请相应地进行调整。
在配置虚拟机之前,在 VirtualBox GUI 上,选择文件 -> 首选项 -> 网络 -> 仅主机网络。通过点击窗口右侧的加号添加一个这样的网络,新网络名为vboxnet0会出现,现在点击螺丝刀。在 IPv4 地址下写入192.168.1.1
,在掩码下写入255.255.255.0
。现在点击DHCP 服务器并确保它已被禁用。
在主机上,你现在将看到
ip addr show
您有一个名为的新界面vboxnet0. 确保通过发出(作为 sudo)正确转发来自 VM 的请求
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
(这假设您的主机通过名为的接口连接到互联网eth0
,如果没有,请相应更改)。
现在回到 VirtualBox GUI,选择你的虚拟机,然后选择网络 -> 适配器 1 -> 启用网络适配器,Attached to
选择主机专用适配器,并Name
选择vboxnet0。
启动虚拟机,然后设置静态 IP 地址。这取决于客户操作系统。我将简单地向您展示如何在 Linux 中执行此操作,如果您使用的是 Windows 或 Mac OS X,并且不知道如何操作,则必须通过 Google 搜索来查找,这并不难。
始终以 sudo 形式发出以下命令:
ip link set dev eth0 down
ip addr flush dev eth0
ip addr add 192.168.1.2/24 dev eth0
ip link set dev eth0 up
ip route add default via 192.168.1.1
echo nameserver 8.8.8.8 >> /etc/resolv.conf
echo nameserver 8.8.4.4 >> /etc/resolv.conf
以上内容假设虚拟机中的主要接口名为 eth0,如果不是,请进行相应更改。以上所有内容都可以轻松编写脚本,但这取决于 Linux 发行版。一切就绪。
答案2
在虚拟机中,您的物理机(即 HOST)将成为您的网关。如果您想更改网关,请尝试根据需要配置 HOST 虚拟机适配器。如果您启用 NAT 并且想要从外部与您的虚拟机进行通信,则必须在虚拟机中创建转换条目。