|
本帖最后由 zhea55 于 2020-5-5 09:17 编辑
我的方法是发挥公共dns的最大作用,返璞归真。
移除以下功能:
1. smartdns(作用比较有限)
2. dnsmasq(作用不大,还很坑,passwall里面也用到了这个,针对国外的域名它有一个默认配置好的ipset,命中ipset的域名会直接返回写死的ip,写死的ip并不一定是你的小鸡访问速度最快的ip)。
国外小鸡ping谷歌dns,这种延迟就是每次去谷歌服务器拿ip,速度都非常快,完全不需要各种dns工具(这些公开dns都会给你返回相对于你位置最快的ip,不需要再做额外的操作)
参考网上的教程,配置好smartdns,adguardhome,passwall以后,我感觉有一个地方不对劲
adguard home里面所有的dns请求都是由localhost发起
这有一个什么问题呢?
当你访问google.com时
我原以为:google.com的域名通过v贰瑞加密,经过防火墙,到达VPS主机,主机发起到我本地的dns请求,拿到原始ip,然后下载数据,再通过v贰瑞回传
实际上:google.com的域名通过china-dns-ng,判断出是国外域名,有两种情况(google.com是第一种情况):
1. 它直接从ipset里面掏了一个ip出来,都不请求它的上游服务器,然后把这个ip返回给你,这个ip不一定是你的小鸡访问最快的ip
2. 域名没有匹配它的ipset,它去上游服务器查询ip。这个查询操作,最次的情况是返回了一个你本地访问最快的ip,这个ip给到VPS,结果VPS飘洋过海访问一个最慢的ip。
最好的情况是返回了一个你VPS访问最快的ip。虽然返回的是最快的ip,但是它的姿势,有严重的问题。
这里我引用L大的原话,获取这个VPS最快ip的逻辑。
固件 DNS 的逻辑是, 国外域名会通过 乳酸菌饮料 Plus 内部的 PDNSD 会走 乳酸菌饮料 的转发工具(SS/乳酸菌饮料/V2 等)建立的隧道到 VPS 节点,然后由 VPS 通过 TCP DNS 查询 8.8.8.8 等 BGP 服务器,获得离 VPS 节点最优的 CDN DNS 查询记录,这样你的手工竹手工竹手工竹手工竹手工竹手工竹手工竹手工竹梯子才是速度最快的
仔细理解这句话,你就会发现,获取ip流程图如下(我个人猜测的,如有不对,欢迎指正):
china-dns-ng发现你访问的域名是国外的服务器 -> 通过v贰瑞建立的连接到VPS上去查询ip -> VPS查询到ip之后把结果返回给本地 -> 本地再把ip发送给服务器端
这其中的问题就是,谁发起的请求,谁就能拿到结果。这里的请求是在我们本地发起的,结果一定要VPS请求得出,然后传送回来。传送回来的ip,本地拿到了没有鸟用,又把ip再次发送给服务器。
也就是说,每次查询一个域名的ip,它都要一来一回。
想想你国外小鸡在国内的访问延迟。
这里我给到的解决方案,就是直接在服务器端进行dns查询,这样获取ip的流程图如下:
域名通过v贰瑞传输到VPS -> VPS拿到域名,自己进行dns解析 -> 拿到ip后马上开始下载内容
对比可以发现,这里只有一次往服务器传递,服务器就能马上拿到ip,开始下载内容(前提是VPS访问公共dns速度很快,当然这个前提很容易满足)。
最终优化后的操作步骤:
1. VPS上配置v贰瑞,使用公共dns,然后重启v贰瑞
- {
- "dns": {
- "servers": [
- "8.8.8.8"
- ]
- },
- "inbounds": [
- {
- "port": 12345,
- "listen":"127.0.0.1",
- "protocol": "vmess",
- "settings": {
- "clients": [
- {
- "id": "f0c680c4-752b-48eb-9363-0e7b5bb8201a",
- "alterId": 64
- }
- ]
- },
- "streamSettings": {
- "network": "ws",
- "wsSettings": {
- "path": "/ray"
- }
- }
- }
- ],
- "outbounds": [
- {
- "protocol": "freedom",
- "settings": {
- "domainStrategy": "UseIP"
- }
- }
- ]
- }
复制代码
2. passwall设置
如果需要去除国外广告,可以把上面的8.8.8.8换成176.103.130.130 176.103.130.131
也可以试试nextdns,目前免费,可以去除广告,屏蔽黄色网站,有一个统计请求数据的web界面(跟adguard home差不多)
可能有人会问,使用这种53端口的dns不够私密。
仔细想想,之前的国外域名dns请求,都是在你本地发出的,所以你想要用tls,https。
我的这种方法,由于是在VPS上发起的dns请求,也是说已经到了墙外,所以用53端口速度更快。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|