VMNet 网络
⚡ 要求 | macOS |
---|
VMNet 分配一个可从主机访问的"真实" IP 地址。
每种网络类型的配置步骤不同:
vzNAT
⚡ 要求 | Lima >= 0.14, macOS >= 13.0 |
---|
对于 VZ 实例,“vzNAT” 网络可以如下配置:
limactl start --vm-type=vz --network=vzNAT
networks:
- vzNAT: true
IP 地址的范围不可指定。
“vzNAT” 网络不需要 socket_vmnet
二进制文件和 sudoers
文件。
socket_vmnet
托管(192.168.105.0/24)
socket_vmnet
可用于添加另一个可从主机和其他客户机访问的客户机 IP,而无需依赖 vz。
必须按照 https://github.com/lima-vm/socket_vmnet 上提供的说明进行安装。
请注意,使用 Homebrew 安装不安全,Lima 项目不推荐。
只有为当前用户启用了无密码 sudo
时,Homebrew 安装才能与 Lima 一起工作。
limactl sudoers
命令要求将 socket_vmnet
安装到只有 root
可写的安全路径中,并且会拒绝 Homebrew 安装到用户可写位置的 socket_vmnet
。
# 从源代码以 root 身份将 socket_vmnet 安装到 /opt/socket_vmnet
# 使用 https://github.com/lima-vm/socket_vmnet 上的说明
# 这假设 Xcode Command Line Tools 已经安装
git clone https://github.com/lima-vm/socket_vmnet
cd socket_vmnet
# 将 "v1.2.0" 更改为 https://github.com/lima-vm/socket_vmnet/releases 中的实际最新版本
git checkout v1.2.0
make
sudo make PREFIX=/opt/socket_vmnet install.bin
# 设置 sudoers 文件以从 Lima 启动 socket_vmnet
limactl sudoers >etc_sudoers.d_lima
less etc_sudoers.d_lima # 验证文件看起来正确
sudo install -o root etc_sudoers.d_lima /etc/sudoers.d/lima
rm etc_sudoers.d_lima
注意
Lima v0.12 之前使用
vde_vmnet
来管理网络。vde_vmnet
不再受支持。Lima v0.14.0 及更高版本曾经也接受由
admin
用户拥有的socket_vmnet
安装。 从 v1.0.0 开始,只接受root
所有权。
网络在 $LIMA_HOME/_config/networks.yaml
中定义。如果此文件尚不存在,将使用这些默认设置创建:
默认设置
# socket_vmnet 可执行文件的路径。因为 socket_vmnet 通过 sudo 调用,所以应该
# 安装在只有 root 可以修改/替换的地方。这也意味着父目录
# 都不应该被用户可写。
#
# varRun 目录也不能被用户可写,因为它将
# 包含 socket_vmnet pid 文件。这些将通过 sudo 终止,所以替换
# pid 文件将允许杀死任意特权进程。但是 varRun
# 必须被守护进程用户可写。
#
# 路径段都不能是符号链接,这就是为什么必须是 /private/var
# 而不是 /var 等的原因。
paths:
# socketVMNet 需要 Lima >= 0.12。
socketVMNet: /opt/socket_vmnet/bin/socket_vmnet
varRun: /private/var/run/lima
sudoers: /private/etc/sudoers.d/lima
group: everyone
networks:
shared:
mode: shared
gateway: 192.168.105.1
dhcpEnd: 192.168.105.254
netmask: 255.255.255.0
bridged:
mode: bridged
interface: en0
# 桥接模式没有网关;dhcp 由外部网络管理
host:
mode: host
gateway: 192.168.106.1
dhcpEnd: 192.168.106.254
netmask: 255.255.255.0
实例然后可以引用这些网络:
limactl start --network=lima:shared
networks:
# Lima 可以自动管理在 $LIMA_HOME/_config/networks.yaml 中定义的网络的 socket_vmnet 守护进程。
# socket_vmnet 二进制文件必须安装到只有 "root" 用户可以更改的安全位置。
# - lima: shared
# # 实例的 MAC 地址;lima 将根据实例名称选择一个,
# # 所以 DHCP 分配的 ip 地址在实例重启时应该保持不变。
# macAddress: ""
# # 接口名称,默认为 "lima0"、"lima1" 等。
# interface: ""
当启动第一个引用网络的实例时,网络守护进程会自动启动,当最后一个实例停止后会自动停止。守护进程日志将存储在$LIMA_HOME/_networks
目录中。
由于启动和停止 socket_vmnet
守护进程的命令需要 root 权限,用户要么必须启用无密码 sudo
,要么将所需命令添加到 sudoers
文件中。这可以通过以下方式完成:
limactl sudoers >etc_sudoers.d_lima
less etc_sudoers.d_lima # 验证文件看起来正确
sudo install -o root etc_sudoers.d_lima /etc/sudoers.d/lima
rm etc_sudoers.d_lima
IP 地址由 macOS 的 bootpd 自动分配。 如果未分配 IP 地址,请尝试以下命令:
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/libexec/bootpd
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblock /usr/libexec/bootpd
非托管
Lima 也可以连接到由 “socket” 寻址的"非托管"网络。这意味着守护进程不会由 Lima 控制,而必须在实例之前启动。接口类型(host、shared 或 bridged)在
socket_vmnet
中配置,而不是在 lima 中。
networks:
- socket: "/var/run/socket_vmnet"