Lima 端口转发:SSH 与 GRPC 转发器怎么选?
Lima 端口转发SSH 与 GRPC 转发器怎么选【免费下载链接】limaLinux virtual machines, with a focus on running containers项目地址: https://gitcode.com/GitHub_Trending/lim/lima在 Lima 中宿主机会自动把 guest 内监听在 localhost 的端口转发出来但转发走哪条通道有两个选项SSH 转发器和 GRPC 转发器。两者都可用性能表现却随环境变化——有 VSOCK 时 SSH 更快没有 VSOCK 时 GRPC 更快且 GRPC 额外支持 UDP。选哪个取决于你的 Lima 版本、虚拟化和 guest 系统本文依据 Port Forwarding 文档 给出判断依据和切换命令。两种转发器的差异Lima 支持 SSH 和 GRPC 两种 port forwarder默认值随版本变过多次Version默认转发器v0.1.0SSHv1.0.0GRPCv1.0.1SSHv1.1.0GRPC默认值在 v1.0 改成 GRPC 后又因稳定性问题在 v1.0.1 回退为 SSHv1.1 的稳定性问题解决后再次改回 GRPC。也就是说当前版本v1.1.0 起默认走 GRPC。两者特性对比均来自 port.md维度SSH 转发器GRPC 转发器要求 Lima 1.0UDP 支持不支持支持 TCP 和 UDP无 VSOCK 环境—比 SSH 转发更快有 VSOCK 环境比 GRPC 更快—宿主机开销会额外派生一个子进程运行 SSH master无额外部署的子进程复用既有 Host - Guest GRPC 通道GRPC 转发器的工作原理是Lima 复用已有的 GRPC 通信通道来隧道化端口转发请求每个端口转发请求会创建一条 GRPC tunnel 用于传输数据。按环境做选择文档给出的选型依据可以归为三条需要 UDP 转发时只能选 GRPC。SSH 转发器不支持基于 UDP 的端口转发这是硬性限制。VSOCK 可用时选 SSH。这里特指 Lima 的 SSH over AF_VSOCK 特性要求 Lima 2.0VM 基于 VZ 且 guest 的 systemd 为 v256 或之后文档举例 Ubuntu 24.10。满足条件时 Lima 会用 AF_VSOCK 做 host/guest 通信SSH 转发比传统虚拟网络转发快很多。VSOCK 不可用时选 GRPC。文档明确 GRPC 在无 VSOCK 时比 SSH 转发快。对 SSH over AF_VSOCK 这个特性如果想显式关闭可以把.ssh.overVsock设为falselimactl start --set .ssh.overVsockfalse环境变量LIMA_SSH_OVER_VSOCK自 v2.0.2 起已废弃建议改用上面的 YAML 字段见 environment-variables.md。显式切换转发器用环境变量LIMA_SSH_PORT_FORWARDER控制默认值为false即 GRPCv1.1.0 起。显式使用 SSH 转发器LIMA_SSH_PORT_FORWARDERtrue limactl start显式使用 GRPC 转发器LIMA_SSH_PORT_FORWARDERfalse limactl start也可以在 shell 中持久化export LIMA_SSH_PORT_FORWARDERfalse用 iperf3 验证吞吐差异port.md 的 Benchmarks 一节给出了文档使用的测试方法guest 端跑iperf3 -shost 端连127.0.0.1测 TCP加-R测 TCP Reverse。你可以照这套命令在自己的实例上核对所选转发器的实际表现Host - limactl start vz VZ Guest - iperf3 -s Host - iperf3 -c 127.0.0.1 # TCP取 sender 和 receiver 的平均值 Host - iperf3 -c 127.0.0.1 -R # TCP Reverse文档给出的基准数据如下Lima 2.0.0-alpha.2、guest Ubuntu 25.04 / OpenSSH 9.9p1、host macOS 26.0.1、MacBook Pro 2024 M4 Max 128 GiB仅作文档示例参考不是任何机器上必须达到的数值By localhostSSH (w/o VSOCK)GRPCSSH (w/ VSOCK)TCP4.06 Gbits/sec5.37 Gbits/sec6.32 Gbits/secTCP Reverse3.84 Gbits/sec7.11 Gbits/sec7.47 Gbits/sec这与前面的选型结论一致有 VSOCK 的 SSH 吞吐最高无 VSOCK 时 GRPC 领先。文档也提醒这些基准结果尤其 vzNAT 的吞吐高度依赖硬件性能换机器后数字会不同。两个与转发器无关但会改变结论的边界Plain mode 下动态端口转发被禁用。开启 plain 模式limactl start --plain、limactl edit instance --plain或 YAML 中plain: true后只有static: true的portForwards规则会被转发此时选择 SSH 还是 GRPC 对动态转发没有意义详见 plain.md。按 IP 地址访问 guest 端口是另一条路径。把 guest 接到vzNAT或lima:shared网络后可以用 IP 直连端口其中vzNAT更快但仅适用于 VZ guest要求 Lima 0.14、macOS 13.0配置方式与实测吞吐见 VMNet networks。基准数据里 vzNAT 的 TCP 吞吐59.2 Gbits/sec文档示例远高于 localhost 转发的任何方式若应用允许按 IP 访问这是文档给出的更优通道。小结需要 UDPGRPCLIMA_SSH_PORT_FORWARDERfalse当前默认。Lima 2.0 VZ systemd v256 的 guest如 Ubuntu 24.10SSH 转发器配合 AF_VSOCK 吞吐最好LIMA_SSH_PORT_FORWARDERtrue。其他环境且不需要 UDP维持默认 GRPC 即可它没有 UDP 之外额外代价——SSH 转发器还多一个宿主机子进程。切换后按 iperf3 方法实测确认不要直接套用文档基准数值。【免费下载链接】limaLinux virtual machines, with a focus on running containers项目地址: https://gitcode.com/GitHub_Trending/lim/lima创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考