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
24.44k stars 3.83k forks source link

Socks出站协议能否支持自定义domainStrategy设置? #1653

Closed Benjamin1919 closed 1 year ago

Benjamin1919 commented 1 year ago

需求:建立一个outbound指向监听本地某端口的代理,并指定其解析为IPv4或IPv6。 目前用的是Socks出站,但我发现:

一、官方文档中Socks貌似不支持将domainStrategy设置为UseIP/UseIPv4/UseIPv6/AsIs,后续能否支持? image

二、才发现Freedom出站有redirect功能,跟Socks一样没有加密、能同时传输TCP和UDP数据,请问Freedom中的redirect和Socks有什么区别呢?哪个性能更好一些? 如果Socks确实无法自定义domainStrategy,那我是否可以用Freedom中的redirect来实现我的需求? image

azzvx commented 1 year ago

SOCKS协议直接转发域名的,不需要解析DNS。

Benjamin1919 commented 1 year ago

SOCKS协议直接转发域名的,不需要解析DNS。

感谢解答~请问socks和redirect在性能上有差异吗?

Benjamin1919 commented 1 year ago

我自己找到答案了,原来在sockopt里可以自己设置解析策略; 另外对于WARP的proxy模式(或称为client模式),貌似只能通过socks方式使用,freedom里的redirect并不能将数据包传递给WARP。 socks出站代码示例:

{
  "protocol": "socks",
  "settings": {
    "servers": [
      {
        "address": "127.0.0.1",
        "port": 40000,
        "users": []
      }
    ]
  },
  "tag": "WARP",
  "streamSettings": {
    "sockopt": {
      "tcpFastOpen": true,
      "tcpcongestion": "bbr",
      "domainStrategy": "UseIPv4"
    }
  }
}
limetw commented 1 year ago

论完整地看一遍文档的重要性

chika0801 commented 1 year ago

学习了

toyo2333 commented 1 year ago

楼主你好,我和你遇到同样的问题,我的需求是在我的双栈VPS上 对ChatGPT网站的访问走Warp的Socks5 代理。但是Warp之后它总是走IPv4,去掉Warp后就能走IPv6,我像你这样的设置,把"domainStrategy": "UseIPv4"这里改为了UseIPv6,但没有效果。这是什么原因呢?https://chat.openai.com/cdn-cgi/trace 我是这里看的,里面的ip在不加Warp的时候是IPv6访问,加了Warp后变成一个IPv4地址了。

我做了很多测试: 1,不是Warp的问题,因为Connect成功后,双栈的IP都是warp后的IP了(测试方法如下)

curl -4 ip.gs -x socks5://127.0.0.1:4000 curl -6 ip.gs -x socks5://127.0.0.1:4000

2,不是浏览器的问题,因为不加Warp的时候就是IPv6 3,不是VPS的问题,因为用curl https://chat.openai.com/cdn-cgi/trace --proxy socks5://127.0.0.1:40000,也是成功使用Warp的IPv6

所以问题只能是Xray这里,我搜了很久找到你这里了,但按你的配置修改无效。这该怎么办呢?

chika0801 commented 1 year ago

我自己找到答案了,原来在sockopt里可以自己设置解析策略; 另外对于WARP的proxy模式(或称为client模式),貌似只能通过socks方式使用,freedom里的redirect并不能将数据包传递给WARP。 socks出站代码示例:

{
  "protocol": "socks",
  "settings": {
    "servers": [
      {
        "address": "127.0.0.1",
        "port": 40000,
        "users": []
      }
    ]
  },
  "tag": "WARP",
  "streamSettings": {
    "sockopt": {
      "tcpFastOpen": true,
      "tcpcongestion": "bbr",
      "domainStrategy": "UseIPv4"
    }
  }
}

mark 学习下

fscarmen commented 1 year ago

我自己找到答案了,原来在sockopt里可以自己设置解析策略; 另外对于WARP的proxy模式(或称为client模式),貌似只能通过socks方式使用,freedom里的redirect并不能将数据包传递给WARP。 socks出站代码示例:

{
  "protocol": "socks",
  "settings": {
    "servers": [
      {
        "address": "127.0.0.1",
        "port": 40000,
        "users": []
      }
    ]
  },
  "tag": "WARP",
  "streamSettings": {
    "sockopt": {
      "tcpFastOpen": true,
      "tcpcongestion": "bbr",
      "domainStrategy": "UseIPv4"
    }
  }
}

我想要在一个 socks5 里,指定 a/b/c 网站 使用 socks5 的 ipv4,d/e/f 网络 使用 socks5 的ipv6 ,没有指定的其余全部使用原生的网络出口,请问配置文件应该如何呢?

chika0801 commented 1 year ago

你路由规则里,从上到下,第1组是abc走socksv5 第2组是def走v6

出站规则中,把默认出站排1位。没命中路由规则的,剩下的部分,就是走第1个出站。

fscarmen commented 1 year ago

现在我是这样使用的,但看 ExQzMeDeadpool 兄弟的用到 "streamSettings" 和 "sockopt",所以好奇这个方式比下面我正在使用的链式要好,在这基础上同时使用 warp-v4 和 warp-v6 又是如何处理的?

