SSH X11 转发通过 VPN 非常慢

Rob*_*lla 5 ssh openvpn x11forwarding

我正在使用 VPN(带有 OpenVPN)来保持我的家庭和工作计算机之间的访问,今天我尝试通过 ssh 转发一个仅限 GUI 的应用程序,我发现这非常慢。我之前使用过 SSH X11 转发,它确实有延迟,但是在这两个主机之间它真的很大。从单击按钮到在本地计算机上显示输出之间大约需要 20 秒。

rtt min/avg/max/mdev = 84.393/86.858/91.297/3.163 ms在这两个主机之间有延迟,SSH 连接给我大约 1.2MiB/s,我认为它应该绰绰有余:\

我正在使用-YCX,并且我已经尝试使用和不使用YC(openvpn 已经用 lzo 压缩了东西),以及不同的密码,结果相似。

我开始认为这可能是 GTK 主题,它可能真的很重或什么的。

有谁知道这是否正常,我该怎么做才能减少延迟?(3-5s 可以忍受,但 20 太多了)

kos*_*tix 8

转发当代X(不是发明网络透明度时的那个“旧”X)的问题在于字体平滑:为了正确地平滑在某些表面上呈现的文本的每个字形,X 服务器必须获取位于来自希望呈现该字形的客户端的该字形的边界框。(这是平滑算法正常工作所必需的,因为它考虑了呈现字形的上下文。)

因此,使用现代 GUI 工具包,X 服务器与其客户端之间的通信量是巨大的:您可以通过在本地 X 服务器中启用 TCP(这些天它们通常以 开头-nolisten tcp)并强制一些基于 GTK 或 Qt 的X 客户端通过 TCP 与服务器通信:

$ DISPLAY=localhost:x11 /usr/bin/that/x-app
Run Code Online (Sandbox Code Playgroud)

grep x11 </etc/services有关 X 服务器的标准端口,请参阅参考资料)。您会立即注意到即使 X 流量没有离开本地主机,客户端的行为也很缓慢:这仅仅是因为通常 X 流量是通过 Unix 域套接字传输的,该套接字基本上只是在内存中的缓冲区之间复制字节,因此具有相当低的开销,现在它遍历完整的 TCP/IP 堆栈及其所有队列和复杂的逻辑。现在考虑一下在您的情况下发送此流量时会发生什么 - 包裹在三层数据传输协议中: SSH 隧道承载 VPN 隧道承载 TCP/IP 线路承载。

至于该怎么做,我不太确定。

随着mosh比赛被淘汰,我想尝试扮演与IPQoSOpenSSH客户端的选项。

另一种方法是从另一个角度解决问题:尝试基于 VNC 访问您的应用程序。选项在这里有所不同:

  • 您可以简单地通过通过x11nvc或类似的方式导出整个显示开始。
  • 使用能够“导出”特定应用程序或窗口的软件包——Xpra以及winswitch.
  • 尝试更重量级但完整的解决方案,例如X2Go.