server_config: 新增 UoT v2(UDP over TCP)支持

全节点(jp/us/ru/aq/hk2)已部署并实测通过(UoT DNS 端到端 ✅ + TCP 回归 ✅):

- nginx 模板:map $request 识别 sing-box UoT v2 magic 地址
  (sp.v2.udp-over-tcp.arpa)→ 127.0.0.1:15201;default_server 块加
  proxy_connect_address;read/send timeout 10m
- 新增 uot-relay/:Python 标准库 UoT v2 relay(connect/non-connect 双模式,
  仅监听 127.0.0.1,空闲 9 分钟断开)
- README 5.5 节:部署方法 + 客户端协议 + 四个实测坑
  ($connect_host 未注册变量 / data_timeout 与 read_timeout 同槽 /
  CONNECT 恒落 default_server / 拒绝端口 0)
This commit is contained in:
RRRosmontis
2026-09-19 00:31:41 +08:00
parent e16ef58182
commit 2e56f82e7b
4 changed files with 259 additions and 4 deletions
+23 -4
View File
@@ -16,6 +16,19 @@ http {
default 0;
"~^(10\.|127\.|169\.254\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[01])\.)" 1;
}
# UoT v2(UDP over TCP):CONNECT 目标为 sing-box UoT v2 magic 地址
# (sp.v2.udp-over-tcp.arpa)时转发到本机 UoT relay(127.0.0.1:15201),
# 其余 CONNECT 走默认解析($connect_addr)。
# 注意(实测结论,勿踩坑):
# 1. 必须用 $request 匹配——此模块版本未注册 $connect_host 变量;
# 2. proxy_connect_address 必须放在 default_server 块——nginx 按 Host 头
# 选虚拟主机,CONNECT 的 Host 是目标域名,永远落在 default_server;
# 3. 客户端 CONNECT magic 地址时端口必须非 0(模块拒绝 port<1,返回 400)。
map $request $rrpp_uot_connect_address {
default $connect_addr;
"~^CONNECT sp\.v2\.udp-over-tcp\.arpa" 127.0.0.1:15201;
}
include mime.types;
default_type application/octet-stream;
sendfile on;
@@ -44,9 +57,12 @@ http {
proxy_connect;
proxy_connect_allow all;
proxy_connect_address $rrpp_uot_connect_address;
proxy_connect_connect_timeout 60s;
proxy_connect_read_timeout 120s;
proxy_connect_send_timeout 120s;
# 注:此模块版本 proxy_connect_data_timeout 与 proxy_connect_read_timeout
# 写同一字段(同时配置报 duplicate),长连接超时用 read/send timeout 设置
proxy_connect_read_timeout 10m;
proxy_connect_send_timeout 10m;
location / {
auth_basic off;
@@ -92,9 +108,12 @@ http {
proxy_connect;
proxy_connect_allow all;
proxy_connect_address $rrpp_uot_connect_address;
proxy_connect_connect_timeout 60s;
proxy_connect_read_timeout 120s;
proxy_connect_send_timeout 120s;
# 注:此模块版本 proxy_connect_data_timeout 与 proxy_connect_read_timeout
# 写同一字段(同时配置报 duplicate),长连接超时用 read/send timeout 设置
proxy_connect_read_timeout 10m;
proxy_connect_send_timeout 10m;
location / {
auth_basic off;