连接信息与协议
本页介绍节点服务器“入口”与“出口”之间的连接行为,以及软件自带的“隧道协议”。
如何知道其他服务器的 IP
默认情况下,节点端都会上报自己的「公网 IP」地址。
如果您没有指定设置,那么出口服务器将随机监听端口,上报「公网 IP + 监听端口」至面板服务器,此信息后续被入口服务器拉取,入口服务器就可以连接到出口服务器。
如果需要改变这个行为,请看「出口设置」。
设备组 config
设备组 config 为 JSON 格式。
部分设置项可以通过 编辑
修改,如果需要查看或编辑所有设置项,请使用 高级编辑
功能。
提示,编写配置时请带上脑子
- 面板中的 JSON 编辑不支持注释,请自行删去注释。
- 请按自己的需求填写,不懂的参数不要填。不要照抄示例,示例中的值不一定是默认值。
入口设置
入口设置位于 入口设备组 的 config 中,以 JSON 格式保存。
前端界面会读取入口设备组中的 config 以展示入站屏蔽了哪些协议和域名。
{
// 屏蔽选项
"allowed_host": [], // 白名单的 Host / SNI,与其他屏蔽选项冲突
"blocked_host": [], // 黑名单的 Host / SNI
"blocked_path": [], // 黑名单的 HTTP Path
"blocked_protocol": [], // 黑名单协议,可取值看下方说明
// 隧道选项
"udp_over_tcp": false,
"disable_udp": false,
"disable_mux": false,
"ipv6_group": [],
// 故障转移:指定 入口连接隧道出口 或者 入口直出 时的故障转移策略。
"max_fail": 3, // 开始转移前,容忍的最大连续失败次数
"fail_timout_sec": 30 // 转移的时长(秒)
}
ipv6_group
指定哪些出口设备组需要优先走 IPv6,填写设备组整数 ID,如 [3, 4, 5]
。
特殊写法:
[0]
表示所有出口都优先使用 IPv6。[0, 1, 2]
表示所有出口都优先使用 IPv6,但 1 和 2 优先使用 IPv4。
各种连接地址的优先度
从上到下尝试,取第一个符合条件的地址。
- connect_type == "static" && connect_address != ""
- connect_host != ""
- ipv6_group
- dyn_ip6
- 最后兜底使用公网 IPv4 地址
注意:连接地址没有回落机制
如果您使用 IPv6 连接对端,请确保入口机器有可用的 IPv6 网络。除非某个对端没有公网 IPv6 地址,其他情况即使连接失败,也不会使用 IPv4。
blocked_protocol
socks
fet
屏蔽全加密(ss/vmess)协议http
tls
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
"sni": "i0.hdslb.com", // 仅限带有此 SNI 的客户端连接到服务器。
// ALPN 如果不为空,则校验客户端发送的 ALPN。
"alpn": [
"http/1.1"
]
}
}
TLS 加载
入口监听 TLS,为入站连接加载 TLS 层。TLS 握手将在入口服务器完成,然后 TLS 内层流量将通过隧道传输至后续服务器。
此功能与 blocked_protocol
等不冲突,若入口禁止了 TLS,则无法成功握手。
目前只支持自签名证书,请为客户端设置好 allow-insecure
sni
等参数。
TCP 隧道协议
nyanpass 的隧道协议是自主设计的基于 TCP 的协议,为符合互联网多数流量特征,目前仅允许采用 ws tls 方式传输。
隧道协议自带连接复用,实现多数请求 0-RTT,不增加任何延迟(包括 TCP 握手的延迟)。
所有基于 TCP 的协议在第一次建立连接时均会耗费 1RTT,若有 TLS 层再多 1RTT。由于默认开启了复用层,这种延迟只会在少数的实际连接中出现。
ws
稳定性:稳定
特点:非完整 ws 协议,性能优秀,无额外延迟,传输内容自带简易加密,可过一些 CDN。
ws object:
tls_simple
稳定性:稳定
特点:使用 Go TLS 承载 Nyanpass 协议。
之前的 realm tls 协议已经合并到 tls_simple 协议。
UDP 转发协议
无论 protocol
为何,只要不开启 udp_over_tcp
,转发处理 udp 时始终使用基于原生 udp 的转发协议,保证 udp 的特性不丢失。
此协议的 MTU 开销为 28 字节,转发内容有简易加密。
如果开启 udp_over_tcp
,则 udp 数据将通过 tcp 流承载,通过隧道协议传输。
入口直出
适合专线使用。非隧道,无需出口机器。转发开销极小,非常稳定。