chika0801 / sing-box-examples

sing-box 配置示例
https://github.com/SagerNet/sing-box
1.8k stars 299 forks source link

为什么server不用设dns? #25

Closed univerioiln233 closed 1 year ago

univerioiln233 commented 1 year ago

例如我在vps 127.0.0.1设了doh DNS服务,client配置的dns是8.8.8.8。到服务端到底用的是127还是8.8? dns使用下面的方式符合singbox内部逻辑么
这么问的原因:,,我不需要sing实现的解析器(,主要是之前就用了dnsproxy在127.0.0.1起了一个dns解析器。我只想让sing转发所有dns请求(。(多起一个解析器,浪费性能嘛)

{
  "type": "dns",
  "tag": "dns-out"
}
改成
{
  "type": "dns",
  "tag": "direct-out-dns",

  "override_address": "127.0.0.1",
  "override_port": 53,
  "proxy_protocol": 0,

  ... // Dial Fields
}

之前客户端用clash、clash meta,服务端用sing,不知道dns这块 会不会 不兼容。


另,caddy分流  
    "layer4": {
        "servers": {
            "sni": {
                "listen": [
                    ":443"
                ],
                "routes": [
                    {
                        "match": [
                            {
                                "tls": {
                                    "sni": [
                                        "your domain of naive"
                                    ]
                                }
                            }
                        ],
                        "handle": [
                            {
                                "handler": "proxy",
                                "upstreams": [
                                    {
                                        "dial": [
                                            "127.0.0.1:1111443"
                                        ]
                                    }
                                ]
                            }
                        ]
                    },
                    {
                        "match": [
                            {
                                "tls": {
                                    "sni": [
                                        "www.lovelive-anime.jp"
                                    ]
                                }
                            }
                        ],
                        "handle": [
                            {
                                "handler": "proxy",
                                "upstreams": [
                                    {
                                        "dial": [
                                            "127.0.0.1:2222443"//your servers of shadowTLS
                                        ]
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        }
    },
chika0801 commented 1 year ago

配置修改地方如下,这样的问题是,要求你客户端是用的透明代理环境,客户端发的DNS请求到了服务端,被路由规则中的 53端口命中 DNS-out tag规则后,出站 "type": "direct", 就相当于是一个转发的作用。转到你指定的本机 53端口。

我想了下问题是你如果客户端是HTTP/SOCKS5代理环境,发到服务端的都是域名,下面的拦截规则生不了效,此时设你singbox配置中没写任何DNS部分,是用系统DNS,你用的DNS程序要拦截系统的UDP 53端口。

这是我想的原理,供你参数。建议你VPS端要么用sing-box内置的DNS挺方便,要不就不用其它DNS简单即好。搞复杂了要自己研究。

  "route": {
    "rules": [
      {
        "port": 53,
        "outbound": "DNS-out"
      }
    ]
  }
  "outbounds": [
    {
      "type": "direct"
    },
    {
      "type": "direct",
        "tag": "DNS-out",
        "override_address": "127.0.0.1",
        "override_port": 53
    }
  ],
univerioiln233 commented 1 year ago

后续,,

route-rule:
  "route": {
    "rules": [
      {
        "port": 53,
        "outbound": "dns-direct"
      },
      {
        "protocol": "dns",
        "outbound": "dns-direct"
      }

    ]

outbond:
{
  "type": "direct",
  "tag": "dns-direct",

  "override_address": "127.0.0.1",
  "override_port": 53
}

这是我server端现在用的配置,目前来看,我无法配置client端dns为tls://8.8.8.8 只能配置为8.8.8.8,以我的理解,tls 版的dns传到server端53端口,dns会无法处理(无法处理传入的tls-dns请求)。(尽管server端的dnsproxy添加了tls://8.8.8.8的upstream。

univerioiln233 commented 1 year ago

dns方案为https://dns.sb/doh/linux/

univerioiln233 commented 1 year ago

主要是,一方面 忘了在哪看到过 sing作者有提过 sing实现的解析器性能一般(记错可怼<(^-^)>),同时,dnsproxy是早就在用了。 另一方面,就算sing不需要用127.0.0.1的dns,系统的其他服务也需要用,这些内存占用是释放不了了,个人觉得去耦合还是有必要滴。

chika0801 commented 1 year ago

看了你上面的回复,想起那句群友总喜欢搞简单的问题搞复杂化。

我是简单就好派,上面的环境我也没这样用过,我不熟悉,帮不上了。

univerioiln233 commented 1 year ago

搜卡,example帮了很大忙,谢谢您

univerioiln233 commented 1 year ago

我想了下问题是你如果客户端是HTTP/SOCKS5代理环境,发到服务端的都是域名

昨天没仔细想这块。 即:如果用naiveproxy,发到服务端的是域名?sing-box的outbond是socks:127.0.0.1:1234

univerioiln233 commented 1 year ago

现在我这边的结论是:有那么一点意思,如果你有一个本地带乐观缓存的dns、同时用了双栈cloudflare-warp,不妨使用本地dns,少白嫖warp一点请求数。(如果你还是socks5环境的话,貌似更需要了)

chika0801 commented 1 year ago

我想了下问题是你如果客户端是HTTP/SOCKS5代理环境,发到服务端的都是域名

昨天没仔细想这块。 即:如果用naiveproxy,发到服务端的是域名?sing-box的outbond是socks:127.0.0.1:1234

逻辑是这样的 你客户端安装naiveproxy 监听本机的一个Scoks端口,前面你还是用v2rayN提供的http sokcs端口配合(sing-box核心)配置文件,使用分流规则,后发到本机的 ing-box的outbond是socks端口。它还不是前端来看,你使用的是HTTP/SOCKS5代理环境 ,naiveproxy 接收的也是域名。你要验证,最方便就是用sing-box开服务端,看时间日志,就知道服务端naive接收到的请求是域名还是IP了。

我只用sing-box开过naive协议当服务端,观察过的。

univerioiln233 commented 1 year ago

naiveproxy 接收的也是域名

使用CFW-tun-fakeip、多个naive-client、firefox内置proxy指向一个naiveprxoy的socks5端口。

变量是:firefox的proxy是否开启[Proxy DNS when using SOCKS v5]

firefox都能访问javbus.com

看naive回显:开proxy DNS via 5 >> 回显域名
关proxy DNS via 5 >> 回显ip

在回显ip的情况下,clash在用 [默认的] [另一个] naiveproxy来进行远端dns查询?

按我的理解,这就导致一个问题,两个naive服务端 一个在us 一个在eu的话,会造成服务延迟增加、路由浪费。不知道理解得对不对。

univerioiln233 commented 1 year ago

关proxy DNS via 5 >> naive-client回显ip 又试验了一次,clash选择的naive 没有新增回显。dns查询不回显or没有用它查询

chika0801 commented 1 year ago

naiveproxy 接收的也是域名

使用CFW-tun-fakeip、多个naive-client、firefox内置proxy指向一个naiveprxoy的socks5端口。

变量是:firefox的proxy是否开启[Proxy DNS when using SOCKS v5]

firefox都能访问javbus.com

看naive回显:开proxy DNS via 5 >> 回显域名 关proxy DNS via 5 >> 回显ip

在回显ip的情况下,clash在用 [默认的] [另一个] naiveproxy来进行远端dns查询?

按我的理解,这就导致一个问题,两个naive服务端 一个在us 一个在eu的话,会造成服务延迟增加、路由浪费。不知道理解得对不对。

看你说的你的环境 使用CFW-tun-fakeip、多个naive-client、firefox内置proxy指向一个naiveprxoy的socks5端口。 我陷入了沉默,我选择sing-box开tun出站到本机socks 用v2rayN管理配置的方案

univerioiln233 commented 1 year ago

不会回环吗。我试过clash开tun出站到本机socks 用nekory管理配置,但是访问不了网络

chika0801 commented 1 year ago

不会的,我的方案参考 https://github.com/chika0801/hysteria-install#%E7%94%B1-sing-box-%E6%8F%90%E4%BE%9B-tun-%E6%A8%A1%E5%BC%8F%E9%80%8F%E6%98%8E%E4%BB%A3%E7%90%86v2rayn-%E7%AE%A1%E7%90%86%E9%85%8D%E7%BD%AE

clash开tun我不用clash不熟悉它

chika0801 commented 1 year ago

dns方案为https://dns.sb/doh/linux/

我看了这个是在VPS上把DNS地址设置成127.0.0.1 ,它里面讲的是用dnsproxy监听本机53端口,查询转给如你需要的DOH。

你也可以把DNS地址设置成127.0.0.1 ,你让sing-box监听本机53端口,再通过sing-box配置转到sing-box内置DNS模块部分处理,实现的过程是一样的。

chika0801 commented 1 year ago

https://github.com/XTLS/Xray-core/discussions/2298#discussioncomment-6404401

这拿xray这样试了,原因是 1.8.3版本 Xray里面可以设置非A AAAA的DNS查询直接丢弃掉,我就是试了下这功能,再回看你问的,看到这点回下你。

当然你可能把简单的搞复杂我确实没这精力研究(学)这么多。

univerioiln233 commented 1 year ago

https://tachyondevel.medium.com/%E6%BC%AB%E8%B0%88%E5%90%84%E7%A7%8D%E9%BB%91%E7%A7%91%E6%8A%80%E5%BC%8F-dns-%E6%8A%80%E6%9C%AF%E5%9C%A8%E4%BB%A3%E7%90%86%E7%8E%AF%E5%A2%83%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8-62c50e58cbd0
学到了