连接信息与协议
本页介绍节点服务器“入口”与“出口”之间的连接行为,转发协议,以及软件的一些“高级配置”。
如何知道其他服务器的 IP
默认情况下,节点端都会上报自己的「公网 IP」地址。
如果您没有指定设置,那么出口服务器将随机监听端口,上报「公网 IP + 监听端口」至面板服务器,此信息后续被入口服务器拉取,入口服务器就可以连接到出口服务器。
如果需要改变这个行为,请看「出口设置」。
设备组 config
设备组 config 为 JSON 格式。
部分设置项可以通过 编辑 修改,如果需要查看或编辑所有设置项,请使用 高级编辑 功能。
提示,使用高级编辑时请带上脑子
- 请先学习 JSON 的语法,不要出现语法错误。
- 面板中的 JSON 编辑不支持注释,请自行删去注释。
- 请按自己的需求填写,不懂的参数不要填。不要照抄示例,示例中的值不一定是默认值。
入口设置
入口设置位于 入口设备组 的 config 中,以 JSON 格式保存。
前端界面会读取入口设备组中的 config 以展示入站屏蔽了哪些协议和域名。
{
// 入站屏蔽选项
"allowed_host": [], // 白名单的 Host / SNI,与其他屏蔽选项冲突
"blocked_host": [], // 黑名单的 Host / SNI
"blocked_path": [], // 黑名单的 HTTP Path
"blocked_protocol": [], // 黑名单协议,可取值看下方说明
// UDP 选项
"disable_udp": false,
"udp_over_tcp": false,
// 对端地址优先度选项
"ipv6_group": [],
// 故障转移:指定 入口连接隧道出口 或者 入口直出 时的故障转移策略。
"max_fail": 3, // 开始转移前,容忍的最大连续失败次数
"fail_timout_sec": 30, // 转移的时长(秒)
// 反向隧道选项
"reverse_group": [],
// 反向隧道协议选项
"protocol": "tls",
"tls": {
// tls object
}
}
ipv6_group
指定哪些出口设备组需要优先走 IPv6,填写设备组整数 ID,如 [3, 4, 5]。
特殊写法:
[0]表示所有出口都优先使用 IPv6。[0, 1, 2]表示所有出口都优先使用 IPv6,但 1 和 2 优先使用 IPv4。
各种连接地址的优先度
从上到下尝试,取第一个符合条件的地址。
- connect_type == "static" && connect_address != ""
- connect_host != ""
- dyn_ip4
- ipv6_group
- dyn_ip6
- 最后兜底使用公网 IPv4 地址
注意:连接地址没有回落机制
如果您使用 IPv6 连接对端,请确保入口机器有可用的 IPv6 网络。除非某个对端没有公网 IPv6 地址,其他情况即使连接失败,也不会使用 IPv4。
blocked_protocol
socksfet屏蔽全加密(ss/vmess)协议httptls
group.json
如果本地工作目录存在 group.json ,则会覆盖远程的入口设置。
某些 config 的变更可能需要重启节点端才能生效。
出口设置
出口设置位于 出口设备组 的 config 中,以 JSON 格式保存。
属于“连接策略”与“协议选项”的配置项一般用于控制“入口服务器连接本组出口”时的行为。
{
// 连接策略
"connect_type": "static", // 可选: dyn_ip4 / dyn_ip6 / static
"connect_address": "node.example.com", // static 专属
"connect_port": 2333, // static 专属
// 协议选项
"protocol": "ws",
"ws": {
// ws object
},
"udp_over_tcp": false
}
connect_type: 如果不指定,默认使用 ipv4 或者每个对端的 connect_host 连接。
dyn_ip4: 强制指定使用公网 ipv4 连接。
dyn_ip6: 强制指定使用公网 ipv6 连接,如果入口或出口不支持 v6 也不会自动回退到 v4。
static: 强制指定使用出口配置中的 connect_address connect_port 连接,目前只能指定一个地址,不建议使用域名。
规则设置
规则设置位于「转发规则」中,以 JSON 格式保存。
部分设置项可以通过 编辑 修改,如果需要查看或编辑所有设置项,请使用 高级编辑 功能。
{
// TLS 入站设置
"tls": {
// empty_sni 和 sni 二选一,请根据自己情况设置。
"empty_sni": false, // 不校验客户端发送的 SNI。默认: false
"force_empty_sni": false, // 开启 empty_sni 的同时,拒绝带有 SNI 的请求。默认: false
"sni": "i0.hdslb.com", // 仅限带有此 SNI 的客户端连接到服务器。nc20250930 版本起,可填多个,用逗号分割。
// ALPN 如果不为空,则校验客户端发送的 ALPN。
"alpn": [
"http/1.1"
]
}
}
TLS 入站
入口监听 TLS,为入站连接加载 TLS 层。TLS 握手将在入口服务器完成,然后 TLS 内层流量将通过隧道传输至后续服务器。
此功能与 blocked_protocol 等不冲突,若入口禁止了 TLS,则无法成功握手。
目前只支持自签名证书,请为客户端设置好 allow-insecure sni 等参数。
如需更多复杂功能请自行在入口运行 nginx 等专业软件。
TCP 隧道协议
nyanpass 的隧道协议是自主设计的基于 TCP 的协议,为符合互联网多数流量特征,目前仅允许采用 ws http tls 方式传输。
隧道协议自带连接复用,实现多数请求 0-RTT,不增加任何延迟(包括 TCP 握手的延迟)。
所有基于 TCP 的协议在第一次建立连接时均会耗费 1RTT,若有 TLS 层再多 1RTT。由于默认开启了复用层,这种延迟只会在少数的实际连接中出现。
针对需要过墙的用户的提醒:
- http/ws 协议非常假,如果没有特殊需求,请优先使用 tls 协议。
- 目前(2025 年 9 月) http/tls 隧道协议不会像 SS/Vmess/Trojan/Vless 那样自动被 GFW 墙,ws 协议可能会触发 GFW 的某种并发限制导致断流。
- 目前所有协议可能都无法逃过某种含有人工因素的 IP 筛查与封禁。但是这种情况的出现频率较低,例如 2025 年 1~9 月只出现了约 4 批次的封禁行动,并且有集中行动的特征。之前总结的规律:不是流量大容易被墙,而是使用转发跑某些特殊的业务容易被墙(也就是每次被墙几乎都是同一批人出问题)。
- 如果你觉得还是不保险,可以尝试开启
chfp伪装 TLS ClientHello 指纹,且/或填写合适的sni,但是这个方法的效果还没有充分测试过。
以上内容只对国外跳板 IP 有效。
对于国内 IP,可以参考「反向墙」页面的部分描述。由于人工因素占比更高(打击的是境内翻墙行为,所以用什么方式过墙都无济于事),处理方法更抽象(例如封海外、通报拔线),资源更稀缺,规避更难,目前无法给出有效建议。
ws
版本:自 nc20250613 起由 ws ws2 统一合并为 ws。
特点:非完整 ws 协议,性能优秀,无额外延迟,传输内容自带简易加密。
出口设备组 ws config:
{
"ws": {
"host": "some.host.com",
"path": "/some/path",
// request & response
// 可以设置完整的 http 头,不一定需要正确,只要 HTTP 库能读出来就可以了(能连就行)。
// 这与大部分 HTTP 中间件不兼容。如果您设置了这些选项,隧道两端请务必直接 TCP 连接。
// 如果设置不当,可能导致被墙或者卡死。
"request": "GET / HTTP/1.5\r\n\r\n",
"response": "HTTP/1.5 200 OK\r\n\r\n"
}
}
http
版本:nc20250613 起可用。
特点:继承了 ws 大部分要素的 FakeHTTP 协议。请求/响应头中不包含 upgrade switch protocol 等信息,以规避某些网络对 ws 的限制。
同样可以用 ws config 调整 host 和 path。
tls_simple
版本:早期的 realm tls 协议在 nc20240329 版本起已经合并到 tls_simple 协议。
特点:使用 Go TLS 承载 Nyanpass 协议,性能优秀。
出口设备组 tls config:
chfp: 利用 utls 伪装 ClientHello 的指纹,默认不开启。(nc20250930 版本起)
目前可以填以下指纹。如果 chfp 的值不在以下列表,则不进行指纹伪装。
UDP 转发协议
无论 protocol 为何,只要不开启 udp_over_tcp,转发处理 udp 时始终使用基于原生 udp 的转发协议,保证 udp 的特性不丢失。
此协议的 MTU 开销为 28 字节,转发内容有简易加密。
如果开启 udp_over_tcp,则 udp 数据将通过 tcp 流承载,通过隧道协议传输。
不推荐使用本软件转发 UDP。我们只提供“能用”的 UDP 转发,并无对 UDP 的优化。
入口直出
适合专线使用。非隧道(意味着不能过墙),无需出口机器。转发开销极小,非常稳定。
有些人会把这种转发叫做 直接转发 或者 TCP+UDP 转发,是同一种东西。
反向隧道
20251018 新功能,要求面板和所有节点端更新才能使用!
特点:
- 设计意图是利用反向隧道,将内网端口暴露在公网的「入口」上,达到「内网穿透」的效果。用来翻墙属于歪用,更不可能解决什么反向墙封海外的问题。
- 连接的发起方向 是
出口->入口,这意味着当出口处于局域网,而入口有完整公网入站时,可以实现“内网穿透转发”的效果。 - reverse_group 中的出口会对每个开启 --rev-port 的入口持续建立一个“反向控制流”(基于 TLS,有心跳保活)。
- 目前没有实现 UDP 反向转发,因此 UDP 是通过 UDP Over TCP 传输的。
开启步骤:
- 在 入口对接命令 加上
--rev-port 反向控制流监听端口代表此入口开启了反向隧道监听。未开启的入口即使设置了下方的参数,也不会实际使用反向连接。 - 入口组 config 设置
reverse_group指定到哪些出口的连接启用反向隧道(特殊写法和 ipv6_group 是一样的格式) - 入口组 config 设置
protocol如需调整隧道协议选项,也请在入口组 config 中设置。
链式出口
20251018 新功能,要求面板和所有节点端更新才能使用!
- 链式隧道转发,利用的是隧道协议
- 因为要实现传递 IP、分规则限速/统计流量等特性,只能基于隧道转发,无法使用“直接转发”来实现
- 为防止过于复杂的情况,目前限制了只允许 2~3 跳(不算入口)
- 默认 [入口到第一个出口之间] 是开启 Mux 的,其余默认关闭,建议 [两端都在境内] 或 [两端之间需要过墙] 或 [两端节点性能充足,想要更低延迟] 的部分开启 Mux,其余部分关闭
- 目前没有实现 UDP 链式转发,因此 UDP 是通过 UDP Over TCP 传输的
- 暂无「故障转移组」功能
- 暂时不可与「用户自带出口」组合使用
- 用户流量计算模式:遵循入口和链式出口的倍率,忽略各跳的倍率
- 用户权限模式:遵循链式出口的用户组权限设置,忽略各跳的权限设置。也就是只需授权链式出口本身,用户就可以使用这个出口链