首页/进阶自建节点/高级玩法:腾讯 CCN 内网 po0 + RFC Host
LEVEL 03 · 自主控制

高级玩法:腾讯 CCN 内网 po0 + RFC Host

使用 po0 广州或华东 BGP 作为国内入口,通过内网互通连接 po0 与 RFC Host 的香港、日本、美国和新加坡出口,并领取 po0 常驻优惠码。

普通自建节点由客户端直接连接海外 VPS,体验容易受到运营商国际出口和海外服务器公网入口影响。po0 的典型玩法是把入口与出口拆开:

客户端 → po0 广州/华东 BGP 入口 → 内网互通链路 → 香港/日本/美国出口 → Internet
  • po0 国内入口只运行 nftables,负责 DNAT、SNAT 和 MSS 调整,不安装 sing-box、Xray 或 Docker。
  • 代理协议运行在最终出口机,客户端只把原节点的服务器地址和端口替换为 po0 入口。
  • 入口与出口分别承担不同职责:入口改善国内接入,出口决定最终公网地区、解锁能力和线路质量。

这类链路常被称为“腾讯 CCN 内网玩法”。按照 po0 Wiki 的手动配置,nftables 的 DNAT 目标填写出口机 IP,SNAT 地址填写 po0 的内网互通 IP;不要自行把出口地址改成一个未经服务商确认的私网 IP。

开始前建议先读完私人小机场:多个节点的搭建,确认你已经理解出口协议、客户端节点和 Sub-Store 的关系。

先选对入口和出口

po0 国内入口

需要国内 BGP 入口时,在下面两类产品中选择:

  • 腾讯云广州 BGP:优先面向华南用户,香港方向通常值得先测试。
  • 腾讯云华东 BGP:优先面向华东、华北和东北用户,日本方向通常值得先测试。

不要只看最低延迟。购买前应在 po0 的服务状态Looking Glass中分别测试平峰与晚高峰;如果两边表现接近,优先选择离主要用户更近、流量档位更合适的入口。

po0 常驻优惠码

适用套餐优惠码优惠内容
全产品常规款常驻九折优惠券9 折循环优惠
全产品年付PO0年付常驻88折优惠券88 折循环优惠

常规付款周期使用九折券,年付套餐优先使用 88 折券;下单时复制对应优惠码并在结算页确认折扣已经生效。

查看 po0 广州与华东 BGP 入口

香港出口

按用途和预算考虑:

  1. po0 腾讯云 T1 香港:与 po0 产品体系配合,适合希望减少选型复杂度的用户。
  2. RFC Host HK-T1:价格通常低于 HK-CO;国内接入已经由 po0 BGP 入口承担时,往往更符合成本目标。
  3. RFC Host HK-CO:预算充足,且还希望保留优化公网直连能力时再选。

po0 T1 香港属于国际优化产品,官方明确提示“不包含国内优化”。在本文拓扑里,国内接入由广州或华东 BGP 入口承担,不要把 T1 香港单独当作国内优化入口。

查看 po0 香港出口

查看 RFC Host HK-T1 / HK-CO

日本出口

优先考虑 RFC Host JP-T1;JP-CO 当前可能显示为 JP2-CO,价格更高,适合同时需要日本优化公网直连的场景。华东 BGP 到日本方向通常值得优先测试,但最终仍以购买时的 Looking Glass 和产品互通说明为准。

查看 RFC Host JP-T1 / JP2-CO

美国出口

美国出口选择 po0 腾讯云 T1 美国。该产品同样是国际优化链路,不包含国内优化;本文由广州或华东 BGP 提供客户端入口。

RFC Host 美国节点不通本文所用的 po0 内网互通链路,不要购买 RFC Host US 后照抄这套配置。

查看 po0 美国出口

新加坡出口

新加坡采用两层转发:

客户端 → po0 广州/华东 → RFC Host HK → RFC Host SG → Internet

RFC Host 香港在这一条线路中是中转机,RFC Host 新加坡才运行最终协议。多一层就多一段故障点和流量消耗,建议先跑通香港单层链路,再扩展新加坡。

购买前必须确认的限制

po0 官方 Wiki 明确列出了国内 BGP 产品的使用条件:

  • 广州 BGP、华东 BGP 需要实名认证
  • 禁止用于回国访问
  • 默认双向封禁 TCP/UDP:804438080844380001080
  • 套餐标注的是单向流量,多出口和多层中转应分别估算各段消耗。
  • T1 香港、美国是国际优化产品,不包含国内优化

本文使用 3000130004,避开默认封禁端口。下单前还应向 po0 与 RFC Host 确认:所选具体产品能否内网互通、出口 IP 应填写哪个地址、po0 内网 IP 是什么,以及相关带宽和流量如何计费。产品名称相同不代表任意实例都自动互通。

