我接手了一台可靠的 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
答案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 地址的原因。(但原因又是另一个问题……)