手机插着一张普通的联通卡,日常上网时少开一个代理 App,分流交给服务器处理。这是 KFChost 5GPN 最吸引人的地方。
符合条件的号码接入 5GPN 后,配合手机系统的加密 DNS 设置,可以让命中规则的域名经服务器转发,国内常用站点则尽量保持直连。规则维护放在服务器上,手机端的配置也就简单了不少。
这篇文章从服务开通讲起,依次完成门户绑定、服务器部署、域名解析和手机配置,再介绍多出口、特殊 App 与推送的处理思路。第一次使用,先把基础分流跑通;遇到具体需求,再增加进阶功能。
5GPN 如何实现手机分流
这套方案的关键,是让 DNS 应答决定连接去向。
DoT 是 DNS over TLS,也就是通过 TLS 加密传输 DNS 查询。它负责解析环节;后续网页和 App 的业务连接是否经过网关,要看解析结果与连接协议。
本文使用的基础脚本主要包含以下组件:
| 组件 | 作用 |
|---|---|
| dnsdist | 提供普通 DNS、DoT 和域名分流 |
| sniproxy | 根据 HTTP Host 或 TLS SNI,转发 TCP 80、443 流量 |
| quic-proxy | 尝试从 QUIC v1 握手中提取 SNI,转发 UDP 443 流量 |
| china-dns-race-proxy | 并发查询国内 DNS 上游,并在失败时回退 |
| Certbot | 申请和续期 DoT 所需的 TLS 证书 |
SNI 可以理解为 TLS 握手中用于指明目标网站的主机名。普通 HTTPS 流量进入网关后,代理读取可见的 SNI,再把连接转发给目标服务器,无须替换网站证书或解密应用内容。
这里有两个容易混淆的地方。首先,使用海外 DNS 解析,不代表业务流量也经过代理。基础脚本仅在专网来源查询命中 GFWList 的 A 记录时,返回网关 IP;其他查询通常返回目标的真实地址。其次,进入代理的业务流量会持续经过服务器,服务器的带宽、连接数和线路质量仍然影响体验。
它的便利在于减少手机端的配置和维护,让可直连的网站少绕一段代理路径。系统 DNS、蜂窝联网和 TLS 连接仍会消耗资源,实际覆盖范围也取决于 App 的连接方式。
开始前的准备
先准备好以下内容:
- 一个 KFChost 账号,以及一台支持开通 5GPN 附加服务的云服务器。
- 一个符合商家要求的联通号码。原教程使用浙江联通号码,部分后台截图则注明浙江杭州联通,购买前应按具体号码确认资格。号码归属地和手机当前所在地是两回事。
- 一个 ClouDNS 账号,用于申请免费子域名;已有自己的域名,也可以直接使用。
- 服务器的公网 IPv4、SSH 登录信息和 root 权限。
- 一台用于安装 DNS 配置、验证分流的手机。
以下命令按 Debian 或 Ubuntu 编写,初次部署建议使用干净的 Debian 12/13 或 Ubuntu 22.04/24.04。项目建议内存至少 512 MB,实际需求还与编译过程、缓存和并发连接有关。
建议先给服务器做快照。 安装脚本会修改系统 DNS、网络参数和防火墙,其中 nftables 配置会清空已有规则。已有网站、Docker、1Panel,或使用非 22 端口 SSH 的服务器,应先处理配置冲突,并确认商家控制台的救援终端可用。
购买 5GPN 附加服务
登录 KFChost,进入目标云服务器的详情页,找到 5GPN。核对目标 IP、套餐和费用后,点击 立即购买。

在服务器详情页购买 5GPN 产品
购买完成后,回到 5GPN 页面,点击 生成链接,再点击 打开门户,进入客户门户。生成的链接可能带有临时授权信息,请自行保存使用。

生成链接并打开 5GPN 客户门户
验证邮箱并绑定号码
在门户中,按提示依次完成邮箱验证、手机号绑定、专网检测和外站绑定。

