Direct/Freedom outbound: Better Compatibility (#896)

https://github.com/XTLS/Xray-core/pull/6058
This commit is contained in:
Meow
2026-09-11 06:46:51 +08:00
committed by GitHub
parent 9125d3237c
commit b7207f4da4
30 changed files with 451 additions and 477 deletions
+4 -4
View File
@@ -34,16 +34,16 @@
合理利用 Xray ~~如轮椅般~~强大的内置 DNS 自带的回落、ECS、IP 过滤、打 Tag 等功能,精心调整它们的顺序。如此你便得到了比 geosite cn/!cn 更为精确且实时的 IP 作为分流条件,因为 IP 归属地,特别是 cn 归属地变更频率较低。
在继续阅读本文之前,你需要充分阅读并理解“入门技巧:路由 (routing) 功能简析[上篇](./routing-lv1-part1.md)、[下篇](./routing-lv1-part2.md)”。
与此同时你已经快要把官方配置指南给翻烂了,因此你完全理解了路由和出站中的 domainStrategy、入站中 sniffing 各选项的作用、以及其不同值的组合下产生的行为。
与此同时你已经快要把官方配置指南给翻烂了,因此你完全理解了路由和 sockopt 中的 domainStrategy、出站中的 targetStrategy、入站中 sniffing 各选项的作用、以及其不同值的组合下产生的行为。
一切就绪?请试着理解下面这段内容:
socks、http 入站时,请求的就是域名,到了路由后,路由中非 AsIs 的 domainStrategy 可以利用内置 DNS 解析出 IP 临时用于路由匹配。到了本地 direct 出站时,出站中非 AsIs 的 domainStrategy 可以利用内置 DNS 再次解析出 IP 用于出站。发往 Xray 服务器的请求只有域名,具体访问哪个 IP 取决于服务器的 direct 出站。
socks、http 入站时,原始请求的就是域名,到了路由模块后,路由中非 AsIs 的 domainStrategy 可以利用内置 DNS 解析出 IP 临时用于路由匹配。若分流到了本地 direct 出站,sockopt 中非 AsIs 的 domainStrategy 可以利用内置 DNS 再次解析出 IP 用于出站。若分流到了远端 Xray 服务器,并且本地此出站的 targetStrategy 为 AsIs,则请求目标仍以域名形式发送,具体访问哪个 IP 取决于服务器的 direct 出站。
透明代理时情况变得更加复杂,入站 sniffing 开启,且 destOverride 有 [http, tls]:
- 若 routeOnly = false 则请求的 IP 将被抹掉,后面的流程跟 socks 入站一样。
- 若 routeOnly = true 则同时有域名和 IP,到了路由后,可以直接匹配域名和 IP 规则,本地 direct 出站也会用此 IP。发往 Xray 服务器的请求只有 IP,服务器如何处理?再把刚才的流程走一遍。
- 若 routeOnly = true 则同时有域名和 IP,到了路由模块后,可以直接匹配域名和 IP 规则,本地 direct 出站也会用此 IP。发往 Xray 服务器的请求只有 IP,服务器如何处理?再把刚才的流程走一遍。
遇到困难?你需要继续反复阅读官方指南并尝试理解。否则你很难利用到下面示例中 DNS 模块的解析结果来正确分流。
@@ -261,7 +261,7 @@ realIp 透明代理环境,你甚至可以在保证完全劫持各种渠道的
此场景下由于发给 Xray 服务器的请求全部都是域名,因此没有必要利用 DNS 反复试探最优结果,只需要快速识别域是否被污染,尽可能解析出中国的 CDN 友好的 IP 即可。
此示例中 DNS 模块解析出的中国 IP 已经是 99% 中国 CDN 友好的,因此你可以在 direct 出站中 `domainStrategy` 设为**非** AsIs 以利用缓存,如果你需要的话;<br>
此示例中 DNS 模块解析出的中国 IP 已经是 99% 中国 CDN 友好的,因此你可以将 direct 出站的 `sockopt.domainStrategy` 设为**非** AsIs 以利用缓存,如果你需要的话;<br>
如果你追求 100% 的中国 CDN 友好,可设为 AsIs 利用操作系统设置的 DNS 再解析一次,额外耗时约 1 ~ 数百毫秒,建议开启乐观缓存以进一步降低延迟。
## 写在后面
+13 -13
View File
@@ -114,8 +114,10 @@ lsmod | grep wireguard
"outbounds": [
{
"protocol": "freedom",
"settings": {
"domainStrategy": "UseIPv4"
"streamSettings": {
"sockopt": {
"domainStrategy": "UseIPv4"
}
}
//修改此处,可v4或者v6
},
@@ -125,11 +127,9 @@ lsmod | grep wireguard
"tag": "wg0",
"streamSettings": {
"sockopt": {
"mark": 255 // <mark>
"mark": 255, // <mark>
"domainStrategy": "UseIPv6"
}
},
"settings": {
"domainStrategy": "UseIPv6"
}
}, //设置fwmark为<mark>的用户走指定方式”UseIPv6””UseIPv4”
// <--请在不同的方案中选择--> 方案2:sendThrough
@@ -138,8 +138,10 @@ lsmod | grep wireguard
"protocol": "freedom",
"sendThrough": "your wg0 v4 address",
//修改此处,可v4或者v6
"settings": {
"domainStrategy": "UseIPv4"
"streamSettings": {
"sockopt": {
"domainStrategy": "UseIPv4"
}
}
//修改此处,可v4或者v6
},
@@ -147,12 +149,10 @@ lsmod | grep wireguard
{
"tag": "wg0",
"protocol": "freedom",
"settings": {
"domainStrategy": "UseIPv4"
},
"streamSettings": {
"sockopt": {
"interface": "wg0"
"interface": "wg0",
"domainStrategy": "UseIPv4"
}
}
},
@@ -193,7 +193,7 @@ lsmod | grep wireguard
```
::: tip
可以通过修改 "domainStrategy": "UseIPv6"来控制对应用户的访问方式 实测优先级要高于系统本身的 gai.config
可以通过修改 `sockopt.domainStrategy` 为 `UseIPv6` 来控制对应用户的访问方式。
:::
## 5、系统设置配置
+4 -8
View File
@@ -52,12 +52,10 @@ sudo curl -oL /usr/local/share/xray/geosite.dat https://github.com/Loyalsoldier/
{
"tag": "direct",
"protocol": "freedom",
"settings": {
"domainStrategy": "UseIPv4"
},
"streamSettings": {
"sockopt": {
"mark": 2
"mark": 2,
"domainStrategy": "UseIPv4"
}
}
},
@@ -94,12 +92,10 @@ sudo curl -oL /usr/local/share/xray/geosite.dat https://github.com/Loyalsoldier/
"settings": {
"rewriteAddress": "8.8.8.8"
},
"proxySettings": {
"tag": "proxy"
},
"streamSettings": {
"sockopt": {
"mark": 2
"mark": 2,
"dialerProxy": "proxy"
}
}
}
@@ -91,12 +91,10 @@
{
"tag": "direct",
"protocol": "freedom",
"settings": {
"domainStrategy": "UseIP"
},
"streamSettings": {
"sockopt": {
"mark": 255
"mark": 255,
"domainStrategy": "UseIP"
}
}
},