![使我的 KVM 虚拟机可通过网络访问](https://linux22.com/image/1602398/%E4%BD%BF%E6%88%91%E7%9A%84%20KVM%20%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%8F%AF%E9%80%9A%E8%BF%87%E7%BD%91%E7%BB%9C%E8%AE%BF%E9%97%AE.png)
我正在设置一个新的家庭服务器,目标是实现近乎偏执的安全。
因此,所有具有开放端口并可进入 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 使用不支持添加静态路由的“路由器”,或其他一些不寻常的原因。)