{
    "outbounds":[
        {
            "tag":"warp",
            "protocol":"socks",
            "settings":{
                "servers":[
                    {
                        "address":"127.0.0.1",
                        "port":40000
                    }
                ]
            }
        },
        {
            "tag":"WARP-socks5-v4",
            "protocol":"freedom",
            "settings":{
                "domainStrategy":"UseIPv4"
            },
            "proxySettings":{
                "tag":"warp"
            }
        },
        {
            "tag":"WARP-socks5-v6",
            "protocol":"freedom",
            "settings":{
                "domainStrategy":"UseIPv6"
            },
            "proxySettings":{
                "tag":"warp"
            }
        }
    ],
    "routing":{
        "rules":[
            {
                "type":"field",
                "domain":[
                    "openai",
                    "ai.com",
                    "ip.gs"
                ],
                "outboundTag":"WARP-socks5-v4"
            },
            {
                "type":"field",
                "domain":[
                    "p3terx.com",
                    "netflix"
                ],
                "outboundTag":"WARP-socks5-v6"
            }
        ]
    }
}
chika0801 commented 1 year ago

ExQzMeDeadpool 兄弟的用到 "streamSettings" 和 "sockopt",

我查了下他用法,文档写的用那参数,要求使用(有)xray内置dns,你要在配置中加下,我还没试。你写模板我建议你就用链式代理形式,不然怕别人搞不懂。

chika0801 commented 1 year ago
    {
        "protocol": "freedom",
        "tag": "direct"
    },

你把这段放在最前,是出站第1个,实现你的目的

没有指定的其余全部使用原生的网络出口

fscarmen commented 1 year ago
    {
        "protocol": "freedom",
        "tag": "direct"
    },

你把这段放在最前,是出站第1个,实现你的目的

没有指定的其余全部使用原生的网络出口

他的顺序不是从上到下逐一匹配规则的啊?而是把默认的放第一条,然后下面第N条命中,就走第N条,如果都不命中,就走第一条,是这样吧?那我的模板还要改一下。

chika0801 commented 1 year ago
    {
        "protocol": "freedom",
        "tag": "direct"
    },

你把这段放在最前,是出站第1个,实现你的目的

没有指定的其余全部使用原生的网络出口

他的顺序不是从上到下逐一匹配规则的啊?而是把默认的放第一条,然后下面第N条命中,就走第N条,如果都不命中,就走第一条,是这样吧?那我的模板还要改一下。

是这逻辑,我以为你一直知道,指南看这

https://xtls.github.io/Xray-docs-next/document/level-1/routing-lv1-part1.html

出站是。路由模块里的规则也是从上到下匹配,没命中的走第1个出间。

我以为你懂这些

fscarmen commented 1 year ago

我以为你懂这些

有一说一,不懂的,之前都是抄你的模板为主,包括现在我也不会改 sing-box

现在改为这个完美了

{
    "outbounds":[
        {
            "protocol":"freedom"
        },
        {
            "tag":"warp",
            "protocol":"socks",
            "settings":{
                "servers":[
                    {
                        "address":"127.0.0.1",
                        "port":40000 // 填写你的 socks5 端口
                    }
                ]
            }
        },
        {
            "tag":"WARP-socks5-v4",
            "protocol":"freedom",
            "settings":{
                "domainStrategy":"UseIPv4"
            },
            "proxySettings":{
                "tag":"warp"
            }
        },
        {
            "tag":"WARP-socks5-v6",
            "protocol":"freedom",
            "settings":{
                "domainStrategy":"UseIPv6"
            },
            "proxySettings":{
                "tag":"warp"
            }
        }
    ],
    "routing":{
        "rules":[
            {
                "type":"field",
                "domain":[
                    "openai",
                    "ai.com",
                    "ip.gs"
                ],
                "outboundTag":"WARP-socks5-v4"
            },
            {
                "type":"field",
                "domain":[
                    "p3terx.com",
                    "netflix"
                ],
                "outboundTag":"WARP-socks5-v6"
            }
        ]
    }
}
chika0801 commented 1 year ago

看了没有问题的。 sing-box的在这 ,一样的思路。

话说我想起来我试过,下面这段加在Wireguard里是生不了效的。但是它对你用出站为scoks楼主测了有效。sing-box那边我没进一步研究了。就现在这链式代理吧,挺方便,用的也不用懂太多,一看也明白思路。

  "streamSettings": {
    "sockopt": {
      "tcpFastOpen": true,
      "tcpcongestion": "bbr",
      "domainStrategy": "UseIPv4"
    }
  }

我当时还看了你warp-go的脚本,学了下脚本思路,把手动安warp-go接管全局方式学会了。互相学习。

fscarmen commented 1 year ago

需求:建立一个outbound指向监听本地某端口的代理,并指定其解析为IPv4或IPv6。 目前用的是Socks出站,但我发现:

你也可以试试 Client 的 WARP 模式的,与 PROXY 模式在本地创建一个 socks5 代理不同,WARP 模式是在本地创建一个 CloudflareWARP 的网络接口。然后 xray 里通过网络接口名来分流,同样可以区分开 V4 , V6。之前简单做了个速度对比测试仅供参考: https://github.com/fscarmen/warp_unlock/issues/13#issuecomment-1113898629

chika0801 commented 1 year ago

建议你给的示例,用geosite里面的openai分类,有人定时维护,挺方便,比写单一域名的形式的话。

                "domain": [
                    "geosite:openai"
                ],
chika0801 commented 1 year ago

需求:建立一个outbound指向监听本地某端口的代理,并指定其解析为IPv4或IPv6。 目前用的是Socks出站,但我发现:

你也可以试试 Client 的 WARP 模式的,与 PROXY 模式在本地创建一个 socks5 代理不同,WARP 模式是在本地创建一个 CloudflareWARP 的网络接口。然后 xray 里通过网络接口名来分流,同样可以区分开 V4 , V6。之前简单做了个速度对比测试仅供参考: fscarmen/warp_unlock#13 (comment)