建议先记录这些信息:

角色需要记录的地址服务端口客户端入口端口
po0 广州/华东入口公网 IP、内网 IP不运行协议30001~30004
香港出口出口机 IP3000130001
日本出口出口机 IP3000230002
美国出口po0 US 地址3000330003
香港中转RFC Host HK 地址3000430004
新加坡出口RFC Host SG 地址30004经香港中转

第一步:先把最终出口部署好

不要一开始就修改 po0。先在香港、日本、美国或新加坡最终出口机部署协议,并用客户端直连出口机验证可用。出口本身不通时,nftables 无法替你修复协议、密码或防火墙错误。

推荐 Shadowsocks 2022

主线协议使用 2022-blake3-aes-128-gcm

  • 同时支持 TCP 和 UDP;
  • sing-box、Mihomo 等现代核心支持较好;
  • 相比 VLESS Encryption,更容易覆盖手机、电脑和软路由客户端。

以下操作只在最终出口机执行。

安装 sing-box

Debian 使用 sing-box 官方 APT 源:

apt update
apt install -y curl ca-certificates gnupg
mkdir -p /etc/apt/keyrings

curl -fsSL https://sing-box.app/gpg.key \
  -o /etc/apt/keyrings/sagernet.asc
chmod a+r /etc/apt/keyrings/sagernet.asc

cat >/etc/apt/sources.list.d/sagernet.sources <<'EOF'
Types: deb
URIs: https://deb.sagernet.org/
Suites: *
Components: *
Enabled: yes
Signed-By: /etc/apt/keyrings/sagernet.asc
EOF

apt update
apt install -y sing-box

生成密钥并配置出口

AES-128-GCM 需要 16 字节 PSK:

openssl rand -base64 16

把输出替换到 REPLACE_WITH_BASE64_KEY

{
  "log": {
    "level": "info",
    "timestamp": true
  },
  "inbounds": [
    {
      "type": "shadowsocks",
      "tag": "ss2022-in",
      "listen": "0.0.0.0",
      "listen_port": 30001,
      "method": "2022-blake3-aes-128-gcm",
      "password": "REPLACE_WITH_BASE64_KEY"
    }
  ]
}

香港示例监听 30001;日本、美国和新加坡可分别改为 300023000330004。每个出口使用独立密钥,泄露时只需轮换单个节点。

install -d -m 755 /etc/sing-box
nano /etc/sing-box/config.json

sing-box check -c /etc/sing-box/config.json
systemctl enable --now sing-box
systemctl restart sing-box
systemctl status sing-box --no-pager
ss -lnptu | grep ':30001'

此时先用出口机地址直连测试。确认协议、TCP/UDP、防火墙和系统时间全部正常后,再配置 po0 转发。

第二步:确认 po0 公网和内网地址

登录 po0 广州或华东入口:

官方接入准备以干净的 Debian 12 为常见环境;如果当前系统已经稳定可控,并不要求为了本文强制重装。重装会中断网络,必须先确认控制台或救援方式可用。

ip -br address
ip route

需要区分两个地址:

  • po0 公网 IP:客户端最终连接的地址。
  • po0 内网 IP:nftables snat 使用的地址,用于让去往出口的流量进入内网互通链路。

官方手动教程用 RELAY_LAN_IP 表示后者。它必须来自 po0 控制台或本机真实网卡信息,不能照抄示例,也不能填成 po0 公网 IP。

先从 po0 测试出口机:

ip route get 出口机IP
ping -c 4 出口机IP
nc -vz 出口机IP 出口协议端口

部分目标可能禁 Ping,最终应以 TCPing、nc 和实际协议测试为准。若出口端口从 po0 完全不可达,先检查产品互通、出口服务和防火墙,不要急着添加 NAT。

第三步:在 po0 入口配置 nftables

入口只运行 nftables。下面采用 po0 Wiki 的手动维护思路:

  1. PREROUTING 把入口端口 DNAT 到出口机 IP 和端口。
  2. POSTROUTING 把源地址 SNAT 为 po0 内网 IP,使流量走内网互通。
  3. FORWARD 将 TCP SYN 的 MSS 设置为 1452,减少 MTU 不匹配造成的卡顿或断流。

安装并开启 IPv4 转发

apt update
apt install -y nftables

cat >/etc/sysctl.d/99-po0-forward.conf <<'EOF'
net.ipv4.ip_forward=1
EOF

sysctl --system
sysctl net.ipv4.ip_forward

返回 net.ipv4.ip_forward = 1 才继续。

先备份现有规则

nft list ruleset >"/root/nftables-before-po0-$(date +%F-%H%M%S).conf"
cp -a /etc/nftables.conf "/root/nftables.conf.$(date +%F-%H%M%S).bak"

