immortalwrt / homeproxy

The modern ImmortalWrt proxy platform for ARM64/AMD64 (powered by sing-box)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

命中 Direct 的流量 NAT 类型改变

muink opened this issue · comments

问题发现

因为一直都是在路由器上用 natmap 打洞, 通过打洞出来的 tcp/udp 端口连回家里或访问开放的服务
最近一次远程回家, 要测试点东西. 就把 homeproxy 的 Bypass CN traffic 给关了. 结果远程连接直接就断了, 其他的服务也都挂了

初步检查

回家后检查是 keep-alive 服务器命中了 Direct 规则, (natmap 定期向 www.baidu.com 发送 HTTP keep-alive 报文来保活)
之前因为开启了 Bypass CN traffic 流量直接在防火墙就走直连了, 没有再走一次 sing-box, 打洞就成功了
仔细检查后发现只要是命中 Direct 规则的流量, 全部变成了 端口过滤型 NAT, 也难怪打洞会失败了

检查结果

这是没有开启 homeproxy 时候的 tcp/udp 检查结果
Snipaste_2024-04-13_20-01-30

这是开启 homeproxy 时候的 tcp/udp 检查结果
查了下这个文章STUN (RFC 3489) vs. STUN (RFC 5389/5780)
出站的 srcnat 应该正常的, 但入站的就被过滤掉了
Snipaste_2024-04-13_19-59-05

似乎与 openclash 的问题很像 vernesong/OpenClash#2288

查出原因了 本机端口 3456 在经过 sing-box 后转换为了 ip_local_port_range 的 port, 绕过了 3456 的 input 规则, 但是网关又不是 Full cone NAT, 自然连接降级了