这模式我用你的warp-go脚本里看到了,我还试了下,看了个怎么实现的只用warp-go创建虚拟网卡不全局接管流量。

只是我平时也用得少,没花时间再去学什么。

fscarmen commented 1 year ago

这模式我用你的warp-go脚本里看到了,我还试了下,看了个怎么实现的只用warp-go创建虚拟网卡不全局接管流量。

只是我平时也用得少,没花时间再去学什么。

是的,一样的处理手法 , wgcf 也可以的,只要把 wgcf 的配置文件 wgcf.conf 下面的 AllowedIPs = 0.0.0.0/0, ::/0 去掉(注释掉),再加一样的路由规则可以。不过由于 menu.sh 脚本的非全局方案太丰富了,分别有 wireproxy / client proxy mode / client warp mode / dnsmasq + ipset / xray 配置文件放 warp 的链式代理 ,而且 warp-go 做了非全局了,所以 wgcf 就没有做了。

fscarmen commented 1 year ago

建议你给的示例,用geosite里面的openai分类,有人定时维护,挺方便,比写单一域名的形式的话。

                "domain": [
                    "geosite:openai"
                ],

用了 "geosite:openai" 就不用 "domain:openai.com" 和 "domain:ai.com"了吗? 我还看到有 "domain:p3terx.com" ,这样与直接 "p3etx.com" 有什么区别呢?

us254 commented 1 year ago
{
  "outbounds": [
    {
      "tag": "direct-out",
      "protocol": "freedom"
    },
    {
      "tag": "socks-out",
      "protocol": "socks",
      "settings": {
        "servers": [
          {
            "address": "127.0.0.1",
            "port": 4000
          }
        ]
      },
      "streamSettings": {
        "sockopt": {
          "domainStrategy": "UseIPv4"
        }
      }
    },
    {
      "tag": "socks6-out",
      "protocol": "socks",
      "settings": {
        "servers": [
          {
            "address": "127.0.0.1",
            "port": 4000
          }
        ]
      },
      "streamSettings": {
        "sockopt": {
          "domainStrategy": "UseIPv6"
        }
      }
    }
  ],
  "routing": {
    "rules": [
      {
        "type": "field",
        "outboundTag": "socks-out",
        "domain": [
          "a.com",
          "b.com",
          "c.com"
        ]
      },
      {
        "type": "field",
        "outboundTag": "socks6-out",
        "domain": [
          "d.com",
          "e.com",
          "f.com"
        ]
      },
      {
        "type": "field",
        "outboundTag": "direct-out"
      }
    ]
  }
}
chika0801 commented 1 year ago

用了 "geosite:openai" 就不用 "domain:openai.com" 和 "domain:ai.com"了吗?

opem分类中包含的域名你在这看 https://github.com/v2fly/domain-list-community/blob/master/data/openai

我还看到有 "domain:p3terx.com" ,这样与直接 "p3etx.com" 有什么区别呢?

区别文档链接 https://www.v2fly.org/config/routing.html#ruleobject

纯字符串:当此字符串匹配目标域名中任意部分,该规则生效。比如 sina.com 可以匹配 sina.com、sina.com.cn、sina.company 和 www.sina.com,但不匹配 sina.cn。

子域名(推荐):由 domain: 开始,余下部分是一个域名。当此域名是目标域名或其子域名时,该规则生效。例如 domain:v2ray.com 匹配 www.v2ray.com、v2ray.com,但不匹配 xv2ray.com。

看上面的解释应该没太大区别。

fscarmen commented 1 year ago
{
  "outbounds": [
    {
      "tag": "direct-out",
      "protocol": "freedom"
    },
    {
      "tag": "socks-out",
      "protocol": "socks",
      "settings": {
        "servers": [
          {
            "address": "127.0.0.1",
            "port": 4000
          }
        ]
      },
      "streamSettings": {
        "sockopt": {
          "domainStrategy": "UseIPv4"
        }
      }
    },
    {
      "tag": "socks6-out",
      "protocol": "socks",
      "settings": {
        "servers": [
          {
            "address": "127.0.0.1",
            "port": 4000
          }
        ]
      },
      "streamSettings": {
        "sockopt": {
          "domainStrategy": "UseIPv6"
        }
      }
    }
  ],
  "routing": {
    "rules": [
      {
        "type": "field",
        "outboundTag": "socks-out",
        "domain": [
          "a.com",
          "b.com",
          "c.com"
        ]
      },
      {
        "type": "field",
        "outboundTag": "socks6-out",
        "domain": [
          "d.com",
          "e.com",
          "f.com"
        ]
      },
      {
        "type": "field",
        "outboundTag": "direct-out"
      }
    ]
  }
}

我傍晚也是这样设置的,一直运行失败才发问的,经过一大轮测试,发现不要最后的 direct-out 的 routing 就成功了,而且能实现例外的都走原生出口,具体还需要大家给予讲解一下 运行日志

root@saopaulo2:~# /etc/argox/xray run -c /etc/argox/config.json 
Xray 1.7.5 (Xray, Penetrates Everything.) Custom (go1.20 linux/amd64)
A unified platform for anti-censorship.
2023/06/22 22:25:27 [Info] infra/conf/serial: Reading config: /etc/argox/config.json
Failed to start: main: failed to create server > app/router: this rule has no effective fields

改为这样就成功了