5GPN 门户的邮箱验证和手机号绑定入口
绑定和检测时,关闭 Wi-Fi,使用准备绑定的那张卡的蜂窝数据。双卡手机还要确认系统的“蜂窝数据”选中了正确号码。
刚绑定后若显示 专网外,可以等待约 5 分钟再试;持续失败时,检查号码资格和服务开通状态。后台可能需要人工处理,具体开通时间按商家提示执行。
确认外站绑定
门户出现外部平台请求后,核对平台和目标服务,再点击 确认绑定。

核对外部平台请求并确认绑定
如果没有出现请求,返回 KFChost 的 5GPN 页面,重新生成链接并打开门户。确认绑定成功、专网检测通过后,再继续部署服务器。
在服务器上部署基础服务
登录服务器并启动脚本
以下命令在目标 Linux 服务器上执行。通过 SSH 登录后,先切换到 root;已是 root 的用户可跳过第一行。
sudo -i
apt-get update
apt-get install -y git curl ca-certificates
下载项目并固定到本文对应版本。下面的 /root/5gpn-tutorial 应是尚未使用的目录。
git clone https://github.com/Xiuyixx/5GPN.git /root/5gpn-tutorial
cd /root/5gpn-tutorial
git checkout --detach bb8c42c02f935d8ff54c73dc996038b950250f86
bash ./install.sh
脚本会安装依赖、编译组件、配置 DNS 和代理服务,并申请证书。服务器需要能访问 GitHub、软件源和证书服务。
如果提示 53 端口被占用,先确认占用者是系统解析器还是其他 DNS 服务,再决定是否停用。
选择域名并创建解析
脚本会提示选择 ClouDNS 免费子域名后缀,例如 abrdns.com 或 cloud-ip.cc。

按脚本提示选择 ClouDNS 免费域名后缀
记下生成的完整域名、前缀、后缀和服务器公网 IPv4,保持 SSH 窗口打开。
登录 ClouDNS,进入 Dashboard 的 DNS 托管区域,点击 创建区域。

在 ClouDNS 的 DNS 托管页面创建区域
选择 免费区域。

选择免费区域
填写脚本生成的域名前缀,选择对应的完整后缀。以后缀选择界面和完整域名为准,脚本注册提示中孤立显示的 .com 或 .cc 并不是完整后缀。
原界面可通过勾选 激活 Dynamic DNS、填写“当前 IP 地址”建立解析。如果当前页面没有这个入口,也可以创建区域后手动添加 A 记录。

填写域名前缀和自己的服务器公网 IPv4
最终应得到下面这条记录:
| 项目 | 内容 |
|---|---|
| 类型 | A |
| 主机记录 | 区域根记录,通常留空或填写 @,以页面提示为准 |
| 记录值 | 自己的服务器公网 IPv4,切勿照抄截图中的示例地址 |
| TTL | 默认值即可 |
固定 IP 的服务器不必依赖 Dynamic DNS 持续更新,关键是完整域名最终解析到正确地址。回到 SSH 窗口,按回车让脚本验证解析。
已有域名的用户,可先添加 A 记录,再在首次运行安装脚本前执行 export DOMAIN="你的完整域名",随后运行 bash ./install.sh,跳过 ClouDNS 注册提示。
完成证书申请和服务安装
脚本中的 skip 只跳过一次解析检查,后续仍需要申请证书。首次签发采用 HTTP-01 验证,要求域名解析正确,且公网能访问服务器的 TCP 80 端口。[1]
如果云平台设有安全组,也要允许证书签发和续期所需的 HTTP-01 验证流量。本机防火墙的临时放行不能代替云安全组设置。
安装成功后,终端会显示 DoT 地址、代理端口和 iOS 描述文件链接。

