XTLS / Xray-core

Xray, Penetrates Everything. Also the best v2ray-core, with XTLS support. Fully compatible configuration.
https://t.me/projectXray
Mozilla Public License 2.0
25.13k stars 3.9k forks source link

[Feature Request] Outbound server domain name SRV Record support #3642

Closed MFWT closed 2 months ago

MFWT commented 2 months ago

简要说明

有时候,目标服务器的地址和端口都在变化(例如,使用natter/natmap等工具,在NAT1环境下打洞,实现客户侧Clientless且支持TCP的直接访问,谁不想使用IPv6呢,但是客户测网络很多时候不支持),普通DNS的A记录可以传递地址信息,但是端口信息需要带外传递,或者,可以通过SRV记录来写入

e.g:以示例地址srv.mfwt.top为例

$ dig srv.mfwt.top srv
......

;; QUESTION SECTION:
;srv.mfwt.top.                  IN      SRV

;; ANSWER SECTION:
srv.mfwt.top.           300     IN      SRV     0 0 8888 whatever-service.mfwt.top.

.........

其中8888就是服务端口,whatever-service.mfwt.top.就是服务地址。如果Xray支持从SRV记录中读取连接信息,会是非常方便的

现状

为什么不外挂解决

当然,我自然可以写个脚本,从各种第三方来源得知目前的服务地址和端口是多少,然后生成配置文件供Xray工作 但是考虑到:此方法在移动端平台,例如安卓,一般情况下比较难实现,我个人认为如果Xray直接支持读取SRV记录,是比较方便的

为什么不用第三方软件,比如Tailscale

这些软件很好,但是问题依然是,移动端大多数不允许起多个VPNService,开了这个就不能开那个,只能被迫二选一,或者合二为一

设想

在当前服务器配置中支持如下地址设置:

{
"address":"SRV:srv.mfwt.top",
"port":0    //可以为省略,或者设置为0,以SRV记录中记录的端口为准
}

希望R大可以考虑一下,谢谢!

mmmray commented 2 months ago

you can build a subscription URL which always contains the latest generated config. user can refresh the subscription to get the new IP. it's still less convenient than SRV records. but it's harder to detect as well.

Fangliding commented 2 months ago

楼上说的订阅链接无疑是一个很好的方法 ray目前的dns系统只支持a和aaaa查询 整合srv很麻烦 因为doh doq什么的都是单独实现的 当然也可以不鸟dns模块不过这样会让代码更丑 如果用的人多可以考虑一下 就个人需求还是不想动太多东西

MFWT commented 2 months ago

楼上说的订阅链接无疑是一个很好的方法 ray目前的dns系统只支持a和aaaa查询 整合srv很麻烦 因为doh doq什么的都是单独实现的 当然也可以不鸟dns模块不过这样会让代码更丑 如果用的人多可以考虑一下 就个人需求还是不想动太多东西

也确实....我翻了翻源码,似乎解析端口都是各个协议自己实现的,如果要改的话就是大改了

MFWT commented 2 months ago

you can build a subscription URL which always contains the latest generated config.

I will try that You are right, it is a more general approach that does not require much modification to the source code.