[教程]realm 开源一键中转脚本,简单中转教程,单端转发与双端隧道详解,让Alice免费机用上家宽出口
看到 Alice 的免费机不仅自带家宽出口,还提供故障切换策略,对此非常感兴趣。可惜运气不佳,只能一直搁置
### 全功能一键脚本项目开源地址:https://github.com/zywe03/realm-xwPF
### 废话少说,本文不深入讨论敏感话题,敏感话题或遇到不理解的地方欢迎加群讨论
单纯的闲聊,集思广益,分享有趣好玩的想法,欢迎加入[tg开源画饼群](https://t.me/zywe_chat)
本文取名定义
落地机=出口机
客户端即本地(手机/电脑)使用的连接软件
- Alice免费机(目的使用家宽出口):落地机IP:端口22
- 国内中转机(连接Alice和本地电信连接它都很流畅):中转机IP:端口
- 家宽出口信息: 2a14:67c0:116::1,端口:30000
# 教程一
1. 最常用的单端转发(拿ssh协议举例,ssh协议可举一反三换成其他协议)
大家的服务器肯定都有ssh协议,一般使用对应IP:端口输入密码即可连接
正常没有使用转发直接ssh连接链路示意图

Q:既然可以直接连接使用,为什么还需要中转机呢?
有些出口机的网络质量并不理想,可能存在绕路、丢包等问题,导致使用体验很卡顿。而在链路中增加一台网络质量较好的中转机,就能明显改善这种情况。另外,如果落地机的 IP 被封,通过未被封锁的中转机依然可以顺利连接。至于两台服务器之间的链路质量,可以使用脚本中的 7. 中转网络链路测试 来进行分析和判断。
Q:那直接找一台网络质量好的机器不就行了吗?
如果你能找到一台网络质量好、又能满足所有需求的机器,确实可以直接用,不需要中转。但通常这种机器要么价格偏高,要么存在功能限制(例如无法解锁 Netflix 等流媒体或IP质量不佳)。在这种情况下,组合使用一台出口机和一台中转机,就能既控制成本,又满足功能需求。
### 手把手操作流程
我本地电信连接Alice免费机,使用客户端连接

能用但是很卡顿
在中转机上执行指令安装脚本
选择2. 转发配置管理2. 添加新配置[1] 中转服务器
输入端口2222(一会客户端连接的端口)
出口入口都回车默认(脚本里不懂是什么的时候就回车默认)
出口服务器的IP地址或域名:落地机IP
出口服务器的监听端口(多端口使用,逗号分隔)::22
[1] 默认传输(不懂就默认)
保存生效后来到客户端,注意此时IP换成中转机IP,端口换成刚刚输入的2222

剩下就像正常连接使用一样,只是换了IP和端口便可流程使用
单端转发完整链路示意图

# 教程二
2. 双端隧道(Alice免费机用上家宽出口方法)
隧道:隧道是一种将数据包从一个网络移动到另一个网络的方法。隧道通过封装运作:将一个数据包包装在另一个数据包中,它还可以在网络之间建立高效和安全的连接,从而使用本不受支持的网络协议,并在某些情况下允许用户绕过防火墙。
背景:Alice的家宽出口是socks5协议,这种协议明文比较不安全几乎露头就封,此时就需要在原协议的基础上再对数据包封装一层(隧道)
在Alice机安装脚本,使用教程1.单端转发,连接家宽出口
在Alice机选择[2] 服务端(落地)服务器 (双端Realm架构)
等待中转服务器连接的端口:10000
转发本地目标IP地址:50000(上面单端转发的端口)
[5] TLS+WebSocket (自签证书),一路回车
回到国内中转机按照教程1.单端转发,注意此时是根据Alice机[2] 服务端(落地)服务器 (双端Realm架构)输入的信息,进行中转连接
我们在客户端就输入国内中转机IP:端口20000,连接
链路示意图

如果没有国内中转机也是可以的,realm的ws/tls/wss协议是通用的应用层隧道,也就是说双端架构的加密方或解密方有一方可以不使用realm,但要记得双方加密方式,伪装域名等等必须一致
回到Alice的场景,如果客户端软件支持这些的加密协议只需要填入对应的信息,完成加密传出即可,比如这样

以上是模拟本地服务器业务,如果引入第三台远端服务器业务在上面(Alice也可以这样省一步)
就不需要再多一条本地循环
而是直接在这里输入远方服务器IP,业务端口即可,完成解密并转发
好了,这就是关于单端转发和双端隧道基本教程,其中的ssh协议,客户端软件请自行举一反三
# 总结
如果落地机协议足够安全,那么单端透明转发是理想选择
如果落地机协议不够安全,那么把不安全协议的数据包,再封装进另一种协议的数据流中传输(隧道)是个不错的选择
关于负载均衡,MPTCP,Proxy Protocol,端口流量狗等等使用方法玩法讲解敬请期待
看到 Alice 的免费机不仅自带家宽出口,还提供故障切换策略,对此非常感兴趣。可惜运气不佳,只能一直搁置
### 全功能一键脚本项目开源地址:https://github.com/zywe03/realm-xwPF
### 废话少说,本文不深入讨论敏感话题,敏感话题或遇到不理解的地方欢迎加群讨论
单纯的闲聊,集思广益,分享有趣好玩的想法,欢迎加入[tg开源画饼群](https://t.me/zywe_chat)
本文取名定义
落地机=出口机
客户端即本地(手机/电脑)使用的连接软件
- Alice免费机(目的使用家宽出口):落地机IP:端口22
- 国内中转机(连接Alice和本地电信连接它都很流畅):中转机IP:端口
- 家宽出口信息: 2a14:67c0:116::1,端口:30000
# 教程一
1. 最常用的单端转发(拿ssh协议举例,ssh协议可举一反三换成其他协议)
大家的服务器肯定都有ssh协议,一般使用对应IP:端口输入密码即可连接
正常没有使用转发直接ssh连接链路示意图

Q:既然可以直接连接使用,为什么还需要中转机呢?
有些出口机的网络质量并不理想,可能存在绕路、丢包等问题,导致使用体验很卡顿。而在链路中增加一台网络质量较好的中转机,就能明显改善这种情况。另外,如果落地机的 IP 被封,通过未被封锁的中转机依然可以顺利连接。至于两台服务器之间的链路质量,可以使用脚本中的 7. 中转网络链路测试 来进行分析和判断。
Q:那直接找一台网络质量好的机器不就行了吗?
如果你能找到一台网络质量好、又能满足所有需求的机器,确实可以直接用,不需要中转。但通常这种机器要么价格偏高,要么存在功能限制(例如无法解锁 Netflix 等流媒体或IP质量不佳)。在这种情况下,组合使用一台出口机和一台中转机,就能既控制成本,又满足功能需求。
### 手把手操作流程
我本地电信连接Alice免费机,使用客户端连接

能用但是很卡顿
在中转机上执行指令安装脚本
选择2. 转发配置管理2. 添加新配置[1] 中转服务器
输入端口2222(一会客户端连接的端口)
出口入口都回车默认(脚本里不懂是什么的时候就回车默认)
出口服务器的IP地址或域名:落地机IP
出口服务器的监听端口(多端口使用,逗号分隔)::22
[1] 默认传输(不懂就默认)
保存生效后来到客户端,注意此时IP换成中转机IP,端口换成刚刚输入的2222

剩下就像正常连接使用一样,只是换了IP和端口便可流程使用
单端转发完整链路示意图

# 教程二
2. 双端隧道(Alice免费机用上家宽出口方法)
隧道:隧道是一种将数据包从一个网络移动到另一个网络的方法。隧道通过封装运作:将一个数据包包装在另一个数据包中,它还可以在网络之间建立高效和安全的连接,从而使用本不受支持的网络协议,并在某些情况下允许用户绕过防火墙。
背景:Alice的家宽出口是socks5协议,这种协议明文比较不安全几乎露头就封,此时就需要在原协议的基础上再对数据包封装一层(隧道)
在Alice机安装脚本,使用教程1.单端转发,连接家宽出口
中转服务器:
• 中转: :::50000 → :: → 2a14:67c0:116::1:30000
安全: 默认传输 | 备注: 家宽出口
在Alice机选择[2] 服务端(落地)服务器 (双端Realm架构)
等待中转服务器连接的端口:10000
转发本地目标IP地址:50000(上面单端转发的端口)
[5] TLS+WebSocket (自签证书),一路回车
落地服务器 (双端Realm架构):
• 落地: :::10000 → 2a14:67c0:xxx:xxx::x:50000
安全: wss 自签证书 (host: www.tesla.com) (路径: /ws) (SNI: www.tesla.com) | 备注: 隧道
回到国内中转机按照教程1.单端转发,注意此时是根据Alice机[2] 服务端(落地)服务器 (双端Realm架构)输入的信息,进行中转连接
中转服务器:
• 中转: :::20000 → :: → 2a14:67c0:xxx:xxx::x:10000
安全: wss 自签证书 (host: www.tesla.com) (路径: /ws) (SNI: www.tesla.com) | 备注: 隧道
我们在客户端就输入国内中转机IP:端口20000,连接
链路示意图

如果没有国内中转机也是可以的,realm的ws/tls/wss协议是通用的应用层隧道,也就是说双端架构的加密方或解密方有一方可以不使用realm,但要记得双方加密方式,伪装域名等等必须一致
回到Alice的场景,如果客户端软件支持这些的加密协议只需要填入对应的信息,完成加密传出即可,比如这样

以上是模拟本地服务器业务,如果引入第三台远端服务器业务在上面(Alice也可以这样省一步)
就不需要再多一条本地循环
中转服务器:
• 中转: :::50000 → :: → 2a14:67c0:116::1:30000
安全: 默认传输 | 备注: 家宽出口
而是直接在这里输入远方服务器IP,业务端口即可,完成解密并转发
内循环本地转发目标或者远端服务器业务:
本地业务输入: IPv4: 127.0.0.1 | IPv6: ::1 | 双栈: localhost
远端业务输入:对应服务器IP
转发目标IP地址(默认:127.0.0.1):
好了,这就是关于单端转发和双端隧道基本教程,其中的ssh协议,客户端软件请自行举一反三
# 总结
如果落地机协议足够安全,那么单端透明转发是理想选择
如果落地机协议不够安全,那么把不安全协议的数据包,再封装进另一种协议的数据流中传输(隧道)是个不错的选择
关于负载均衡,MPTCP,Proxy Protocol,端口流量狗等等使用方法玩法讲解敬请期待
GitHub
GitHub - zywe03/realm-xwPF: Realm 全功能一键中转脚本,终端可视化界面构建网络转发服务.Realm: Full-featured one-click network relay — configure and manage…
Realm 全功能一键中转脚本,终端可视化界面构建网络转发服务.Realm: Full-featured one-click network relay — configure and manage forwarding rules from an interactive TUI. - zywe03/realm-xwPF
❤2👍1🔥1
[开源]端口流量狗脚本-端口级流量统计、速率限制与流量配额控制,支持TG,微信通知,一只轻巧的“守护犬”,时刻守护
# 端口流量狗 (Port Traffic Dog)
## 开源地址:https://github.com/zywe03/realm-xwPF
> 一只轻巧的“守护犬”,随时守护你的端口流量,让流量监控和管理更简单。
🔔 端口流量狗**是一款轻量级 Linux 端口流量监控与管理工具,基于 `nftables` 和 `tc`,支持精准的**端口级**流量统计、速率限制与流量配额控制。
## 脚本界面预览
**主界面

## 适用场景
### 🌐 网络服务监控
- 中转、Web 服务器、代理服务、游戏服务器等
- 为没有流量管理的程序附加轻量级的监控与控制能力
### 💰 流量计费管理
- VPS 流量控制**:避免超额流量导致额外费用
- **成本管理**:通过速率与流量限制来降低运营成本
## ✨ 核心功能
### 流量监控
- **精确统计**:基于 `nftables` 的端口级流量监控
- **双向支持**:支持单向(出站)和双向(入站+出站)流量统计
- **端口范围**:支持单端口与端口段(如 100-200)
- **实时统计**:实时累计流量数据
- **持久化**:即使服务器异常关机或重启,无感数据仍能保持正常工作
### 流量控制
- **速率限制**:基于 `tc` 的端口速率控制(支持 Mbps/Gbps)
- **突发速率处理: 动态计算 burst 值,既能应对瞬间速率高峰,又不会过度放宽限制
- 流量配额**:基于 `nftables quota` 的月度流量配额(支持 MB/GB/TB)
- **自动重置**:端口可配置每月流量自动重置(默认每月 1 日,支持 1–31 日自定义)
- **超限阻断**:流量超限后自动阻断,支持手动重置
### 数据与记录
- **一键导出/导入**:完整迁移配置与数据
- **历史记录**:保留流量重置历史
- **日志轮转**:自动日志清理和轮转
### 通知系统
- **独立模块分隔: 同时启用两个,各自独立的间隔设置,任意禁用其中一个,不影响另一个
- Telegram 通知**:支持机器人推送
- **webhook通知(企业wx 群): 支持机器人推送
- **状态汇报**:可按间隔(1 分钟–24 小时)推送状态
- **扩展支持**:预留邮箱接口(敬请期待)
### 端口备注管理
- **多用户场景**:为不同端口(用户)添加备注,方便管理
## 🚀 一键安装
> 端口流量狗脚本属于完整独立脚本,可单独安装使用(快捷键:dog)
### 方式一:直接安装
### 方式二:使用加速源
### 交流群[tg开源闲聊群](https://t.me/zywe_chat)
# 端口流量狗 (Port Traffic Dog)
## 开源地址:https://github.com/zywe03/realm-xwPF
> 一只轻巧的“守护犬”,随时守护你的端口流量,让流量监控和管理更简单。
🔔 端口流量狗**是一款轻量级 Linux 端口流量监控与管理工具,基于 `nftables` 和 `tc`,支持精准的**端口级**流量统计、速率限制与流量配额控制。
## 脚本界面预览
**主界面

## 适用场景
### 🌐 网络服务监控
- 中转、Web 服务器、代理服务、游戏服务器等
- 为没有流量管理的程序附加轻量级的监控与控制能力
### 💰 流量计费管理
- VPS 流量控制**:避免超额流量导致额外费用
- **成本管理**:通过速率与流量限制来降低运营成本
## ✨ 核心功能
### 流量监控
- **精确统计**:基于 `nftables` 的端口级流量监控
- **双向支持**:支持单向(出站)和双向(入站+出站)流量统计
- **端口范围**:支持单端口与端口段(如 100-200)
- **实时统计**:实时累计流量数据
- **持久化**:即使服务器异常关机或重启,无感数据仍能保持正常工作
### 流量控制
- **速率限制**:基于 `tc` 的端口速率控制(支持 Mbps/Gbps)
- **突发速率处理: 动态计算 burst 值,既能应对瞬间速率高峰,又不会过度放宽限制
- 流量配额**:基于 `nftables quota` 的月度流量配额(支持 MB/GB/TB)
- **自动重置**:端口可配置每月流量自动重置(默认每月 1 日,支持 1–31 日自定义)
- **超限阻断**:流量超限后自动阻断,支持手动重置
### 数据与记录
- **一键导出/导入**:完整迁移配置与数据
- **历史记录**:保留流量重置历史
- **日志轮转**:自动日志清理和轮转
### 通知系统
- **独立模块分隔: 同时启用两个,各自独立的间隔设置,任意禁用其中一个,不影响另一个
- Telegram 通知**:支持机器人推送
- **webhook通知(企业wx 群): 支持机器人推送
- **状态汇报**:可按间隔(1 分钟–24 小时)推送状态
- **扩展支持**:预留邮箱接口(敬请期待)
### 端口备注管理
- **多用户场景**:为不同端口(用户)添加备注,方便管理
## 🚀 一键安装
> 端口流量狗脚本属于完整独立脚本,可单独安装使用(快捷键:dog)
### 方式一:直接安装
wget -O port-traffic-dog.sh https://raw.githubusercontent.com/zywe03/realm-xwPF/main/port-traffic-dog.sh && chmod +x port-traffic-dog.sh && ./port-traffic-dog.sh
### 方式二:使用加速源
wget -O port-traffic-dog.sh https://ghfast.top/https://raw.githubusercontent.com/zywe03/realm-xwPF/main/port-traffic-dog.sh && chmod +x port-traffic-dog.sh && ./port-traffic-dog.sh
### 交流群[tg开源闲聊群](https://t.me/zywe_chat)
GitHub
GitHub - zywe03/realm-xwPF: Realm 全功能一键中转脚本,终端可视化界面构建网络转发服务.Realm: Full-featured one-click network relay — configure and manage…
Realm 全功能一键中转脚本,终端可视化界面构建网络转发服务.Realm: Full-featured one-click network relay — configure and manage forwarding rules from an interactive TUI. - zywe03/realm-xwPF
[闲聊笔记]简单讲述应用层端口复用原理和流程以及常见工作模式——负载均衡与协议识别分流
周末水一篇,简单闲聊应用层的端口复用原理与流程。不涉及内核层的 SO_REUSEPORT 具体代码实现,只为简单懂原理懂流程,主要讨论应用层的做法与常见工作模式
网络转发工具常可用于实现“端口复用”——也就是让同一个监听端口把流量转发到本地的多个后端端口或进程上.端口重定向(port redirection)通常是利用本地回环地址 127.0.0.1 把外来连接转发到本地其它端口或进程;端口复用(port multiplexing/reuse)在应用层上更多是利用 socket/转发逻辑和连接映射策略来把同一监听端口的请求分发到不同后端
假设配置
> 虽然 listen 和 remote 都写了 10000 端口,但 listen 描述的是本地监听的地址(即接收端),而 remote 描述的是转发目标(即目的端)。因此两者并不冲突。
listen 固定的是源(本地)监听地址与端口,变化的是要转发到的目的 IP 与端口。比如 127.0.0.1:20001、127.0.0.1:20002 这些在本地不同端口的服务,就可以通过转发工具实现对同一个外部监听端口的复用。到这里,构成了端口复用的基础。要让它真正跑起来,常见有两种模式
1) 负载均衡式端口复用(Load-balancing)
轮询(roundrobin):可按权重分配
顺序分配 (from top to bottom):每次请求依次从上到下
其他策略(如最少连接、随机分配)也可,特点:不关心协议内容,仅按策略把新连接/请求分配到后端。实现上通常是接收外部连接后按策略选择后端并建立到后端的连接或把连接代理到后端
2) 协议分流式端口复用(Protocol-based routing)——常用
在转发器前加入一个首包识别分流器(first-packet classifier),对连接的首包进行协议识别,然后根据匹配规则将流量分发到对应后端,避免“先尝试再命中”的低效逻辑
示例配置:
工作流程简述:
1. 接收连接后抓取首包(或首 N 字节),等待不超过 first_pkt_timeout。
2. 用 rules 中的正则或特征匹配首包,匹配到即把该连接分发到对应后端。
3. 若未命中规则,使用 default_remote
4. 也可以定义把某类流量丢弃的规则,例如:
协议分流式端口复用通常更灵活且更高效,关键在于数据包识别分流器的准确性。实现方式也有多种:直接使用支持识别的转发工具、在主程序前挂 hook、或者用本地端口代理中转来实现分流器逻辑,而不一定把所有字段写进主程序配置
本文涉及协议特征为简单写法,仅方便讲述,闲聊式讲解,着重说明思路与常见做法,细节实现会随具体工具和语言而不同
> 在传输层,通常用五元组(SrcIP、SrcPort、DstIP、DstPort、Proto)来唯一标识一条网络流(flow);若两个连接的五元组完全相同,它们在协议层面上就是同一条流,会造成冲突或被视为重复。但在应用层实现端口复用时,常见做法是一个监听 socket 接收到外部连接后,再在应用逻辑中把该连接(或该流)映射/代理到不同的后端目标——此时后端连接的五元组与原始入站连接不同,因此不会与后端已有连接冲突。注意:绑定(bind)同一本地 IP:port 的行为还会受操作系统 socket 规则限制,这些属于内核层面的问题,不应与应用层的转发逻辑混淆
欢迎补充修正,讨论分享,交流群[tg开源闲聊群](https://t.me/zywe_chat)
周末水一篇,简单闲聊应用层的端口复用原理与流程。不涉及内核层的 SO_REUSEPORT 具体代码实现,只为简单懂原理懂流程,主要讨论应用层的做法与常见工作模式
网络转发工具常可用于实现“端口复用”——也就是让同一个监听端口把流量转发到本地的多个后端端口或进程上.端口重定向(port redirection)通常是利用本地回环地址 127.0.0.1 把外来连接转发到本地其它端口或进程;端口复用(port multiplexing/reuse)在应用层上更多是利用 socket/转发逻辑和连接映射策略来把同一监听端口的请求分发到不同后端
假设配置
listen = "0.0.0.0:10000"
remote = "1.1.1.1:10000"
extra_remotes = ["127.0.0.1:20001", "127.0.0.1:20002"]
> 虽然 listen 和 remote 都写了 10000 端口,但 listen 描述的是本地监听的地址(即接收端),而 remote 描述的是转发目标(即目的端)。因此两者并不冲突。
listen 固定的是源(本地)监听地址与端口,变化的是要转发到的目的 IP 与端口。比如 127.0.0.1:20001、127.0.0.1:20002 这些在本地不同端口的服务,就可以通过转发工具实现对同一个外部监听端口的复用。到这里,构成了端口复用的基础。要让它真正跑起来,常见有两种模式
1) 负载均衡式端口复用(Load-balancing)
[[endpoints]]
listen = "0.0.0.0:10000"
remote = "127.0.0.1:20000"
extra_remotes = ["127.0.0.1:20001", "127.0.0.1:20002"]
balance = "roundrobin: 4, 2, 1"
轮询(roundrobin):可按权重分配
顺序分配 (from top to bottom):每次请求依次从上到下
其他策略(如最少连接、随机分配)也可,特点:不关心协议内容,仅按策略把新连接/请求分配到后端。实现上通常是接收外部连接后按策略选择后端并建立到后端的连接或把连接代理到后端
2) 协议分流式端口复用(Protocol-based routing)——常用
在转发器前加入一个首包识别分流器(first-packet classifier),对连接的首包进行协议识别,然后根据匹配规则将流量分发到对应后端,避免“先尝试再命中”的低效逻辑
示例配置:
first_pkt_len = 64 # 首包抓取字节数
first_pkt_timeout = 3000 # 首包抓取超时时间
default_remote = "127.0.0.1:22" # 默认后端(可选)
[[endpoints]]
listen = "0.0.0.0:10000"
remote = "127.0.0.1:22"
extra_remotes = ["127.0.0.1:80", "127.0.0.1:443"]
rules = [
{ name = "ssh", regex = "^SSH-", remote = "127.0.0.1:22" },
{ name = "http", regex = "^GET |^POST |^HTTP/", remote = "127.0.0.1:80" },
{ name = "tls", regex = "^\x16\x03", remote = "127.0.0.1:443" }
]
工作流程简述:
1. 接收连接后抓取首包(或首 N 字节),等待不超过 first_pkt_timeout。
2. 用 rules 中的正则或特征匹配首包,匹配到即把该连接分发到对应后端。
3. 若未命中规则,使用 default_remote
4. 也可以定义把某类流量丢弃的规则,例如:
rules = [
{ name = "http", regex = "^GET |^POST |^HTTP/", remote = -1 }
]
协议分流式端口复用通常更灵活且更高效,关键在于数据包识别分流器的准确性。实现方式也有多种:直接使用支持识别的转发工具、在主程序前挂 hook、或者用本地端口代理中转来实现分流器逻辑,而不一定把所有字段写进主程序配置
本文涉及协议特征为简单写法,仅方便讲述,闲聊式讲解,着重说明思路与常见做法,细节实现会随具体工具和语言而不同
> 在传输层,通常用五元组(SrcIP、SrcPort、DstIP、DstPort、Proto)来唯一标识一条网络流(flow);若两个连接的五元组完全相同,它们在协议层面上就是同一条流,会造成冲突或被视为重复。但在应用层实现端口复用时,常见做法是一个监听 socket 接收到外部连接后,再在应用逻辑中把该连接(或该流)映射/代理到不同的后端目标——此时后端连接的五元组与原始入站连接不同,因此不会与后端已有连接冲突。注意:绑定(bind)同一本地 IP:port 的行为还会受操作系统 socket 规则限制,这些属于内核层面的问题,不应与应用层的转发逻辑混淆
欢迎补充修正,讨论分享,交流群[tg开源闲聊群](https://t.me/zywe_chat)
Telegram
zywe 科技学术闲聊群
“Stay hungry. Stay foolish.” —— Whole Earth Catalog
单纯的闲聊(吹牛),集思广益,分享有趣好玩的想法
🚫 禁止讨论政治、NSFW、引战、嘲讽等行为
Github : https://github.com/zywe03
个人主页: https://zywe.de
单纯的闲聊(吹牛),集思广益,分享有趣好玩的想法
🚫 禁止讨论政治、NSFW、引战、嘲讽等行为
Github : https://github.com/zywe03
个人主页: https://zywe.de
[教程]VMware虚拟机中运行macOS,Windows环境黑苹果双系统,可登录苹果ID
本文仅用于技术研究与学习交流,不构成任何形式的安装建议或利益诱导,作者不对教程内容的准确性、完整性或可行性作出保证,也不为读者的任何操作结果负责。继续阅读或使用本教程,即视为你已充分理解并接受上述条款
欢迎评论区讨论,补充,个人开源,科技,闲聊大杂烩群https://t.me/zywe_chat
最终效果

介绍
https://github.com/corpnewt/gibMacOS(下载最新苹果系统用于打包,非.iso镜像)
https://github.com/DrDonk/OC4VM(解锁vm macos和虚拟机配套模板和解锁驱动)
本教程的CPU为intel,amd的不完全适用需要做一些调整,请自行AI
0.下载工具
下载VMware Workstation Pro(VM虚拟机被收购后,仅需要注册登录完全免费下载使用
https://support.broadcom.com/group/ecx/productfiles?subFamily=VMware Workstation Pro&displayGroup=VMware Workstation Pro 25H2 for Windows&release=25H2&os=&servicePk=&language=EN&freeDownloads=true)
下载DrDonk/OC4VM Releases
下载corpnewt/gibMacOS code > Download ZIP
管理员运行gibMacOS.bat下载系统(在本地或工作虚拟机)
1.获取.iso镜像
不放心可当工作机,用于打包官方.iso的介质
网上随便找/找有苹果系统的朋友打包/
关键词(找免费的)
macos sonoma 14.8 iso
项目文档changelog.html写支持并测试了以下系统
系统版本 代号 备注
macOS 11 Big Sur 已测试
macOS 12 Monterey 已测试
macOS 13 Ventura 此版本开始增加 Intel e1000e 虚拟网卡兼容性
macOS 14 Sonoma 已测试
macOS 15 Sequoia 已测试
macOS 16 Tahoe 警告:运行缓慢
DrDonk/OC4VM使用
0
将vmware\intel目录下的文件全部移动到新建的虚拟机目录,打开VM > Open a Virtual Machine >选择虚拟机目录macos.vmx
1
虚拟机配置 CD/DVD (SATA) > 勾选Connect at power on > 勾选use ISO image file 选择下载的.iso
2
运行虚拟机> 初始化苹果系统(不登录苹果ID不连接网络创建电脑账号)> 安装macOS Sonoma> 访达> 搜索/Volumes/OPENCORE/OC4VM/iso/darwin.iso > 运行darwin.iso >"Install VMware Tools" (安装 VMware Tools)
⚠️ 关键提示 安装程序提示"macOS Sonoma ...**阻止vm系统扩展...",必须手动允许它,打开系统设置 (System Settings) > 隐私与安全性 (Privacy & Security) > "允许" (Allow) 按钮,然后再次输入密码重启,重启后再执行Install VMware Tools
如果是工作机能启动iOS系统就可以见下文的工作机打包.iso部分,下面是伪装用于登录ID
PS:如果启动后还是没有网络 使用DrDonk/OC4VM的macguest.exe 程序用于纠正 OS 版本,本机管理员模式终端彻底重启VM网络部分,输入
停止
net stop "VMware NAT Service"
net stop "VMware DHCP Service"
net stop "VMware Authorization Service"
启动
net start "VMware Authorization Service"
net start "VMware DHCP Service"
net start "VMware NAT Service"
3.生成唯一序列号
PowerShell 窗口 > 切换到tools\host目录 > 在终端输入.\macserial.exe -m Macmini8,1 -n 1(使用macserial.exe)
.\macserial.exe -m Macmini8,1 -n 1
Warning: arc4random is not available!
C07LD0ZBJYVX | C07337102GUKXPG8C
获得Serial 和 MLB
彻底关闭VM虚拟机用记事本/vs code打开macos.vmx,做以下修改
Default_Model = "VMware20,1"
# 1. 禁用默认模板:在 board-id 前面添加一个下划线 '_'
_board-id = "VMM-x86_64"
Apple_Model = "Mac mini 2018"
# 2. 启用 Mac mini 的 board-id:移除下划线 '_'
board-id = "Mac-7BA5B2DFE22DDD8C"
# 3. 启用 Mac mini 的型号:移除下划线 '_'
hw.model = "Macmini8,1"
# 4. 替换为你自己的生成Serial序列号:移除下划线 '_' 并填入你的值
serialNumber = "C07LD0ZBJYVX"
# 5. 替换为你自己的 MLB:移除下划线 '_' 并填入你的值
efi.nvram.var.MLB = "C07337102GUKXPG8C"
# 6. 根据ethernet0.generatedAddress = "00:0c:29:06:8e:45",将00:0c:29:06:8e:29的全部:变%,最前面加%
_efi.nvram.var.ROM = "%00%0c%29%06%8e%45"
现在就可以打开VM虚拟机
工作机打包.iso
(如果在本地下载)使用vm共享文件夹
右键虚拟机> settings > 顶部options >Shared Folders Enabled > 勾选Always enabled > add 选择要共享文件夹
(可选:"访达""设置...""边栏"勾选显示出来)
虚拟机"访达"搜索/Volumes** 即可看到共享文件夹,复制到桌面,双击**InstallAssistant.pkg** 文件,运行完成后,Install macOS Sonoma.app 文件会放置在你的 /Applications (应用程序) 文件夹
打开苹果虚拟机“终端”(这里以打包Sonoma14.8.2举例,如果是其他系统可根据指令询问AI改命名即可)
创建空白磁盘映像 (16GB)(根据打包系统的大小决定):
hdiutil create -o /tmp/Sonoma14.8.2 -size 16000m -volname Sonoma -layout SPUD -fs HFS+J
挂载空白映像:
hdiutil attach /tmp/Sonoma14.8.2.dmg -noverify -mountpoint /Volumes/Sonoma
运行 createinstallmedia(打包)
sudo /Applications/Install\ macOS\ Sonoma.app/Contents/Resources/createinstallmedia --volume /Volumes/Sonoma --nointeraction
转换为 .iso 格式: (等待上一步提示 "Install media now available" 后再执行)
# 1. 卸载磁盘
hdiutil detach "/Volumes/Install macOS Sonoma"
# 2. 转换格式
hdiutil convert /tmp/Sonoma14.8.2.dmg -format UDTO -o ~/Desktop/Sonoma14.8.2.cdr
# 3. 重命名为 .iso
mv ~/Desktop/Sonoma14.8.2.cdr ~/Desktop/Sonoma14.8.2.iso
将打包好的.iso拖回到共享文件夹
一样的安装过程,CD/DVD (SATA)选择此.iso即可
本文仅用于技术研究与学习交流,不构成任何形式的安装建议或利益诱导,作者不对教程内容的准确性、完整性或可行性作出保证,也不为读者的任何操作结果负责。继续阅读或使用本教程,即视为你已充分理解并接受上述条款
本文仅用于技术研究与学习交流,不构成任何形式的安装建议或利益诱导,作者不对教程内容的准确性、完整性或可行性作出保证,也不为读者的任何操作结果负责。继续阅读或使用本教程,即视为你已充分理解并接受上述条款
欢迎评论区讨论,补充,个人开源,科技,闲聊大杂烩群https://t.me/zywe_chat
最终效果

介绍
https://github.com/corpnewt/gibMacOS(下载最新苹果系统用于打包,非.iso镜像)
https://github.com/DrDonk/OC4VM(解锁vm macos和虚拟机配套模板和解锁驱动)
本教程的CPU为intel,amd的不完全适用需要做一些调整,请自行AI
0.下载工具
下载VMware Workstation Pro(VM虚拟机被收购后,仅需要注册登录完全免费下载使用
https://support.broadcom.com/group/ecx/productfiles?subFamily=VMware Workstation Pro&displayGroup=VMware Workstation Pro 25H2 for Windows&release=25H2&os=&servicePk=&language=EN&freeDownloads=true)
下载DrDonk/OC4VM Releases
下载corpnewt/gibMacOS code > Download ZIP
管理员运行gibMacOS.bat下载系统(在本地或工作虚拟机)
1.获取.iso镜像
不放心可当工作机,用于打包官方.iso的介质
网上随便找/找有苹果系统的朋友打包/
关键词(找免费的)
macos sonoma 14.8 iso
项目文档changelog.html写支持并测试了以下系统
系统版本 代号 备注
macOS 11 Big Sur 已测试
macOS 12 Monterey 已测试
macOS 13 Ventura 此版本开始增加 Intel e1000e 虚拟网卡兼容性
macOS 14 Sonoma 已测试
macOS 15 Sequoia 已测试
macOS 16 Tahoe 警告:运行缓慢
DrDonk/OC4VM使用
0
将vmware\intel目录下的文件全部移动到新建的虚拟机目录,打开VM > Open a Virtual Machine >选择虚拟机目录macos.vmx
1
虚拟机配置 CD/DVD (SATA) > 勾选Connect at power on > 勾选use ISO image file 选择下载的.iso
2
运行虚拟机> 初始化苹果系统(不登录苹果ID不连接网络创建电脑账号)> 安装macOS Sonoma> 访达> 搜索/Volumes/OPENCORE/OC4VM/iso/darwin.iso > 运行darwin.iso >"Install VMware Tools" (安装 VMware Tools)
⚠️ 关键提示 安装程序提示"macOS Sonoma ...**阻止vm系统扩展...",必须手动允许它,打开系统设置 (System Settings) > 隐私与安全性 (Privacy & Security) > "允许" (Allow) 按钮,然后再次输入密码重启,重启后再执行Install VMware Tools
如果是工作机能启动iOS系统就可以见下文的工作机打包.iso部分,下面是伪装用于登录ID
PS:如果启动后还是没有网络 使用DrDonk/OC4VM的macguest.exe 程序用于纠正 OS 版本,本机管理员模式终端彻底重启VM网络部分,输入
停止
net stop "VMware NAT Service"
net stop "VMware DHCP Service"
net stop "VMware Authorization Service"
启动
net start "VMware Authorization Service"
net start "VMware DHCP Service"
net start "VMware NAT Service"
3.生成唯一序列号
PowerShell 窗口 > 切换到tools\host目录 > 在终端输入.\macserial.exe -m Macmini8,1 -n 1(使用macserial.exe)
.\macserial.exe -m Macmini8,1 -n 1
Warning: arc4random is not available!
C07LD0ZBJYVX | C07337102GUKXPG8C
获得Serial 和 MLB
彻底关闭VM虚拟机用记事本/vs code打开macos.vmx,做以下修改
Default_Model = "VMware20,1"
# 1. 禁用默认模板:在 board-id 前面添加一个下划线 '_'
_board-id = "VMM-x86_64"
Apple_Model = "Mac mini 2018"
# 2. 启用 Mac mini 的 board-id:移除下划线 '_'
board-id = "Mac-7BA5B2DFE22DDD8C"
# 3. 启用 Mac mini 的型号:移除下划线 '_'
hw.model = "Macmini8,1"
# 4. 替换为你自己的生成Serial序列号:移除下划线 '_' 并填入你的值
serialNumber = "C07LD0ZBJYVX"
# 5. 替换为你自己的 MLB:移除下划线 '_' 并填入你的值
efi.nvram.var.MLB = "C07337102GUKXPG8C"
# 6. 根据ethernet0.generatedAddress = "00:0c:29:06:8e:45",将00:0c:29:06:8e:29的全部:变%,最前面加%
_efi.nvram.var.ROM = "%00%0c%29%06%8e%45"
现在就可以打开VM虚拟机
工作机打包.iso
(如果在本地下载)使用vm共享文件夹
右键虚拟机> settings > 顶部options >Shared Folders Enabled > 勾选Always enabled > add 选择要共享文件夹
(可选:"访达""设置...""边栏"勾选显示出来)
虚拟机"访达"搜索/Volumes** 即可看到共享文件夹,复制到桌面,双击**InstallAssistant.pkg** 文件,运行完成后,Install macOS Sonoma.app 文件会放置在你的 /Applications (应用程序) 文件夹
打开苹果虚拟机“终端”(这里以打包Sonoma14.8.2举例,如果是其他系统可根据指令询问AI改命名即可)
创建空白磁盘映像 (16GB)(根据打包系统的大小决定):
hdiutil create -o /tmp/Sonoma14.8.2 -size 16000m -volname Sonoma -layout SPUD -fs HFS+J
挂载空白映像:
hdiutil attach /tmp/Sonoma14.8.2.dmg -noverify -mountpoint /Volumes/Sonoma
运行 createinstallmedia(打包)
sudo /Applications/Install\ macOS\ Sonoma.app/Contents/Resources/createinstallmedia --volume /Volumes/Sonoma --nointeraction
转换为 .iso 格式: (等待上一步提示 "Install media now available" 后再执行)
# 1. 卸载磁盘
hdiutil detach "/Volumes/Install macOS Sonoma"
# 2. 转换格式
hdiutil convert /tmp/Sonoma14.8.2.dmg -format UDTO -o ~/Desktop/Sonoma14.8.2.cdr
# 3. 重命名为 .iso
mv ~/Desktop/Sonoma14.8.2.cdr ~/Desktop/Sonoma14.8.2.iso
将打包好的.iso拖回到共享文件夹
一样的安装过程,CD/DVD (SATA)选择此.iso即可
本文仅用于技术研究与学习交流,不构成任何形式的安装建议或利益诱导,作者不对教程内容的准确性、完整性或可行性作出保证,也不为读者的任何操作结果负责。继续阅读或使用本教程,即视为你已充分理解并接受上述条款
Telegram
zywe 科技学术闲聊群
“Stay hungry. Stay foolish.” —— Whole Earth Catalog
单纯的闲聊(吹牛),集思广益,分享有趣好玩的想法
🚫 禁止讨论政治、NSFW、引战、嘲讽等行为
Github : https://github.com/zywe03
个人主页: https://zywe.de
单纯的闲聊(吹牛),集思广益,分享有趣好玩的想法
🚫 禁止讨论政治、NSFW、引战、嘲讽等行为
Github : https://github.com/zywe03
个人主页: https://zywe.de
👍2
使用端口流量狗拼车限制总流量需要双向统计流量, 可能需要注意
双向模式在代理 / 中转时,应该是总流量 ≈ 出站 x2,入站 ≈ 出站(对等),因为代理流量主要用于下载(看视频、下文件)。这意味着 VPS 去访问 YouTube 服务器下载视频数据,VPS 从 YouTube 拉取的量 ≈ VPS 发给用户的量,脚本能精确统计端口级用户侧流量,但是流量是从代理到 YouTube 服务器,目标端口是系统随机分配的临时端口,不是 统计端口,所以被忽略
具体表现
脚本统计
端口:52220-52230 | 总流量:4.23GB | 上行 (入站): 309.09MB | 下行 (出站):3.92GB | [双向 500gb][1 月 1 日重置]
服务器厂商后台 (网卡级全端口) 看
已用流量:7.9GB
接受流量(GB):3.94GB
发送流量(GB):3.92GB
1. 客户端 → 代理 **(能统计)
2. 代理 → 目标服务器 (无法统计,因为端口号变了)
所以 3. 双向流量统计 (relay/proxy 场景近似单向统计):总流量 = 入站流量 + 出站流量
但这并不是双向流量统计不准或者错误, 而是 relay/proxy 场景下的特性导致
# 20251206 流量狗脚本更新 1.2.4
1. add:relay/proxy 场景双向统计模式 | ** 入站 = In + Out | 总 = In + 2×Out
回滚1.2.3
双向模式在代理 / 中转时,应该是总流量 ≈ 出站 x2,入站 ≈ 出站(对等),因为代理流量主要用于下载(看视频、下文件)。这意味着 VPS 去访问 YouTube 服务器下载视频数据,VPS 从 YouTube 拉取的量 ≈ VPS 发给用户的量,脚本能精确统计端口级用户侧流量,但是流量是从代理到 YouTube 服务器,目标端口是系统随机分配的临时端口,不是 统计端口,所以被忽略
具体表现
脚本统计
端口:52220-52230 | 总流量:4.23GB | 上行 (入站): 309.09MB | 下行 (出站):3.92GB | [双向 500gb][1 月 1 日重置]
服务器厂商后台 (网卡级全端口) 看
已用流量:7.9GB
接受流量(GB):3.94GB
发送流量(GB):3.92GB
1. 客户端 → 代理 **(能统计)
2. 代理 → 目标服务器 (无法统计,因为端口号变了)
所以 3. 双向流量统计 (relay/proxy 场景近似单向统计):总流量 = 入站流量 + 出站流量
但这并不是双向流量统计不准或者错误, 而是 relay/proxy 场景下的特性导致
# 20251206 流量狗脚本更新 1.2.4
1. add:relay/proxy 场景双向统计模式 | ** 入站 = In + Out | 总 = In + 2×Out
回滚1.2.3
👍1
脚本有这个功能, 支持自行手写配置导入,方便自行维护规则配置,添加多个不同配置
脚本 & realm 使用教程
---
Q: 不清楚 realm 配置怎么办?
A: 先在脚本创建一个转发规则
随后点击脚本的 2. 转发配置管理,1. 一键导出 / 导入配置,1. 导出配置包 (包含查看配置) , 即可在上方看见当前配置, 类似这样
复制下来, 重点关注
粘贴到本机或其他编辑器里的.json 文件, 随后自行编辑 (或问 AI 批量填写) 保存, 将此.json 文件上传到服务器
选择脚本的 2. 转发配置管理,1. 一键导出 / 导入配置,3. 识别 realm 配置文件并导入 根据提示输入文件路径即可
一键识别并导入:自写 realm 的规则配置文件, 脚本可识别并导入脚本 & realm 使用教程
---
Q: 不清楚 realm 配置怎么办?
A: 先在脚本创建一个转发规则
随后点击脚本的 2. 转发配置管理,1. 一键导出 / 导入配置,1. 导出配置包 (包含查看配置) , 即可在上方看见当前配置, 类似这样
{
"network": {
"no_tcp": false,
"use_udp": true
},
"endpoints": [
{
"listen": ":::52225",
"remote": " 落地 IP:22222"
}
]
}复制下来, 重点关注
{
"endpoints": [
{
"listen": ":::52225",
"remote": " 落地 IP1:22222"
},
{
"listen": ":::52226",
"remote": " 落地 IP2:33333"
},
]
}粘贴到本机或其他编辑器里的.json 文件, 随后自行编辑 (或问 AI 批量填写) 保存, 将此.json 文件上传到服务器
选择脚本的 2. 转发配置管理,1. 一键导出 / 导入配置,3. 识别 realm 配置文件并导入 根据提示输入文件路径即可
❤1
20260211 更新公告 v2.2.1
1. 多发行版支持
适配 Debian / Ubuntu / Alpine / CentOS / RHEL / Rocky / AlmaLinux / Fedora 系列,自动识别包管理器(apt-get / apk / yum / dnf)与 init 系统(systemd / OpenRC)
> 若未预装 bash 自行安装, 已测试:Alpine Linux 3.23.3
2. 项目模块化
之前只是写得爽,但是 AI 时代一个文件几千行明显不太友好
## 文件结构
> 脚本一直是按需索取,其他功能点击对应菜单才会下载
### 使用 realm 转发核心安装(安装即有)
> 相应的离线安装步骤稍有变化,详见 README
3. 移除 nc 外部依赖
主程序连接性测试改用 bash 内置 /dev/tcp 调用 Linux TCP socket,无需额外安装 nc(故障转移模块仍使用 nc)
1. 多发行版支持
适配 Debian / Ubuntu / Alpine / CentOS / RHEL / Rocky / AlmaLinux / Fedora 系列,自动识别包管理器(apt-get / apk / yum / dnf)与 init 系统(systemd / OpenRC)
> 若未预装 bash 自行安装, 已测试:Alpine Linux 3.23.3
2. 项目模块化
## 文件结构
> 脚本一直是按需索取,其他功能点击对应菜单才会下载
### 使用 realm 转发核心安装(安装即有)
/usr/local/bin/
├── xwPF.sh # 管理脚本入口
├── lib/ # 模块目录
│ ├── core.sh # 核心工具(系统检测 / 依赖 / 网络 / 验证)
│ ├── rules.sh # 规则管理(CRUD/ 负载均衡 / 权重)
│ ├── server.sh # 服务器配置(中转 / 出口 /MPTCP)
│ ├── realm.sh # Realm 安装 / 配置生成 / 服务管理
│ └── ui.sh # 交互菜单 / 状态显示 / 卸载
└── pf # 快捷启动命令
> 相应的离线安装步骤稍有变化,详见 README
3. 移除 nc 外部依赖
主程序连接性测试改用 bash 内置 /dev/tcp 调用 Linux TCP socket,无需额外安装 nc(故障转移模块仍使用 nc)
🥰1