下面是一份完整 /etc/nftables.conf,其中包含 flush ruleset,加载时会替换现有 nftables 规则。如果机器上还有 SSH 防火墙、Docker 或其他业务规则,必须先合并配置,不能直接覆盖。

单出口完整配置

假设香港出口机 IP 为 203.0.113.10、协议端口为 30001,po0 内网 IP 为 10.100.0.10

#!/usr/sbin/nft -f

define DEST_IP = 203.0.113.10
define DEST_PORT_OUT = 30001
define RELAY_PORT_IN = 30001
define RELAY_LAN_IP = 10.100.0.10

flush ruleset

table ip nat {
  chain prerouting {
    type nat hook prerouting priority dstnat; policy accept;

    meta l4proto { tcp, udp } th dport $RELAY_PORT_IN \
      dnat to $DEST_IP:$DEST_PORT_OUT
  }

  chain postrouting {
    type nat hook postrouting priority srcnat; policy accept;

    ip daddr $DEST_IP meta l4proto { tcp, udp } th dport $DEST_PORT_OUT \
      snat to $RELAY_LAN_IP
  }
}

table ip filter {
  chain forward {
    type filter hook forward priority filter; policy accept;

    ip daddr $DEST_IP tcp flags syn tcp option maxseg size set 1452
  }
}

将四个 define 值替换为真实信息,保存到 /etc/nftables.conf,然后先检查、再应用:

nft -c -f /etc/nftables.conf
nft -f /etc/nftables.conf
systemctl enable nftables
systemctl restart nftables
nft list ruleset

nft -c 没有输出通常表示语法通过。客户端保持协议、密码和加密方式不变,只把服务器替换成:

po0公网IP:30001

同一入口连接多个出口

香港、日本、美国分别使用独立入口端口:

#!/usr/sbin/nft -f

define RELAY_LAN_IP = 10.100.0.10

define PORT_IN_HK = 30001
define DEST_IP_HK = 203.0.113.10
define DEST_PORT_HK = 30001

define PORT_IN_JP = 30002
define DEST_IP_JP = 198.51.100.20
define DEST_PORT_JP = 30002

define PORT_IN_US = 30003
define DEST_IP_US = 192.0.2.30
define DEST_PORT_US = 30003

flush ruleset

table ip nat {
  chain prerouting {
    type nat hook prerouting priority dstnat; policy accept;

    meta l4proto { tcp, udp } th dport $PORT_IN_HK dnat to $DEST_IP_HK:$DEST_PORT_HK
    meta l4proto { tcp, udp } th dport $PORT_IN_JP dnat to $DEST_IP_JP:$DEST_PORT_JP
    meta l4proto { tcp, udp } th dport $PORT_IN_US dnat to $DEST_IP_US:$DEST_PORT_US
  }

  chain postrouting {
    type nat hook postrouting priority srcnat; policy accept;

    ip daddr $DEST_IP_HK meta l4proto { tcp, udp } th dport $DEST_PORT_HK snat to $RELAY_LAN_IP
    ip daddr $DEST_IP_JP meta l4proto { tcp, udp } th dport $DEST_PORT_JP snat to $RELAY_LAN_IP
    ip daddr $DEST_IP_US meta l4proto { tcp, udp } th dport $DEST_PORT_US snat to $RELAY_LAN_IP
  }
}

table ip filter {
  chain forward {
    type filter hook forward priority filter; policy accept;

    ip daddr { $DEST_IP_HK, $DEST_IP_JP, $DEST_IP_US } \
      tcp flags syn tcp option maxseg size set 1452
  }
}

文档示例地址属于保留测试网段,必须全部替换。每次修改都执行:

nft -c -f /etc/nftables.conf && nft -f /etc/nftables.conf

新加坡:通过 RFC Host 香港二次中转

新加坡路径需要两台机器各配置一段:

po0公网IP:30004
  → RFC Host HK:30004
  → RFC Host SG:30004
  1. 先在 RFC Host SG 部署 Shadowsocks 2022,监听 30004,直连测试通过。
  2. 在 RFC Host HK 配置 30004 → RFC Host SG:30004,先用 HK 地址测试中转。
  3. 最后在 po0 增加 30004 → RFC Host HK:30004,客户端再改成 po0 地址。

RFC Host HK 到 SG 的规则同样采用 DNAT + SNAT,但 SNAT 地址必须使用 RFC Host 为这段互联分配、并确认可用的源地址,不能照抄 po0 的 RELAY_LAN_IP。两段分别验证,比一次写完更容易发现是 po0→HK 还是 HK→SG 不通。

可选:使用 po0 Wiki 收录的菜单脚本

