必须将UTM虚拟机网络模式改为桥接(Bridged),使其获得与Mac同网段的独立IP(如192.168.1.x),再配置静态IP、放行对应端口(如22或8123)并关闭防火墙拦截,局域网设备才能直接访问虚拟机服务。

要在局域网内让其他电脑访问 Mac 上 UTM 虚拟机中运行的 Web 服务、SSH 或 Home Assistant 等应用,必须绕过 UTM 默认的共享网络(Shared Network)隔离限制,通过端口转发把主机端口流量导向虚拟机——这一步不做,局域网设备连 ping 都不通,更别说访问服务。
确认虚拟机网络模式为桥接
UTM 的“共享网络”模式只允许宿主 Mac 访问虚拟机,局域网其他设备无法抵达。必须改用桥接(Bridged)模式,让虚拟机获得与 Mac 同一子网的独立 IP 地址。
打开 UTM → 右键目标虚拟机 → 选择「编辑」→ 切换到「系统」选项卡 → 找到「网络模式(Network mode)」→ 下拉选择「桥接(Bridged)」。
接着在「桥接接口(Bridged Interface)」中选对物理网卡:通常为 en0(Wi-Fi)或 en1(有线),若列表出现多个(如 en0/en9/en12),【务必逐个尝试,直到虚拟机获取到和 Mac 同网段的 IP】。例如 Mac 的 ipconfig 显示 IPv4 地址是 192.168.1.5,那么虚拟机启动后也必须拿到 192.168.1.x 范围内的地址,否则桥接失败。
获取并固定虚拟机的局域网 IP
虚拟机启动后,登录系统,执行命令查看分配到的 IP:
ip a | grep "inet " | grep -v "127.0.0.1"
找到类似 inet 192.168.1.107/24 的地址,这就是它在局域网中的真实身份。但 DHCP 分配的 IP 可能变动,下次重启就失效——所以必须设为静态。
以 Linux 虚拟机为例(如 Ubuntu/CentOS/Home Assistant OS):编辑网络配置文件,例如 /etc/netplan/01-network-manager-all.yaml(Ubuntu 22+)或 /etc/systemd/network/10-eth0.network(systemd-networkd),将地址、网关、DNS 明确写死;或者直接在 UTM 虚拟机设置里勾选「使用静态 IP」(部分 UTM 版本支持图形化配置)。关键点:【IP 必须与 Mac 处于同一子网,且不能与路由器 DHCP 池冲突,也不能和 Mac 本机重复】。
验证局域网可达性
在局域网内另一台电脑(比如 Windows 笔记本)上打开命令提示符,执行:
ping 192.168.1.107(替换为你刚确认的虚拟机 IP)
如果收到回复,说明桥接成功、路由通达、基础网络层已就绪。若超时,立刻返回上一步检查桥接网卡是否选错、IP 是否在同一网段、虚拟机防火墙是否拦截 ICMP(可临时关掉测试:sudo ufw disable 或 sudo systemctl stop firewalld)。
开放虚拟机服务端口(以 SSH 22 端口为例)
即使网络通了,Linux 默认防火墙仍会拦住所有入站连接。必须显式放行目标端口。
方法一(firewalld,CentOS/RHEL/Fedora):
sudo firewall-cmd --permanent --add-port=22/tcp
sudo firewall-cmd --reload
方法二(ufw,Ubuntu/Debian):
sudo ufw allow 22
sudo ufw enable
注意:【--permanent 参数不可省略,否则重启后规则丢失;reload 必须执行,否则不生效】。若服务监听的是其他端口(如 Home Assistant 的 8123、Web 服务的 80/443),把 22 替换为对应数字即可。
从局域网电脑直接访问虚拟机服务
现在可以用了——无需在 Mac 上做任何端口转发设置,因为虚拟机已是局域网原生成员。
在局域网其他电脑上:
• 浏览器访问 http://192.168.1.107:8123(Home Assistant)
• SSH 客户端连接 ssh user@192.168.1.107 -p 22
• curl 测试 API:curl http://192.168.1.107:8000/health
只要虚拟机服务正在运行、端口已监听(可用 ss -tuln | grep :22 验证)、防火墙已放行、IP 固定且未被占用,访问立即生效。

