{
    "outbounds":[
        {
            "protocol":"freedom"
        },
        {
            "tag":"socks-out",
            "protocol":"socks",
            "settings":{
                "servers":[
                    {
                        "address":"127.0.0.1",
                        "port":4000
                    }
                ]
            },
            "streamSettings":{
                "sockopt":{
                    "domainStrategy":"UseIPv4"
                }
            }
        },
        {
            "tag":"socks6-out",
            "protocol":"socks",
            "settings":{
                "servers":[
                    {
                        "address":"127.0.0.1",
                        "port":4000
                    }
                ]
            },
            "streamSettings":{
                "sockopt":{
                    "domainStrategy":"UseIPv6"
                }
            }
        }
    ],
    "routing":{
        "rules":[
            {
                "type":"field",
                "outboundTag":"socks-out",
                "domain":[
                    "a.com",
                    "b.com",
                    "c.com"
                ]
            },
            {
                "type":"field",
                "outboundTag":"socks6-out",
                "domain":[
                    "d.com",
                    "e.com",
                    "f.com"
                ]
/*
            },
            {
                "type":"field",
                "outboundTag":"direct-out"
*/
            }
        ]
    }
}
fscarmen commented 1 year ago

用了 "geosite:openai" 就不用 "domain:openai.com" 和 "domain:ai.com"了吗?

opem分类中包含的域名你在这看 https://github.com/v2fly/domain-list-community/blob/master/data/openai

谢谢,我将加到我的 argox 的 README.md 里去

我还看到有 "domain:p3terx.com" ,这样与直接 "p3etx.com" 有什么区别呢?

区别文档链接 https://www.v2fly.org/config/routing.html#ruleobject

纯字符串:当此字符串匹配目标域名中任意部分,该规则生效。比如 sina.com 可以匹配 sina.com、sina.com.cn、sina.company 和 www.sina.com,但不匹配 sina.cn。

子域名(推荐):由 domain: 开始,余下部分是一个域名。当此域名是目标域名或其子域名时,该规则生效。例如 domain:v2ray.com 匹配 www.v2ray.com、v2ray.com,但不匹配 xv2ray.com。

看上面的解释应该没太大区别。

我看你的说明,我是这样理解的 "p3terx.com" 是属于纯字符串,只要域名字符串里有,并且是连着的就能匹配,比如 "project.xrayp3terx.com.x.net" 是可以匹配到的 而 "domain:p3terx.com" 是属于子域名,按域名后缀的规则,能匹配 "project.p3terx.com",但不能匹配 "project.xrayp3terx.com" 和 "p3terx.com.x.net" 即是前者都不是按域名规则处理了,只要访问的域名里有符合的字符串,就会匹配成功。后者是前者的真子集,符合后者的一定符合前者,反之则不然

toyo2333 commented 1 year ago
{
  "outbounds": [
    {
      "tag": "direct-out",
      "protocol": "freedom"
    },
    {
      "tag": "socks-out",
      "protocol": "socks",
      "settings": {
        "servers": [
          {
            "address": "127.0.0.1",
            "port": 4000
          }
        ]
      },
      "streamSettings": {
        "sockopt": {
          "domainStrategy": "UseIPv4"
        }
      }
    },
    {
      "tag": "socks6-out",
      "protocol": "socks",
      "settings": {
        "servers": [
          {
            "address": "127.0.0.1",
            "port": 4000
          }
        ]
      },
      "streamSettings": {
        "sockopt": {
          "domainStrategy": "UseIPv6"
        }
      }
    }
  ],
  "routing": {
    "rules": [
      {
        "type": "field",
        "outboundTag": "socks-out",
        "domain": [
          "a.com",
          "b.com",
          "c.com"
        ]
      },
      {
        "type": "field",
        "outboundTag": "socks6-out",
        "domain": [
          "d.com",
          "e.com",
          "f.com"
        ]
      },
      {
        "type": "field",
        "outboundTag": "direct-out"
      }
    ]
  }
}

我傍晚也是这样设置的,一直运行失败才发问的,经过一大轮测试,发现不要最后的 direct-out 的 routing 就成功了,而且能实现例外的都走原生出口,具体还需要大家给予讲解一下 运行日志

root@saopaulo2:~# /etc/argox/xray run -c /etc/argox/config.json 
Xray 1.7.5 (Xray, Penetrates Everything.) Custom (go1.20 linux/amd64)
A unified platform for anti-censorship.
2023/06/22 22:25:27 [Info] infra/conf/serial: Reading config: /etc/argox/config.json
Failed to start: main: failed to create server > app/router: this rule has no effective fields

改为这样就成功了

{
    "outbounds":[
        {
            "protocol":"freedom"
        },
        {
            "tag":"socks-out",
            "protocol":"socks",
            "settings":{
                "servers":[
                    {
                        "address":"127.0.0.1",
                        "port":4000
                    }
                ]
            },
            "streamSettings":{
                "sockopt":{
                    "domainStrategy":"UseIPv4"
                }
            }
        },
        {
            "tag":"socks6-out",
            "protocol":"socks",
            "settings":{
                "servers":[
                    {
                        "address":"127.0.0.1",
                        "port":4000
                    }
                ]
            },
            "streamSettings":{
                "sockopt":{
                    "domainStrategy":"UseIPv6"
                }
            }
        }
    ],
    "routing":{
        "rules":[
            {
                "type":"field",
                "outboundTag":"socks-out",
                "domain":[
                    "a.com",
                    "b.com",
                    "c.com"
                ]
            },
            {
                "type":"field",
                "outboundTag":"socks6-out",
                "domain":[
                    "d.com",
                    "e.com",
                    "f.com"
                ]
/*
            },
            {
                "type":"field",
                "outboundTag":"direct-out"
*/
            }
        ]
    }
}

