使我的 KVM 虚拟机可通过网络访问

使我的 KVM 虚拟机可通过网络访问

我正在设置一个新的家庭服务器,目标是实现近乎偏执的安全。

因此,所有具有开放端口并可进入 VM 的东西都会有自己的 VM。我使用 Ubuntu Server 作为主机,因为我喜欢免费的无需重启的内核修补。

我设置了四台 Debian VM,连接到默认虚拟桥接接口。现在我可以看到并访问应该从主机打开的端口,但当我尝试从我的网络访问它们时,却失败了。使用 nmap 查看它们时,它们显示为“已过滤”。

如何让这些端口可从更广泛的网络访问?我可以将端口从物理接口转发到桥接器上的子网吗?还是最好以某种方式让客户使用我的实际路由器作为网关,而不是 KVM 内置的网关?

答案1

或者最好以某种方式让客人使用我的实际路由器作为他们的网关,而不是内置于 KVM 的路由器?

KVM 中没有内置网关(也没有“默认桥接”)。您的 VM 主机本身就是网关 - 如果您使用 libvirt,那么它只会激活 Linux 内核的常规 IP 转发功能(并为您创建一个 virbr0)。

这也意味着您的 VM 客户端无法直接访问您的实际 LAN 路由器 - 它们不在同一个以太网上。这是可行的,但是您需要将物理以太网接口(eth0)放在与虚拟机相同的网桥中。

使用哪种方法取决于你:

  • 您可以通过配置 LAN 来识别 VM 子网(即添加静态路由,并将 VM 主机指定为网关),让主机成为一个简单的路由器。其他设备将能够连接到 VM 的地址。

  • 您可以通过向 iptables 或 nftables 添加 DNAT 规则,让主机成为具有端口转发功能的路由器。

  • 您可以让主机成为网桥,通过将其 eth0 接口放置在 VM 网桥中 (ip link set eth0 master virbr0) - 这会将所有 VM 直接放置在您的主 LAN 子网中。

(但原则上我会避免在网络中间进行 NAT/端口转发,除非绝对必要,例如,如果主 LAN 使用不支持添加静态路由的“路由器”,或其他一些不寻常的原因。)

相关内容