dyhkwong
dyhkwong
需要让 packetaddr 支持 `net.Addr` interface 而不只是 `net.UDPAddr`, 以及支持 `AddressFamilyDomain`,而不应该去“解析成IP”。
Any progress?
该行为来自 https://github.com/SagerNet/sing-tun/blob/fb6e917a2cd7a5e6a0c45cc5291f2cbe9c8e8bcb/tun_rules.go#L106-L179 ,似乎是为了避免有 Inet6Address 但没有 ipv6 路由时,ipv6 绕过 tun 直连发出。
同时关闭智能多宿主名称解析并开启 strict route 会导致某些应用的 DNS 查询异常,这个是预期副作用,不需要修复,除非有比 WFP 屏蔽除自身外的 53 端口流量更好的方案。要么就关闭智能多宿主名称解析并关闭 strict route(AAAA 一样会漏),要么就开启智能多宿主名称解析并开启 strict route。
开启 strict route 还会漏那就是通过其他方式漏或者你自己配置文件的问题了,strict route 只为了处理通过智能多宿主名称解析方式的泄漏。 >`开启智能多宿主名称解析并开启 strict route`,这个方案Windows会漏
觉得 WFP 拦截侵入性太大的话也可以自己在开启 tun 时把所有网卡的 dns 都改成 tun 网卡的(或者公网的?),关闭 tun 时再改回去,不过这样就更脏了
> 复现+1,如果禁用智能多宿主名称解析就必须同步关闭严格路由,否则域名解析极其缓慢。 这是预期问题,请不要在这里抱怨。如果你有更好的没有侵入性的方案可以去实现一下,否则就只能是像现在这样。该功能没有默认开启。
由于任何流量最终要发往实际的网络(IP 之间的通信),即使从 freedom 发出域名地址(由系统解析为 IP)的请求,响应也只会是 IP 地址,造成请求与响应的地址不匹配。 要么 1、给 outbound 加 `domain_strategy`(我修改这个时有提过但是没有下文),强制把 UDP 的域名解析成 IP 再发出(like Clash) 2、freedom 做个 域名-IP 的映射把 UDP 响应中的 IP 替换成域名,但造成其他潜在问题,且大多数代理软件服务端不支持(like sing-box with `udp_disable_domain_unmapping` disabled) 3、对域名地址的...
> 任何在到达下一个端点时必须强制解析的情况应该也可以这样做 这么说的话,freedom 的 redirect、freedom 的 domainStrategy 等,可能一直以来都有此问题。 > 当然是个设想,可能不太完善 是否想得太复杂,简单替换一下地址应付一下就算了https://github.com/SagerNet/sing/blob/3f6c423e76f0c33bcb926b0d69168734951db23f/common/bufio/nat.go#L82-L95 > 强制把 UDP 的域名解析成 IP 再发出 只能在客户端上这样做,如果中转、服务端这样做就会造成客户端出现此 issue 所述的问题了。不过这个不应该考虑,也没有人考虑。
> 大部分情况应该没有问题,只要这个映射包含从服务端哪个端口发出去的信息避免回包时映射串台就行。(比如通过代理访问一个开了 HTTP/3 的同时跑多个网站的多个域名指向同一个 IP 的服务器) 这种一般不会使用同一个本地地址。如果复用本地地址,现在的屎山架构只能根据第一个目标地址进行(#1011 或许可以解决 fake DNS,但对于其他问题没有帮助)。 由于 UDP 不是面向连接的,且 IP 与域名之间不是“一一映射”,无法真正解决 UDP 地址替换的问题。