如何连接到我的 libvirt/qemu/guests?(没有 IP 地址)

如何连接到我的 libvirt/qemu/guests?(没有 IP 地址)

我接手了一台可靠的 ubuntu 服务器的管理,该服务器带有多个虚拟服务器,也是使用 libvirt 和 qemu 的 ubuntu。我遇到无法连接到这些虚拟服务器/客户端的问题。

物理机箱的 root 密码未知,因此我不得不使用 Knoppix Live CD(因为它处理 LVM2 和 Raided 磁盘/映像)恢复它(这可能会破坏一些东西),然后执行 chroot 并更改密码。从那时起(巧合吗?)客人似乎没有 IP 地址。

当我查看“ifconfig vnet0”输出时,没有分配 IP 地址并且 RX/TX 计数为 0。这似乎是错误的(也许虚拟网桥坏了或者客户机没有运行)。

virbr0 有一个 IP 地址,当我尝试 ping 应分配给 vnet0 的 IP 地址时,TX 计数会增加。因此虚拟网络似乎没问题。

当我执行“virsh list --all”时,我看到客户机正在运行。我还使用“ps -eaf | grep libvirt”看到了进程。因此客户机似乎存在。(但它们在运行吗?)

“shutdown”命令不会关闭客户机。但是,这可能是有效的(没有 apcid)。“destroy”和“start”有效,但同样不确定客户机是否运行得足够多以达到初始化网络的程度。

我尝试从 virsh 内部“控制台 GuestMachine”,但是它挂起了,我想我需要在客户机上运行 getty。

ps 的输出还显示“-vnc 127.0.0.1:9”。但是,包括物理服务器在内的所有服务器都没有 GUI/X。我认为 VNC 只是图形化的,因此这条路线可能又是一条死路。

在“/var/log/libvirt/qemu/GuestMachine.log”中没有任何值得注意的内容。我看到了“关闭”、“启动”、命令行选项和“字符设备重定向到 /dev/pts/13(标签 charserial0)”。

这是我第一次接触 libvirt 和 qemu,经过一番研究后,我不确定我是否有正在运行的客户端或者如何连接它们(没有 IPAddress/ssh 选项)。

一旦我可以连接到客人,我相信我可以修复 IP 地址问题,但如果没有 IP 地址,我就无法连接到客人。

在这种情况下有没有办法联系客人?

答案1

vnc不仅限于呈现 GUI;它还可以呈现 shell 提示符的图形视图,就像您期望在独立框的文本控制台上看到的那样(例如,ALT-F2)。

例如,下面我将 vnc 查看器指向我的一个本地托管 QEMU 映像的 VNC 端口:

在此处输入图片描述

如您所见,它是一个非 GUI 控制台,但我仍然可以在这里愉快地登录,即使它没有 IP 地址(事实上它没有)。将您的 VNC 查看器指向端口 5909(将 5900 添加到 的参数中-vnc 127.0.0.1:),您应该没问题。

答案2

正如 MadHatter 所说,答案是使用 VNC。但是,由于服务器上没有 X,我们需要使用 ssh 隧道连接到客户机。

ssh -v L 5901:127.0.0.1:5901 user@GuestMachine

当您连接(在运行 ssh 的机器上)到端口 5901 时,它会通过隧道到达 GuestMachine 并连接到环回上的端口 5901(在 GuestMachine 上)。

--

然而,对我来说,这不起作用。OSX 内置的 VNC 挂起,OSX 上运行的 RealVNC 不正常退出。这时我们深入挖掘并获取 Wireshark 并开始查看数据包。

我不确定 OSX 是否对防火墙做了一些愚蠢的操作,或者做了其他巧妙的操作,所以我实际上在 Linux 机器上执行了 ssh。然后我完成了完整的设置。

OSX(with VNC) ---Linux(with ssh)======Server(no GUI)--Guest(qemu)

在 Linux 上,我跟踪了网络数据包,过滤 OSX IP 地址或 vnc 以查看 vnc 数据包。

VNCRFB 协议在使用 VNC Viewer 上的默认“让 VNC 服务器选择”时,用于查看 VNC 是否在安全阶段退出。我将其更改为“首选关闭”,虽然外观相同(不雅观地退出),但网络数据包更多。

仔细查看网络数据包。当服务器发送“服务器帧缓冲区参数”且客户端发送“客户端设置像素格式”(还有“客户端设置编码”和“客户端帧缓冲区更新请求”)时,双方都执行了 FIN/ACK。

查看这些数据包,发现服务器要求“真彩色标志:真”,而客户端将其设为假。返回 OSX 上的 VNC 查看器,选择“选项...”,然后选择“专家”,向下滚动到 ColorLevel,将其从“pal8”更改为“full”。

完成所有这些后,我可以使用 VNC 连接到客户机!然后我可以看到 qemu 客户机卡在 GRUB 屏幕上。卡在引导加载程序上是没有 IP 地址的原因。(但原因又是另一个问题……)

相关内容