Mac下使用OrbStack运行Ubuntu并开启局域网访问

目前 OrbStack 还不支持桥接网络(GitHub Issue #342),导致局域网内的其他设备无法直接访问虚拟机。本文通过配置静态路由和 PF 防火墙规则来解决这个问题。

操作步骤

1. 创建 Ubuntu 虚拟机

使用 OrbStack 命令行工具创建 Ubuntu 虚拟机:

1
orb create ubuntu

2. 查看虚拟机网段信息

通过 SSH 连接到虚拟机并查看网络配置:

1
ssh [username]@ubuntu@orb

执行 ifconfig 或 ip addr 命令,获取虚拟机的 IP 地址。例如:

1
eth0: 192.168.139.116

查看虚拟机IP地址

3. 配置路由器静态路由

在路由器中添加静态路由规则,将虚拟机网段的流量转发到 macOS 主机。

以爱快(iKuai)路由器为例:

  1. 进入 网络设置 → 静态路由
  2. 添加路由规则:
    • 目的地址: 192.168.139.0
    • 子网掩码: 255.255.255.0
    • 网关: 192.168.0.8 (macOS 主机的局域网 IP)

配置路由器静态路由

4. 开启 macOS IP 转发

方式一:临时配置(重启后失效)

启用 macOS 的 IP 转发功能:

1
sudo sysctl -w net.inet.ip.forwarding=1

方式二:永久配置(推荐)

  1. 创建或编辑配置文件:
1
sudo vim /etc/sysctl.conf
  1. 添加以下内容:
1
net.inet.ip.forwarding=1
  1. 保存后,配置会在系统重启后自动加载。重启系统后可以使用上述验证命令检查是否生效。

验证是否开启成功:

1
sudo sysctl net.inet.ip.forwarding

输出结果应为:

1
net.inet.ip.forwarding: 1

开启IP转发

5. 查看 macOS 网桥接口

查看 macOS 在虚拟机网段 192.168.139.0/24 上使用的网络接口:

1
ifconfig

找到对应的网桥接口,例如 bridge100。

查看网桥接口

6. 配置 PF 防火墙规则

macOS 使用 PF (Packet Filter) 作为防火墙,需要配置 NAT 规则以实现网络转发。

方式一:临时配置(重启后失效)

1
echo "nat on bridge100 from any to 192.168.139.0/24 -> (bridge100)" | sudo pfctl -f - && sudo pfctl -e

方式二:永久配置(推荐)

  1. 编辑 PF 配置文件:
1
sudo vim /etc/pf.conf
  1. 在 nat-anchor 和 rdr-anchor 规则之后添加以下内容:
1
2
3
4
5
...
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
nat on bridge100 from any to 192.168.139.0/24 -> (bridge100)
...
  1. 应用配置:
1
sudo pfctl -f /etc/pf.conf
  1. 启用 PF 规则:
1
sudo pfctl -e
  1. 验证规则是否生效:
1
sudo pfctl -s nat

验证PF规则

7. 验证局域网访问

在局域网内的其他设备上执行 ping 命令,测试是否能够访问虚拟机:

1
ping 192.168.139.116

如果收到响应,说明配置成功。

验证局域网访问

总结

通过以上步骤,我们成功实现了在 macOS 上使用 OrbStack 运行 Ubuntu 虚拟机,并通过配置静态路由和 PF 防火墙规则,使局域网内的其他设备能够直接访问虚拟机。这对于开发测试、服务部署等场景非常实用。

注意事项

  • 请根据实际情况修改 IP 地址和网络接口名称
  • 永久配置需要确保 PF 规则在系统重启后自动加载
  • 如果遇到访问问题,请检查路由器、macOS 防火墙和虚拟机防火墙的配置