pymumu / smartdns

A local DNS server to obtain the fastest website IP for the best Internet experience, support DoT, DoH. 一个本地DNS服务器,获取最快的网站IP,获得最佳上网体验,支持DoH,DoT。
https://pymumu.github.io/smartdns/
GNU General Public License v3.0
8.51k stars 1.09k forks source link

求问一个设置通过代理请求远程dns的问题 #1372

Closed chris7395328 closed 9 months ago

chris7395328 commented 1 year ago

我的应用场景是这样的,openwrt开启ipv6,使用openclash代理,然后我需要双栈ip优选和屏蔽代理网站的ipv6功能,因此我用了smartdns的分流功能,dns劫持为smartdns默认端口,另外开一个专门的端口5335,上游设置为cf的dns,加上-proxy,指向openclash的sock5,我的理解是这样就是通过代理去请求dns,然后openclash填写唯一dns上游是smartdns的5335,

然后因为5335这个上游dns是通过sock5代理的,我的节点是填域名(cf优选),所以openclash没办法通过5335这个唯一dns)得到我节点的ip,因为这个dns是通过我节点去请求的,所以就等于我没法使用代理了,我只能把5335的上有服务器取消代理才行,但是这样我就不能远程请求dns了。

请问这种情况我的最优选择是怎么做?需求就是想用smart的分流,又想通过现有的节点去实现外网请求远程dns

pymumu commented 1 year ago

https://pymumu.github.io/smartdns/config/forwarding-with-ipset/

看这里,不需要第二dns

chris7395328 commented 1 year ago

https://pymumu.github.io/smartdns/config/forwarding-with-ipset/

看这里,不需要第二dns

意思是直接用smartdns内部的ip域名分流来定那些ip去用代理服务器的dns 么,然后openclash那边就不设置smartdns作为上游dns了,恢复回它原本的dns设置么

chris7395328 commented 1 year ago

我是不是可以这样理解,我在5335端口设置的第二dns上游服务器本来就只有谷歌的,这个请求本身就会被翻墙插件识别为走代理,那么我不设置-proxy其实也是可以的,这个请求还是通过远程服务器请求的

PikuZheng commented 1 year ago

有一个变通的方法,是将cf的域名填到smartdns的上游中并且单独指定一个组且从默认组中排除。这时cf这个域名由smartdns的bootstrap配置项负责解析并缓存,其他软件就可以通过smartdns拿到这个解析结果,且smartdns不会真正的使用这个cf域名作为上游。

PikuZheng commented 1 year ago

也可能我没完全理解,总觉得楼主的设置有些绕圈

pymumu commented 1 year ago

openwrt的话可以直接在界面配置。

# 分组域名查询使用的DNS服务器,服务器通过socks代理请求。
server 8.8.8.8 -proxy socks -group oversea -exclude-default-group
proxy-server socks5://192.168.1.1:1080 -name socks

# 分组域名列表,以及对应规则设置。
domain-set -name domain-list -file /path/to/domain.list
domain-rules /domain-set:domain-list/ -c none -address #6 -nameserver oversea

上述IP地址换成实际的, /path/to/domain.list配置要分流的域名。 其他配置按照国内配置即可。 第二DNS不是必须,不清楚用法,建议就不用。

仔细看我给你那个页面的说明吧。

chris7395328 commented 1 year ago

openwrt的话可以直接在界面配置。

# 分组域名查询使用的DNS服务器,服务器通过socks代理请求。
server 8.8.8.8 -proxy socks -group oversea -exclude-default-group
proxy-server socks5://192.168.1.1:1080 -name socks

# 分组域名列表,以及对应规则设置。
domain-set -name domain-list -file /path/to/domain.list
domain-rules /domain-set:domain-list/ -c none -address #6 -nameserver oversea

上述IP地址换成实际的, /path/to/domain.list配置要分流的域名。 其他配置按照国内配置即可。 第二DNS不是必须,不清楚用法,建议就不用。

仔细看我给你那个页面的说明吧。

谢谢,我大概理解了。这个分组域名就是直接把需要代理的域名写进列表,代理插件关闭dns功能只做ip代理,我看了下好像passwall是有直接把列表导进smartdns的功能比较方便,openclash好像没有,有什么方法可以把oplash的分流规则导进smartclash么

这个是我目前的设置

bind :6153  -group cn
bind :5335  -group fq_dns -no-speed-check -no-cache -force-aaaa-soa

proxy-server socks5://Clash:xxx@127.0.0.1:7891 -name socks5
# proxy-server socks5://127.0.0.1:1080 -name socks5

domain-rules /我的优选域名/ -c none -address #6 -nameserver cn

server 223.5.5.6 -group cn
server 119.29.29.29  -group cn 
server 114.114.114.114  -group cn -check-edns

server-tls 1dot1dot1dot1.cloudflare-dns.com -group fq_dns -exclude-default-group -proxy socks5

把我的代理优选域名写进了域名规则,用直连dns来解析,目前已经实现了最初的需求,不过就是如你所说的用了第二dns服务器,还是有些绕,另外一个问题是,因为clash用了smart做解析所以得到的都是ip,就用不了clash本身配置的域名分流了,只能匹配到ip规则,这个有什么好的解决方法么