1,最后你脚本里用的哪种,是链式代理还是这种sockopt?速度上有区别么? 2,另外,我个人感觉还是proxy模式更灵活一些,不用接管全栈的流量,也安全一些。(相比warp模式或者wgcf的那种,还要小心添加路由表以防止vps失联),我之前在你那里也反馈过这个问题的需求,我当时同样的需求,用proxy解决不了,最后换wgcf搞好了。看到你们最近的讨论,发现proxy又可以了,那我后面打算再试一试换回来。 3,但有一个问题:相比wgcf,warp-cli的内存占用好像不小(我之前只用proxy模式内存都非常高)

fscarmen commented 1 year ago

1,最后你脚本里用的哪种,是链式代理还是这种sockopt?速度上有区别么?

我使用 https://github.com/XTLS/Xray-core/issues/1653#issuecomment-1602750109 下面的那个啊,应该是属于后者吧。速度区别我就没有试了。

2,另外,我个人感觉还是proxy模式更灵活一些,不用接管全栈的流量,也安全一些。 3,但有一个问题:相比wgcf,warp-cli的内存占用好像不小(我之前只用proxy模式内存都非常高)

我也挺喜欢client方案的,同时你可试试菜单14 那基于Client 的 Warp 模式,速度远远大于 proxy 模式。最近脚本处理了,让两者都很好的适配双栈了,但 Client 正如你第3点所说的,缺点是资源占用大,内存时不时大于100MB,去到200多MB的

(相比warp模式或者wgcf的那种,还要小心添加路由表以防止vps失联)

至于 vps 失联是由于配置文件错误,手动的时候没有注意好容易出问题,脚本的话自动检测好,发生的机率应该不高。

toyo2333 commented 1 year ago

1,最后你脚本里用的哪种,是链式代理还是这种sockopt?速度上有区别么?

我使用 #1653 (comment) 下面的那个啊,应该是属于后者吧。速度区别我就没有试了。

2,另外,我个人感觉还是proxy模式更灵活一些,不用接管全栈的流量,也安全一些。 3,但有一个问题:相比wgcf,warp-cli的内存占用好像不小(我之前只用proxy模式内存都非常高)

我也挺喜欢client方案的,同时你可试试菜单14 那基于Client 的 Warp 模式,速度远远大于 proxy 模式。最近脚本处理了,让两者都很好的适配双栈了,但 Client 正如你第3点所说的,缺点是资源占用大,内存时不时大于100MB,去到200多MB的

(相比warp模式或者wgcf的那种,还要小心添加路由表以防止vps失联)

至于 vps 失联是由于配置文件错误,手动的时候没有注意好容易出问题,脚本的话自动检测好,发生的机率应该不高。