po0 Wiki 还收录了社区 nftables 菜单脚本,适合通过菜单初始化、添加和删除转发:

curl -L http://script.gu.ax:2052/nftables.sh -o nft.sh
chmod +x nft.sh
less nft.sh
./nft.sh

这是社区脚本且下载地址为 HTTP,运行前应先阅读脚本并备份现有规则。首次使用选择初始化,再填写 po0 监听端口、出口机 IP 和出口端口。脚本模式与手写 /etc/nftables.conf 二选一,不要混用两套规则管理方式。

可选:开启来源白名单

如果购买了 po0 的“鸡险”防火墙服务,可以让入口只允许白名单中的来源 /24 网段访问。家庭宽带公网 IP 变化时,可使用 po0 Wiki 提供的 po0fw 方法自动更新白名单。

  • Token 在 po0 控制台机器详情的防火墙卡片中获取。
  • 每台机器 Token 不同,属于加白凭证,不能公开。
  • 白名单最多 5 个网段;家庭软路由可使用固定槽位,移动设备使用自动轮换。

具体安装命令应以 po0 Wiki 的防火墙白名单自动加白教程为准,避免复制过期 Token 接口。

VLESS + Encryption 作为兼容性较窄的备选

VLESS Encryption 可以作为进阶方案,但很多客户端和订阅工具仍不完整支持。使用前必须同时确认:

  1. 服务端核心明确支持 VLESS Encryption,而不是普通 VLESS 的 encryption=none
  2. 手机、桌面、软路由上的客户端内核支持完全相同的 Encryption 参数。
  3. Sub-Store 能正确保存并输出相关字段。
  4. 保留一条 Shadowsocks 2022 节点作为维护通道。

需要多个平台共用订阅时,优先使用 Shadowsocks 2022;只有所有设备都完成兼容性测试后,再启用 VLESS Encryption。

客户端与 Sub-Store

客户端最终都连接 po0 公网 IP:

节点名称客户端地址端口实际出口
CCN-HKpo0 公网 IP30001po0 HK / RFC Host HK
CCN-JPpo0 公网 IP30002RFC Host JP
CCN-USpo0 公网 IP30003po0 US
CCN-SGpo0 公网 IP30004RFC Host HK → SG

服务器地址和端口以外的参数沿用对应出口节点,包括协议、加密方式、密码和插件参数。建议在 Sub-Store 中保留 CCN 前缀,同时保留少量公网直连节点作为维护备用:

CCN-HK-RFC-T1
CCN-JP-RFC-T1
CCN-US-PO0
CCN-SG-RFC-VIA-HK

按链路逐段排错

1. 出口协议

sing-box check -c /etc/sing-box/config.json
systemctl status sing-box --no-pager
journalctl -u sing-box -n 100 --no-pager
ss -lnptu | grep ':30001'

必须先确认客户端直连出口可用。

2. po0 到出口

ip route get 出口机IP
ping -c 4 出口机IP
nc -vz 出口机IP 出口协议端口

检查使用的产品是否支持互通、出口防火墙是否放行,以及端口是否命中 po0 默认封禁范围。

3. nftables 命中情况

sysctl net.ipv4.ip_forward
nft list ruleset
systemctl status nftables --no-pager

若需要观察计数,可临时为目标规则增加 counter。只有去程没有回程时,优先核对 RELAY_LAN_IP 和 SNAT,而不是反复修改客户端密码。

4. 客户端到 po0

nc -vz po0公网IP 30001

确认客户端已经换成 po0 公网 IP,监听端口与 nftables 一致,并检查 po0 防火墙白名单是否包含当前来源网段。

5. 新加坡双层链路

SG 直连 → HK 转发到 SG → po0 转发到 HK 的顺序逐段测试。不要同时修改三台机器,否则很难确定故障在哪一层。

稳定性与维护建议

  • 官方手动示例将 TCP MSS 设为 1452,用于降低内网封装与路径 MTU 不匹配导致的卡顿;不要删除后只靠降低所有网卡 MTU碰运气。
  • 先新增出口服务端口,再配置 nftables,最后更新客户端;删除线路时按相反顺序操作。
  • 每次改规则前备份 /etc/nftables.conf 和当前 ruleset。
  • 不要在同一台入口上交替使用菜单脚本和手写配置。
  • 用 po0 状态页、Looking Glass 和真实客户端长期观察,单次最低延迟不能代表晚高峰稳定性。
  • 多层链路会增加维护成本和流量消耗;先稳定运行香港或日本单出口,再增加美国和新加坡。

po0 的价值不是简单增加一台 VPS,而是用国内 BGP 入口、内网互通和可选择的境外出口拆分整条路径。入口地址、内网 SNAT 地址、出口目标和客户端参数四者各司其职,配置时不要混用。