部署完成后的 DoT 地址和 iOS 描述文件入口
几个地址的用途要分清:
| 输出内容 | 用途 |
|---|---|
tls://完整域名:853 | DoT 服务地址 |
| TCP 80、443 和 UDP 443 | 接收进入网关的业务连接 |
http://完整域名:8111/ios-dot.mobileconfig | 下载 iOS DNS 描述文件 |
该版本预设专网来源为 172.22.0.0/16,业务代理入口按此范围限制访问,实际应与商家分配和服务器观察到的来源一致。手机配置 DNS 时,按下面对应系统的步骤填写即可。
配置手机并验证分流
Android 私人 DNS
在系统设置中搜索“私人 DNS”或“私有 DNS”,选择“私人 DNS 提供商主机名”,填写脚本生成的完整域名,例如:
your-name.abrdns.com
只填域名,不加 tls://、:853、斜杠或 IP 地址。
Android 私人 DNS 通常同时影响 Wi-Fi 和蜂窝网络。在其他网络下遇到解析失败,可以先改回“自动”排查。
iOS DNS 描述文件
用 Safari 打开脚本输出的描述文件链接,或扫描终端二维码。允许下载后,进入“设置 → 通用 → VPN 与设备管理”,找到已下载的描述文件,查看内容并完成安装。
该版本生成的是 DoT DNS 设置,不需要安装根证书。下载地址采用 HTTP,安装前应确认描述文件内容只有预期的 DNS 设置。
描述文件通过 OnDemandRules 控制启用条件:使用蜂窝数据时启用指定 DoT,切到 Wi-Fi 时不应用这份 DNS 设置。OnDemandRules 位于 DNSSettings 同一层级。[2]
这份配置只判断网络接口,不识别运营商或具体 SIM 卡。 双卡切到另一张卡后,它仍可能启用同一台 DoT 服务器。原理方案中使用 URLStringProbe 探测专网可达性的设计,需要另行配置探测端点,基础脚本并未包含。
检查服务和实际访问路径
先在服务器上查看运行状态:
cd /root/5gpn-tutorial
bash ./install.sh --status
然后关闭手机 Wi-Fi,使用已绑定号码的蜂窝数据,依次检查:
- 门户的专网检测是否通过。
- 国内常用网站是否正常打开。
- 一个确定命中代理规则的站点是否可用,出口是否符合预期。
- 常用 App 的登录、图片、视频、消息和通知是否正常。
- 切回 Wi-Fi 后,原有网络是否仍可使用。
IP 查询网站只能说明这一次请求的出口。它本身是否命中规则,也会影响结果,因此还要按实际使用的 App 验证。
常用 App 的兼容性与进阶扩展
基础部署完成后,先用一段时间,确认哪些 App 需要额外处理。这套方案依赖系统 DNS 和连接中的主机名,硬编码 IP、自带解析器、特殊端口或不携带可识别 SNI 的连接,都可能需要其他路径。
QUIC 和加密主机名
纯 TCP 的 SNI 网关通常需要限制 UDP 443,促使客户端回退到 TCP。本文的脚本另带 QUIC 代理,只支持从 QUIC v1 Initial 中提取 SNI;其他版本或使用 ECH 隐藏目标主机名的连接,可能无法正确识别。[3]
该版本还会对所有 AAAA 查询返回无答案,整体偏向 IPv4。原理稿提出的“仅对代理域名清空 AAAA、HTTPS/SVCB”属于另一套策略,基础脚本没有完整实现。因此,直接照搬“封 UDP 443”或清空 DNS 记录的配置,可能改变已有行为。
多落地和全局 VPN
希望在日本、美国或住宅出口之间切换,可以扩展为以下路径:
手机 → 5GPN 网关 → 选定的落地节点 → 目标站点
网关负责接入和分流,落地节点决定最终出口。这需要单独部署落地服务、转发与切换逻辑。原理稿以 nginx stream 演示,基础脚本使用 sniproxy,两套配置需要分别维护。
对于直接连接 IP 的 App,可另外部署 IKEv2 等 VPN,使用手机系统自带的 VPN 功能兜底。服务端可以按来源网段区分专网流量和 VPN 地址池,让 VPN 流量进入独立的路由表。
这部分还涉及认证、证书、转发、出口路由及 IPv6 处理。原理稿中的路由命令依赖已建好的 VPN 和 WireGuard 接口,不能单独复制就完成部署。
Telegram 独立 SOCKS5
Telegram 的部分连接直接访问 IP 和端口,可以使用 App 内置的 SOCKS5 设置作为补充:在服务器上部署独立 SOCKS5,再在 Telegram 中填写地址、端口和认证信息。
它的出口可以固定在 KFChost,也可以另做策略路由跟随落地切换。固定出口更容易维护,其他落地出现故障时,也有机会保留 Telegram 这条管理通道。
SOCKS5 服务应设置访问控制和认证。如果只允许专网或 VPN 来源,切到普通 Wi-Fi 后就需要另一条可达路径;“代理开关一直开着”还取决于当前网络能否访问代理入口。
苹果联网检测和推送
captive.apple.com 等联网检测域名,以及原本可正常直连的 Apple 服务,优先保持可用的直连路径,避免被导向没有对应监听的网关端口。
APNs 设备连接通常使用 TCP 5223,必要时可回退 TCP 443。[4] 如果把推送域名解析到网关,却只处理 443,推送可能出问题。确需转发 5223 时,还要配置对应后端、访问限制和长连接超时,并验证实际连接能否被识别。
其他特殊 TCP 端口、NTP 等 UDP 流量也应逐项处理。开放端口本身不能代替完整的转发配置。
WhatsApp 等特殊连接
WhatsApp 的部分连接未必提供可识别的 TLS SNI,单靠域名分流可能无法覆盖消息、媒体和通话。原理稿提出的 ED、WA 前缀识别,可以作为特定连接的排查思路,但不能据此保证所有功能可用。
遇到这类 App,先确认连接使用的协议和目标;需要稳定使用时,保留一套已经验证可用的 VPN 作为兜底更省事。
原帖测速记录
原帖记录的测试路径为“手机 5G → KFChost 日本 → 不同落地 → Cloudflare”,每个落地采样 30 次。下面保留首字节时间 TTFB,单位均为毫秒:
| 落地 | TTFB 中位数 | TTFB 平均值 | p95 | 最大值 |
|---|---|---|---|---|
| KFChost 日本 | 251 | 278 | 412 | 437 |
| 美国西雅图 | 591 | 639 | 762 | 1168 |
| 美国洛杉矶住宅出口 | 698 | 1202 | 1751 | 3811 |
在这组样本中,日本出口的响应时间较短;洛杉矶住宅出口的平均值明显高于中位数,说明部分请求等待较久。选择落地时,除了出口属性,还要看它到目标站点的实际质量。
原帖也比较了国际漫游卡和有线链路。保留国内流量直连,可以减少漫游出口带来的绕行;具体能快多少,取决于运营商路由、落地和目标站点。
以上是原帖的历史记录。少量采样中的零失败不能代表长期零丢包,购买前后最好用自己的手机、地点和常用站点重复比较。
常见问题与恢复方法
专网检测一直显示专网外
依次检查号码资格、绑定状态、服务是否开通,以及当前蜂窝数据使用的号码。关闭 Wi-Fi 后重试;持续失败时,让商家检查号码接入状态。
域名解析或证书申请失败
核对完整域名、A 记录和服务器公网 IPv4。解析刚创建时可以稍后再试,也可以在服务器上查询:
dig +short A 你的完整域名 @1.1.1.1
结果应与服务器公网 IPv4 一致。若还有错误的 AAAA 记录,也要清理或修正。解析正确后,继续检查 TCP 80、安全组、本机防火墙和端口占用。
描述文件链接打不开或服务异常
描述文件下载依赖 TCP 8111,先检查该端口和下载服务:
systemctl --no-pager status proxy-gateway-ios-profile
需要重新显示二维码和链接,可运行:
cd /root/5gpn-tutorial
bash ./install.sh -ios
如果手机安装后仍无法使用,确认 DoT 的 TCP 853 可达、证书有效,并检查基础服务日志:
journalctl -u dnsdist -u sniproxy -u quic-proxy -u china-dns-race-proxy --no-pager -n 100
浏览器能用但某个 App 不能用
先判断是否遗漏了域名规则。确认需要代理的域名后,可逐行加入 /etc/dnsdist/gfwlist-extra-local.txt,再更新规则:
cd /root/5gpn-tutorial
bash ./install.sh --update-rules
如果连接直接访问 IP,或涉及 ECH、特殊协议、特殊端口,继续添加域名未必有效,应按前面的兼容性思路处理。
配置后无法联网
先恢复手机 DNS:Android 把私人 DNS 改回“自动”;iOS 在“VPN 与设备管理”中移除这份 DNS 描述文件,再重新连接网络。
服务器如需卸载,可使用项目提供的 --uninstall。卸载不会完整恢复安装前的系统 DNS、防火墙和网络参数,需要彻底回退时使用事先保留的快照或备份。