我今天早上重新配置了一边,,依旧无效:无法让路由里指定的域名走socks5的ipv6出站。和我当时在你那里提问的结果一样。

       "rules": [
               {
                "type":"field",
                "outboundTag":"socks6-out",
                "domain":[
                    "domain:ip.sb",
                    "domain:test-ipv6.com",
                    "geosite:openai"
                ]
            },

.....
   "outbounds": [
        {
            "protocol": "freedom",
            "tag": "direct"
        },
        {
            "protocol": "blackhole",
            "tag": "block"
        },
        {
            "tag":"socks6-out",
            "protocol":"socks",
            "settings":{
                "servers":[
                    {
                        "address":"127.0.0.1",
                        "port":40000
                    }
                ]
            },
            "streamSettings":{
                "sockopt":{
                    "domainStrategy":"UseIPv6"
                }
            }
        }
    ],

把test-ipv6.com加入路由后,访问之后,结果如下:

你的公网 IPv4 地址是 xxxx---这里显示的是Cloudflare的IPv4地址

你的公网 IPv6 地址是 xxxx---这里显示的是Cloudflare的IPv6地址

你的运营商(ISP)是 CLOUDFLARENET

你已接入 IPv6,因此我们增加了一个标签页,显示你能否访问其他 IPv6 网站。[更多信息]

你已经有 IPv6 地址了,但你的浏览器不太愿意用,这一点比较令人担心。 [更多信息]

你的 DNS 服务器(可能由运营商提供)已经接入 IPv6 互联网了。
IPv6 状况评分
10/10   此分数表示你的系统对 IPv6 的支持程度和稳定性
点击查看 测试数据

2个ip地址都已经是warp后的地址了,但最终的结果就是浏览器访问时,是ipv4优先落地,达不到我希望ipv6的warp访问指定域名的目的。

再描述的清楚一点:我本身vps就是双栈机器,如果不用warp,直接访问都是ipv6优先访问目标网站。但套了warp后按上述配置后就不行了。

不是有了warp的ipv6地址就ok,要真正用它落地才算成功,你可以用这些来测试: https://chat.openai.com/cdn-cgi/trace http://ip6.me/ https://test-ipv6.com/

反正。在我这里无效。放弃。

azzvx commented 1 year ago

1,最后你脚本里用的哪种,是链式代理还是这种sockopt?速度上有区别么?

我使用 #1653 (comment) 下面的那个啊,应该是属于后者吧。速度区别我就没有试了。

2,另外,我个人感觉还是proxy模式更灵活一些,不用接管全栈的流量,也安全一些。 3,但有一个问题:相比wgcf,warp-cli的内存占用好像不小(我之前只用proxy模式内存都非常高)

我也挺喜欢client方案的,同时你可试试菜单14 那基于Client 的 Warp 模式,速度远远大于 proxy 模式。最近脚本处理了,让两者都很好的适配双栈了,但 Client 正如你第3点所说的,缺点是资源占用大,内存时不时大于100MB,去到200多MB的

(相比warp模式或者wgcf的那种,还要小心添加路由表以防止vps失联)

至于 vps 失联是由于配置文件错误,手动的时候没有注意好容易出问题,脚本的话自动检测好,发生的机率应该不高。

我今天早上重新配置了一边,,依旧无效:无法让路由里指定的域名走socks5的ipv6出站。和我当时在你那里提问的结果一样。

       "rules": [
             {
                "type":"field",
                "outboundTag":"socks6-out",
                "domain":[
                    "domain:ip.sb",
                    "domain:test-ipv6.com",
                    "geosite:openai"
                ]
            },

.....
   "outbounds": [
        {
            "protocol": "freedom",
            "tag": "direct"
        },
        {
            "protocol": "blackhole",
            "tag": "block"
        },
        {
            "tag":"socks6-out",
            "protocol":"socks",
            "settings":{
                "servers":[
                    {
                        "address":"127.0.0.1",
                        "port":40000
                    }
                ]
            },
            "streamSettings":{
                "sockopt":{
                    "domainStrategy":"UseIPv6"
                }
            }
        }
    ],

把test-ipv6.com加入路由后,访问之后,结果如下:

你的公网 IPv4 地址是 xxxx---这里显示的是Cloudflare的IPv4地址

你的公网 IPv6 地址是 xxxx---这里显示的是Cloudflare的IPv6地址

你的运营商(ISP)是 CLOUDFLARENET

你已接入 IPv6,因此我们增加了一个标签页,显示你能否访问其他 IPv6 网站。[更多信息]

你已经有 IPv6 地址了,但你的浏览器不太愿意用,这一点比较令人担心。 [更多信息]

你的 DNS 服务器(可能由运营商提供)已经接入 IPv6 互联网了。
IPv6 状况评分
10/10 此分数表示你的系统对 IPv6 的支持程度和稳定性
点击查看 测试数据

2个ip地址都已经是warp后的地址了,但最终的结果就是浏览器访问时,是ipv4优先落地,达不到我希望ipv6的warp访问指定域名的目的。

再描述的清楚一点:我本身vps就是双栈机器,如果不用warp,直接访问都是ipv6优先访问目标网站。但套了warp后按上述配置后就不行了。

不是有了warp的ipv6地址就ok,要真正用它落地才算成功,你可以用这些来测试: https://chat.openai.com/cdn-cgi/trace http://ip6.me/ https://test-ipv6.com/

反正。在我这里无效。放弃。

socks出站看你填的socks代理的地址,如果是ip地址,那么domainStrategy会被忽略,如果是域名需要解析,那么domainStrategy才会生效。另外,socks客户端传递的是域名,走v4还是走v6是服务端决定的,和Xray无关。你可以另外设一个warp为纯ipv6或ipv6优先,然后在xray里面填它。 xray出站的domainStrategy只影响xray自身对外连接的地址类型。比如用v4还是v6地址连接socks服务器。socks服务器服务器怎么连接与其无关。

toyo2333 commented 1 year ago

socks出站看你填的socks代理的地址,如果是ip地址,那么domainStrategy会被忽略,如果是域名需要解析,那么domainStrategy才会生效。另外,socks客户端传递的是域名,走v4还是走v6是服务端决定的,和Xray无关。你可以另外设一个warp为纯ipv6或ipv6优先,然后在xray里面填它。 xray出站的domainStrategy只影响xray自身对外连接的地址类型。比如用v4还是v6地址连接socks服务器。socks服务器服务器怎么连接与其无关。

问题就在这里“socks客户端传递的是域名,走v4还是走v6是服务端决定的,和Xray无关”

我在vps上执行 curl ip6.me/api/ 返回的是VPS的IPv6地址

执行 curl -x "socks5://127.0.0.1:40000" ip6.me/api/ 返回的是Warp的IPv6地址

但到了Xray里就变IPv4了。我的Xray都是默认设置没有任何DNS策略(意思也就是交给系统),系统都能做对,但到了xray就不对了。

我始终没有用办法用proxy模式搞定后来才换了wgcf。看到上面你们的方案居然成功了,不知道是怎么成功的。你最终测过那路由指定的网站的落地IP么?

https://chat.openai.com/cdn-cgi/trace http://ip6.me/ https://test-ipv6.com/

把这几个加进去验证下? 看看是不是真的成功了,还是说只是显示有warp的V6地址(不要用ip.sb 它不会告诉你你优先用那个ip访问它的)

要么是我错了,要么是你们错了。

chika0801 commented 1 year ago

https://github.com/XTLS/Xray-core/pull/2043 建议等这pr合了再试

toyo2333 commented 1 year ago

2043 建议等这pr合了再试

好的 谢谢。我的vps实际上是可以使用chatgpt的,我就是向再套一层,做ip保护稳定使用。这个是我的初衷。

不过我现在发现套了warp(目前是走ipv4出去,用geosite:openai),打开的chatgpt总是有些问题,比如页面某些东西加载不出来。或者无法使用。

不知道什么原因,猜测是要么是域名策略不完整,有漏掉的,要么就是ip不干净CF的ip被针对了

不是一个稳定的好办法。

azzvx commented 1 year ago

socks出站看你填的socks代理的地址,如果是ip地址,那么domainStrategy会被忽略,如果是域名需要解析,那么domainStrategy才会生效。另外,socks客户端传递的是域名,走v4还是走v6是服务端决定的,和Xray无关。你可以另外设一个warp为纯ipv6或ipv6优先,然后在xray里面填它。 xray出站的domainStrategy只影响xray自身对外连接的地址类型。比如用v4还是v6地址连接socks服务器。socks服务器服务器怎么连接与其无关。

问题就在这里“socks客户端传递的是域名,走v4还是走v6是服务端决定的,和Xray无关”

我在vps上执行 curl ip6.me/api/ 返回的是VPS的IPv6地址

执行 curl -x "socks5://127.0.0.1:40000" ip6.me/api/ 返回的是Warp的IPv6地址

但到了Xray里就变IPv4了。我的Xray都是默认设置没有任何DNS策略(意思也就是交给系统),系统都能做对,但到了xray就不对了。

我始终没有用办法用proxy模式搞定后来才换了wgcf。看到上面你们的方案居然成功了,不知道是怎么成功的。你最终测过那路由指定的网站的落地IP么?

https://chat.openai.com/cdn-cgi/trace http://ip6.me/ https://test-ipv6.com/

把这几个加进去验证下? 看看是不是真的成功了,还是说只是显示有warp的V6地址(不要用ip.sb 它不会告诉你你优先用那个ip访问它的)

要么是我错了,要么是你们错了。

我这边各种测试都OK,是CF的IPv6地址。 QQ截图20230626145823 QQ截图20230626145829 QQ截图20230626145834

toyo2333 commented 1 year ago

socks出站看你填的socks代理的地址,如果是ip地址,那么domainStrategy会被忽略,如果是域名需要解析,那么domainStrategy才会生效。另外,socks客户端传递的是域名,走v4还是走v6是服务端决定的,和Xray无关。你可以另外设一个warp为纯ipv6或ipv6优先,然后在xray里面填它。 xray出站的domainStrategy只影响xray自身对外连接的地址类型。比如用v4还是v6地址连接socks服务器。socks服务器服务器怎么连接与其无关。

问题就在这里“socks客户端传递的是域名,走v4还是走v6是服务端决定的,和Xray无关” 我在vps上执行 curl ip6.me/api/ 返回的是VPS的IPv6地址 执行 curl -x "socks5://127.0.0.1:40000" ip6.me/api/ 返回的是Warp的IPv6地址 但到了Xray里就变IPv4了。我的Xray都是默认设置没有任何DNS策略(意思也就是交给系统),系统都能做对,但到了xray就不对了。 我始终没有用办法用proxy模式搞定后来才换了wgcf。看到上面你们的方案居然成功了,不知道是怎么成功的。你最终测过那路由指定的网站的落地IP么? https://chat.openai.com/cdn-cgi/trace http://ip6.me/ https://test-ipv6.com/ 把这几个加进去验证下? 看看是不是真的成功了,还是说只是显示有warp的V6地址(不要用ip.sb 它不会告诉你你优先用那个ip访问它的) 要么是我错了,要么是你们错了。

我这边各种测试都OK,是CF的IPv6地址。 QQ截图20230626145823 QQ截图20230626145829 QQ截图20230626145834

谢谢反馈!那就是能实现。但我目前找不到我这里不成功的原因。

fscarmen commented 1 year ago

我发现有的地方 warp ipv4 可以,有的ipv6才行,所以要试试,也不知道是否能像奈飞那样换 ip 就可以,如果是,我弄到 warp 解锁那个项目处。

azzvx commented 1 year ago

谢谢反馈!那就是能实现。但我目前找不到我这里不成功的原因。

我这边所有的Xray,不论本地软路由还是VPS上的,配置里面都没有写domainStrategy,无论VPS还是WARP其实都是IPv6优先的。 只要Xray的入站开了域名嗅探,基本不会出现v4优先的情况。

toyo2333 commented 1 year ago

边所有的Xray,不论本地软路由还是VPS上的,配置里面都没有写domainStrategy,无论VPS还是WARP其实都是IPv6

我看了下我的,这样设置的

           "sniffing": {
                "enabled": true,
                "destOverride": [
                    "http",
                    "tls",
                    "quic"
                ]
            }

对么?

另外我的xray是1.8.3 用的是-beta参数安装的 最新的

azzvx commented 1 year ago

边所有的Xray,不论本地软路由还是VPS上的,配置里面都没有写domainStrategy,无论VPS还是WARP其实都是IPv6

我看了下我的,这样设置的

           "sniffing": {
                "enabled": true,
                "destOverride": [
                    "http",
                    "tls",
                    "quic"
                ]
            }

对么?

我下面发了一个完整的一次请求chat.openai.com/cdn-cgi/trace的日志,你可以和你自己的Xray日志对比一下哪部分有区别。 我的WARP是直接用Xray的wireguard协议配置的。

root@OWRT /root [25]# curl -Lkx socks5://127.0.0.1:8081 -H 'Host: chat.openai.com' '0.0.0.0/cdn-cgi/trace'
fl=466f106
h=chat.openai.com
ip=2a09:bac5:654c:1246::1d2:6a
ts=1687765648.688
visit_scheme=http
uag=curl/8.1.1
colo=SJC
sliver=none
http=http/1.1
loc=US
tls=off
sni=off
warp=on
gateway=off
rbi=off
kex=none

#路由器 xray_access.log
2023/06/26 15:47:28 tcp:127.0.0.1:56750 accepted tcp:0.0.0.0:80 [socks-in -> vps-reality]

#路由器 xray_error.log
2023/06/26 15:47:28 [Info] [1385509037] proxy/socks: TCP Connect request to tcp:0.0.0.0:80
2023/06/26 15:47:28 [Info] [1385509037] app/dispatcher: sniffed domain: chat.openai.com
2023/06/26 15:47:28 [Info] [1385509037] app/dispatcher: taking detour [vps-reality] for [tcp:chat.openai.com:80]
2023/06/26 15:47:28 [Info] [1385509037] transport/internet/tcp: dialing TCP to tcp:[VPS]:433
2023/06/26 15:47:28 [Info] [1385509037] proxy/vless/outbound: tunneling request to tcp:chat.openai.com:80 via [VPS]:433
2023/06/26 15:47:28 [Info] [1385509037] proxy/vless/encoding: XtlsPadding 91 59 0
2023/06/26 15:47:28 [Info] [1385509037] proxy/vless/encoding: Xtls Unpadding new block0 16 content 554 padding 189 0
2023/06/26 15:47:29 [Info] [1385509037] app/proxyman/inbound: connection ends > proxy/socks: connection ends > context canceled

#VPS xray_access.log
2023/06/26 03:47:28 [CLIENT]:54458 accepted tcp:chat.openai.com:80 [tcp_reality >> wireguard]

#VPS xray_error.log
2023/06/26 03:47:28 [Info] [3519833748] proxy/vless/inbound: firstLen = 227
2023/06/26 03:47:28 [Info] [3519833748] proxy/vless/inbound: received request for tcp:chat.openai.com:80
2023/06/26 03:47:28 [Info] [3519833748] proxy/vless/encoding: Xtls Unpadding new block0 16 content 91 padding 59 0
2023/06/26 03:47:28 [Info] [3519833748] app/dispatcher: sniffed domain: chat.openai.com
2023/06/26 03:47:28 [Info] [3519833748] app/dispatcher: default route for tcp:chat.openai.com:80
2023/06/26 03:47:28 [Info] [3519833748] proxy/vless/encoding: XtlsPadding 554 189 0
2023/06/26 03:47:30 [Info] [3519833748] app/proxyman/inbound: connection ends > proxy/vless/inbound: connection ends > context canceled
toyo2333 commented 1 year ago

ng detour [vps-reality] for [tcp:chat.ope

谢谢。原来你和我的warp方案不同,我之前用wgcf也ok的,我只是用warp-cli客户端的proxy模式不行。我奇怪的是上面那几位说 用proxy可以。

azzvx commented 1 year ago

ng detour [vps-reality] for [tcp:chat.ope

谢谢。原来你和我的warp方案不同,我之前用wgcf也ok的,我只是用warp-cli客户端的proxy模式不行。我奇怪的是上面那几位说 用proxy可以。

实际我之前也用的proxy,后来xray直接支持了就改用xray了,两者用起来没区别,还更方便了.

lxsq commented 1 year ago

socks出站看你填的socks代理的地址,如果是ip地址,那么domainStrategy会被忽略,如果是域名需要解析,那么domainStrategy才会生效。另外,socks客户端传递的是域名,走v4还是走v6是服务端决定的,和Xray无关。你可以另外设一个warp为纯ipv6或ipv6优先,然后在xray里面填它。 xray出站的domainStrategy只影响xray自身对外连接的地址类型。比如用v4还是v6地址连接socks服务器。socks服务器服务器怎么连接与其无关。

问题就在这里“socks客户端传递的是域名,走v4还是走v6是服务端决定的,和Xray无关”

我在vps上执行 curl ip6.me/api/ 返回的是VPS的IPv6地址

执行 curl -x "socks5://127.0.0.1:40000" ip6.me/api/ 返回的是Warp的IPv6地址

但到了Xray里就变IPv4了。我的Xray都是默认设置没有任何DNS策略(意思也就是交给系统),系统都能做对,但到了xray就不对了。

我始终没有用办法用proxy模式搞定后来才换了wgcf。看到上面你们的方案居然成功了,不知道是怎么成功的。你最终测过那路由指定的网站的落地IP么?

https://chat.openai.com/cdn-cgi/trace http://ip6.me/ https://test-ipv6.com/

把这几个加进去验证下? 看看是不是真的成功了,还是说只是显示有warp的V6地址(不要用ip.sb 它不会告诉你你优先用那个ip访问它的)

要么是我错了,要么是你们错了。

使用内核WireGuard,IPv4出站和IPv6出站是分开的。 用下面的Routing配置在访问ip6.me/api/ - Dual stack IPv6 and IPv4 (preference depends on your OS/client)的时候显示的是IPv6地址。但是访问https://chat.openai.com/cdn-cgi/trace的时候显示是IPv4。

{
    "type": "field",
    "user": ["VLESS_warp"],
    "ip": ["2::/3"],
    "outboundTag": "warp-IPv6-out"
},
{
    "type": "field",
    "user": ["VLESS_warp"],
    "ip": ["0.0.0.0/0"],
    "outboundTag": "warp-IPv4-out"
}
toyo2333 commented 1 year ago

搞定了,最后用链式代理的方法实现了,通过warp的proxy模式分流指定域名走ipv6的流量出站

路由规则如下:

               {
                "type":"field",
                "outboundTag":"WARP-socks5-v6",
                "domain":[
                    "domain:ip.sb",
                    "domain:test-ipv6.com",
                    "domain:ip6.me",
                    "geosite:openai"
                ]
            },

出站写法,增加一个freedom协议的出站设置它再走代理:


       {
            "tag":"warp",
            "protocol":"socks",
            "settings":{
                "servers":[
                    {
                        "address":"127.0.0.1",
                        "port":40000
                    }
                ]
            }
        },
        {
            "tag":"WARP-socks5-v6",
            "protocol":"freedom",
            "settings":{
                "domainStrategy":"UseIPv6"
            },
            "proxySettings":{
                "tag":"warp"
            }
        }