我在托管服务提供商处有一台运行 Ubuntu 的专用服务器。我已经配置了 OpenVPN 和 VirtualBox,并使用 VirtualBox 安装了 Windows 7 VM。该服务器具有以下接口:
- 接口
eth0
分配有公网 IP 地址 - 环回接口
- 从 OpenVPN 调出接口
是否可以通过某种方式让 Win7-VM 从 VM-Range (10.8.0.0/24) 获取 IP 地址?我希望这可以实现,以便系统可以启动并可通过公共 IP 访问,并且如果我连接到 VPN,则可以使用例如 IP 访问 VM 10.8.0.7
?
我听说过网络桥接,也尝试过几种配置,但这样做会导致整个服务器无法访问。也许有人可以解释一下这是否可行,哪种方法最合适。
谢谢
答案1
将网络适配器设置更改为桥接应该会将您的虚拟机置于与主机相同的网络中,并使用第一个可用的 IP 地址。从现在开始,您可以像配置物理机一样配置静态 IP,或者您可以使用 DHCP 将虚拟机的 MAC 地址固定到 IP 地址(例如使用路由器或名称服务器)。
希望这可以帮助!
答案2
一般来说,麻烦最少的解决方案可能是让虚拟机位于主机可访问的网络上,并使用外部网络和虚拟机网络之间的路由。
这为您提供了最大程度的控制,同时外部网络却看不到它。这可以避免例如虚拟机的 dhcp 请求进入托管提供商的网络时出现的问题以及类似问题。
例如,示例配置将使用 iptables:
iptables -t nat -I PREROUTING -i external-net -p tcp --dport 80 -j DNAT --to-destination win7vm # route http traffic into the vm
iptables -t nat -I POSTROUTING -i vmnet-interface -j MASQUERADE # replace vm-ip with external ip
iptables -A FORWARD -j ACCEPT
echo 1 >/proc/sys/net/ipv4/ip_forward
您的虚拟机需要使用接口上的主机vmnet-interface
作为(默认)网关,但如果您没有更改许多网络设置,这应该是默认的。
当您设置路由时,您可能想要添加更多 iptables 规则,以防止在其他接口之间转发。
答案3
您需要在 OpenVPN 配置中使用tap
设备和模式。bridge
然后需要创建一个桥接器,其中tap
配置了OpenVPN的设备和虚拟内部网络适配器作为成员。
您需要将主机 IP 地址分配给主机上的桥接接口。
此后,您的OpenVPN隧道和虚拟机网络适配器就在同一个子网中,一旦您连接到OpenVPN服务器,您就会连接到同一个网络。
您必须保留接口当前的公共 IP 地址。