端口转发

Lima 支持从客户机到主机的 localhost 端口自动转发。

端口转发类型

Lima 支持两种端口转发器:SSH 和 GRPC。

默认端口转发器如下表所示。

版本默认值
v0.1.0SSH
v1.0.0GRPC
v1.0.1SSH
v1.1.0GRPC

默认设置在 Lima v1.0 中曾经改为 GRPC,但由于稳定性原因在 v1.0.1 中回退到 SSH。 在 Lima v1.1 中默认设置再次改回 GRPC,因为稳定性问题已得到解决。

使用 SSH

基于 SSH 的端口转发以前是默认模式。

要显式使用 SSH 转发,请使用以下命令

LIMA_SSH_PORT_FORWARDER=true limactl start

优势

  • 当 VSOCK 可用时,性能优于 GRPC

注意事项

  • 不支持基于 UDP 的端口转发
  • 在主机上生成子进程来运行 SSH 主服务器。

SSH over AF_VSOCK

⚡ 要求Lima >= 2.0

如果 VM 基于 VZ 且 systemd 是 v256 或更高版本(例如 Ubuntu 24.10+),Lima 使用 AF_VSOCK 进行主机和客户机之间的通信。 使用 AF_VSOCK 时,基于 SSH 的端口转发比基于传统虚拟网络的端口转发快得多。

要禁用此功能,请将 LIMA_SSH_OVER_VSOCK 设置为 false

export LIMA_SSH_OVER_VSOCK=false

使用 GRPC

⚡ 要求Lima >= 1.0

在此模型中,lima 使用现有的 GRPC 通信(主机 <-> 客户机)来隧道传输端口转发请求。 对于每个端口转发请求,会创建一个 GRPC 隧道并用于传输数据

要启用此功能,请将 LIMA_SSH_PORT_FORWARDER 设置为 false

LIMA_SSH_PORT_FORWARDER=false limactl start

优势

  • 支持基于 TCP 和 UDP 的端口转发
  • 当 VSOCK 不可用时,与基于 SSH 的转发相比,性能更快
  • 无需额外的子进程进行端口转发

通过 IP 地址访问端口

要通过 IP 地址访问客户机的端口,请将客户机连接到 vzNATlima:shared 网络。

vzNAT 网络速度极快且易于使用,但是,vzNAT 仅适用于 VZ 客户机。

limactl start --network vzNAT
lima ip addr show lima0

更多信息请参见 配置 » 网络 » VMNet 网络

基准测试

通过 localhostSSH (无 VSOCK)GRPCSSH (有 VSOCK)
TCP4.06 Gbits/sec5.37 Gbits/sec6.32 Gbits/sec
TCP Reverse3.84 Gbits/sec7.11 Gbits/sec7.47 Gbits/sec
通过 IP 地址lima:sharedvzNAT
TCP3.46 Gbits/sec59.2 Gbits/sec
TCP Reverse2.35 Gbits/sec130 Gbits/sec

上述基准测试详情是使用以下命令获得的

Host -> limactl start vz

VZ Guest -> iperf3 -s

Host -> iperf3 -c 127.0.0.1 //TCP 基准测试("发送者"和"接收者"的平均值)
Host -> iperf3 -c 127.0.0.1 -R //TCP 反向基准测试(与上述相同)

基准测试结果,特别是 vzNAT 的吞吐量,高度依赖于硬件性能。

基准测试环境

  • Lima 版本:2.0.0-alpha.2
  • 客户机:Ubuntu 25.04
    • OpenSSH 9.9p1
    • iperf 3.18
  • 主机:macOS 26.0.1
    • OpenSSH 10.0p2
    • iperf 3.19.1 (Homebrew)
  • 硬件:MacBook Pro 2024 (M4 Max, 128 GiB)