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

hel*_*y27 5 networking iptables ubuntu linux-kvm libvirt

我正在设置一个新的家庭服务器,以边缘偏执的安全为目标。

因此,所有可以进入虚拟机的开放端口都拥有自己的虚拟机。我使用 Ubuntu Server 作为主机,因为我喜欢免费的无需重新启动的内核修补。

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

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

use*_*686 2

\n

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

\n
\n\n

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

\n\n

这也意味着您的 VM 来宾无法直接访问您的实际 LAN 路由器\xe2\x80\x93,它们不在同一以太网上。这可能的,但您需要将物理以太网接口 (eth0) 与虚拟机放在同一网桥中。

\n\n

使用哪种方法取决于您:

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

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

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

  • \n
\n\n

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

\n

  • @user1686 这个命令:`ip link set eth0 master virbr0`不起作用,你能发布一个完整的解决方案吗? (4认同)