我有一台旧的 HP ProLiant DL385 G5p 服务器,以前我仅将其用作高级 NAS,但现在我想用它做更多的事情,例如为我的网络设置缓存 DNS 服务器。
我希望能够通过 XCP-ng 管理程序在单独的虚拟机上运行我的文件服务器和 DNS(以及我能想到的任何其他东西)。
在过去的几天里,我开始进行设置,启动并运行了两个 Debian VM,甚至设法使缓存 DNS 正常工作。但是,当我尝试通过 SSH 连接到我想用于文件服务器的 Debian VM 时,问题出现了。我将该 VM 的 IP 放入 PuTTY(我有两个以太网连接到服务器;一个用于文件服务器,一个用于其他所有服务器),它连接到虚拟机管理程序时一切正常。这就是问题所在,我真的不知道这里发生了什么。我如何让 PuTTY 以及我将用于将文件传输到主 PC 的 SFTP 驱动器连接到 VM 而不是虚拟机管理程序。
我的一个朋友提到,我可能需要在虚拟机管理程序上使用端口转发才能通过 SSH 连接到他们,我已经研究过这个问题,但没有发现任何似乎有帮助的东西,尽管我不是 100% 确定什么我在找。
此后,我重新安装了 XCP-ng,并在一个以太网连接上设置了缓存 DNS 和 tor 中继节点,但仍然需要为文件服务器创建另一个 Debian 安装。
提前致谢。
编辑:这是我在虚拟机管理程序上运行时获得的输出route
:
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default gateway 0.0.0.0 UG 0 0 0 xenbr0 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 xenbr0
这是 VM 输出:
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.0.1 0.0.0.0 UG 0 0 0 eth1 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
希望这可以有用。
编辑(1):这是在虚拟机管理程序上运行的输出route -n
:
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 xenbr0 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 xenbr0
答案1
我们必须了解您在虚拟机管理程序中使用的网络模型。
如果虚拟机与虚拟机管理程序在同一个 IP 网络中运行,即虚拟机管理程序不执行 IP 网络路由,则无需进行端口转发。
但这不是最常见的情况。通常,当你设置虚拟机时,你会将它们放在一个单独的网络中,并在虚拟机管理程序上使用某种端口转发,通过最大限度地减少暴露的机器数量来稍微提高安全性。
因此,您很可能需要设置端口转发规则,iptables
将虚拟机管理程序 IP 中的端口 2022 映射到 VM 的端口 22。
在以下示例中,假设您的虚拟机管理程序设置了一个子网 192.168.1.0,其网络掩码为 255.255.255.0(24 位,C 类)。此外,假设您的虚拟机的地址为 192.168.1.2。然后,如果您在虚拟机管理程序上正确设置了防火墙,默认情况下拒绝所有连接,则以下两行应该可以执行该任务:
$ iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 2022 -j DNAT --to 192.168.1.2:22
$ iptables -A FORWARD -p tcp -d 192.168.1.2 --dport 22 -j ACCEPT
参考:
[1]https://www.systutorials.com/816/port-forwarding-using-iptables/
答案2
好的,经过大量的挖掘和 Marcelo 的帮助(他试图回答我的问题)之后,我发现了无法连接到虚拟机的原因。
剧透:它简单得令人尴尬。
长话短说,我找到了一种方法来检查分配给我试图使用的以太网端口的 IP 地址ip a show eth1
,如果知道它的存在会很方便。
事实证明,出于某种原因 - 可能是由于虚拟机管理程序做了一些复杂的事情 -甚至当我将要使用的 IP 设置/etc/network/interfaces
为静态时,它决定为其指定一个不同的 IP。一旦我知道它正在使用的 IP,我就可以毫不费力地通过 SSH 进入虚拟机。