Mosh 客户端无法与客户虚拟机中的 mosh 服务器通信

Mosh 客户端无法与客户虚拟机中的 mosh 服务器通信

我在尝试连接安装在 Arch Linux 客户虚拟机(使用堆栈设置:KVM、libvirt 和 QEMU)中的 mosh-server 时遇到了麻烦。

我有一个配置为:的端口转发virsh qemu-monitor-command --hmp arch_test 'hostfwd_add ::2222-:22',因此我可以连接ssh -p 2222 arch@localhost,没有任何问题。

发出命令:mosh --server="LANG=de_DE.UTF-8 mosh-server" --ssh="ssh -p 2222" -p 60001:60001 arch@localhost在客户端(主机)上,打开连接,但我留下一条消息说:

mosh:未从 UDP 端口 60001 上的服务器收到任何信息。[退出:Ctrl-^ 。]

当然,我去了常问问题尝试理解问题:

问:“未从 UDP 端口 60003 上的服务器收到任何内容”消息是什么意思?

这意味着 mosh 能够在远程计算机上成功启动 mosh-server,但客户端无法与服务器通信。这通常意味着某种类型的防火墙阻止了客户端和服务器之间的 UDP 数据包。如果您必须在 NAT 上转发 TCP 端口 22 以进行 SSH,那么您也必须转发 UDP 端口。Mosh 将使用第一个可用的 UDP 端口,从 60001 开始到 60999 结束。如果您只打算在服务器上进行少量并发会话,那么您可以转发较小范围的端口(例如,60000 到 60010)。

netstat、netcat、socat 和 tcpdump 等工具可用于调试网络和防火墙问题。

此问题也可能是 glibc 2.22 中的一个错误造成的,该错误会影响与 protobuf 和 utempter 链接并使用激进编译器强化标志的程序。(glibc 错误跟踪器条目以及 Mosh 错误跟踪器条目。)此问题导致 mosh-server 在启动时立即出现段错误。我们相信我们已经在 Mosh 1.2.6 中解决了这个问题,但如果您发现其他问题,请报告错误。

之后,我尝试了以下操作:

  • 确保我有一个 UDP 端口转发,例如:virsh qemu-monitor-command --hmp arch_test 'hostfwd_add udp::60001-:60001'
  • 确保防火墙(如果有)打开了此端口:(firewall-cmd --zone=public --add-port=60000-60010/udp检查哪个区域处于活动状态之后);
  • 尝试nc在服务器(客户机)中使用 进行监听nc -l -u 60001,然后尝试在客户端(主机)中使用 连接到它,nc -u localhost 60001并在服务器中输入任何期望“回声”的内容,但没有回声,但按回车键发送后连接并没有断开;
  • 尝试用 扫描开放的 UDP 端口nc -v -z -u -w 5 localhost 60000-60010,但无所获,只扫描了 2222 端口的 TCP;

我不确定还能尝试什么。也许我缺少一些配置或命令,如果能得到任何指导我将不胜感激。

答案1

我在使用 Mosh 时也遇到了类似的问题。我通过将 Mosh 从我的 VPN 连接中排除来解决这个问题。就我而言,我在 VPN 客户端中添加了一条规则,以直接路由我的服务器的 IP。

答案2

由于某种我此刻尚不清楚的原因,该命令virsh qemu-monitor-command --hmp archlinux 'hostfwd_add udp::60001-:60001'按预期工作。

我将回顾一下我的步骤:

  1. 使用 Arch Linux 云镜像,导入 qcow2 镜像,
❯ virt-install  \
        --name archlinux \
        --memory 4096             \
        --vcpus=2,maxvcpus=4      \
        --cpu host                \
        --disk $HOME/VMs/$(ls | grep 'Arch-Linux'),bus=virtio,format=qcow2  \
        --network user            \
        --virt-type kvm \
      --os-variant archlinux \
      --import
  1. 然后,将端口从 2222(主机)转发到 22(客户机,SSH 默认端口),使用virsh qemu-monitor-command --hmp archlinux 'hostfwd_add ::2222-:22'
  2. 进一步,登录会话并安装moshsudo pacman -S mosh
  3. mosh然后,以同样的方式在主机上安装;
  4. 确保客人和主人有相同的语言环境,你可以查看他们的常问问题关于这个,例如,在我的情况下,主机是德语的,所以我需要在客户机中生成德语语言环境;
  5. 端口转发需要连接客户端的 UPD 端口mosh,在本文撰写之时60001,您可以通过发出命令来实现这一点❯ virsh qemu-monitor-command --hmp archlinux 'hostfwd_add udp::60001-:60001',其中“archlinux”是您的客户端的名称;
  6. 最后,通过发出与客人联系mosh --ssh="ssh -p 2222" arch@localhost,如果您在语言环境方面遇到问题,就像我一样,您可以像这样明确添加语言环境:mosh --server="LANG=de_DE.UTF-8 mosh-server" --ssh="ssh -p 2222" arch@localhost

就这样吧。

相关内容