【进阶•DNS代理篇】最完美的DNS解决方案?通过代理DNS请求获取正确的ip,杜绝DNS泄露和DNS污染,解决透明代理下fake 您所在的位置:网站首页 启用dns代理好不好 【进阶•DNS代理篇】最完美的DNS解决方案?通过代理DNS请求获取正确的ip,杜绝DNS泄露和DNS污染,解决透明代理下fake

【进阶•DNS代理篇】最完美的DNS解决方案?通过代理DNS请求获取正确的ip,杜绝DNS泄露和DNS污染,解决透明代理下fake

2024-07-11 03:50| 来源: 网络整理| 查看: 265

查询dns泄露:https://ipleak.net 透明代理文档:https://xtls.github.io/document/level-2

视频教程

视频地址:https://youtu.be/50iVDmqzDW8

上节我们已经讲过了clash在系统代理和透明代理下的执行流程由于redir-host的模式存在诸多问题原版clash已经将该功能移除了只剩下fake-ip模式我们也说过fake-ip虽然能降低延迟但是这种侵入式的解决方案并不完美在某些使用场景下会出现问题难道就没有更好的解决方案了吗这就是我们本期的主要内容通过v2ray的流量嗅探以及DNS代理解决DNS泄漏和DNS污染的问题并且没有fake-ip存在的那些问题v2ray也有fake-ip功能叫做fakeDNS由于上期已经介绍过了clash的fake-ip关于v2ray的fake DNS就不再讨论了原理是一样的另外视频中讲的v2ray并不仅仅指代v2ray像是xraysing-box以及clash.Meta都能进行类似的处理只是配置的方式不太一样所以把视频中的v2ray换成其他内核也是同样的理解方式先来回顾上节的内容创建一个最常见的家庭网络环境你在运营商拉了一条宽带他会给你分配一个光猫一般来讲你会单独再购买一台路由器连接光猫路由器通过PPPOE拨号获取运营商分配的公网IP同时运营商作为局域网的网关会有自己的内网ip地址假设为192.168.0.1家里的所有网络设备都会连接到这台路由器路由器通过DHCP为每一台网络设备分配一个内网IP以及默认网关DNS等信息一般情况下默认网关和DNS服务器都是路由器这是最常见的家庭网络拓扑先以第一节介绍过的系统代理为例当我们在电脑上运行v2rayN时其实它是调用了v2ray或者xray的内核并且加载了同目录下的config.json配置文件配置文件里主要用到了3个功能模块inbounDNS outbounDNS routting分别为入站 出站 路由我这里主要给大家讲讲数据包是怎么处理的不会给大家讲每一条命令的意思完整的说明请自行查阅官方文档首先inbounDNS通过socks协议监听了本机的10808端口此时浏览器访问谷歌由于设置了系统代理访问谷歌的请求会发送给10808端口v2ray从入站也就是inbounDNS的10808端口收到数据后得知浏览器要访问谷歌他要判断这个数据包该怎么走于是进入路由模块路由你可以理解为分流里面通过一系列的规则来确定数据包该走哪条路第一条指令确定了整个路由模块的域名解析策略为IPIfNonMatch先记住这个 很关键下面设置了3条路由规则会从上到下一条条进行匹配首先根据geosite判断域名是不是广告域名geosite是一个数据库里面包含了常见的域名分类如果是广告域名则将数据包发给tag为block的出站也就是outbounDNS里tag为block的这一条tag只是一个标识用于定位不同的出站连接标识可以随便填写 但是不能重复每条出站都要指定一个协议表示用什么协议来处理转发过来的数据block用到的协议是blackhole意为黑洞也就是你发过来的数据扔到黑洞里去相当于直接丢弃数据包达到广告屏蔽的效果很显然Google并不是一个广告域名无法匹配这条规则于是来到下一条匹配国内的ip地址geoip是一个IP数据库里面包含了常见的IP归属地分类如果匹配则将数据包发给tag为direct的出站也就是这条这条的出站协议为freedom相当于直连而我们用来进行匹配的是google.com这个域名很显然ip地址和域名是无法进行对比的此时就需要通过路由模块配置的域名解析策略来决定该怎么处理有3个选项AsIs IPIfNonMatch IPOnDomand如果使用的是IPOnDomand则会发起DNS请求获取谷歌的ip地址再和这条基于IP的规则进行对比由于我们的v2ray并没有配置DNS模块所以会使用系统的本地DNS进行解析v2ray会构建一条查询谷歌域名的DNS请求发送给电脑配置的本地DNS服器也就是路由器路由器再转发给上游DNS由于DNS是明文的此时就产生了DNS泄漏后面的DNS解析步骤就是之前泄露那期讲过的内容了大概率你会收到一条被污染的DNS响应假设谷歌的真实IP是4.4.4.4但是你收到的谷歌IP却是5.5.5.5这就是DNS污染v2ray拿到这个被污染的DNS响应以为谷歌的IP就是5.5.5.5于是用这个IP和geoip的规则进行匹配发现归属地不是国内所以不匹配于是进入下一条规则这是域名解析策略为IPOnDomand的行为而如果使用的是AsIs或者使用IPIfNonMatch则不会将域名解析成IP进行对比相当于上节讲的clash的IP规则后面加了no-resolve直接跳过了上面这条基于IP的规则接下来匹配CN的国内网站如果是访问国内的网站也走direct直连很显然谷歌不是于是继续向下匹配可是没有规则了此时又要根据域名解析策略来判断如果我们用的是AsIs或者IPOnDomand当没有匹配到任何规则时直接走第一条出站也就是tag为proxy的出站协议为shadowsocks也就是说数据会使用SS协议进行加密再发送给节点服务器而我们现在用的是IPIfNonMatch这种策略的行为是当没有匹配到任何规则时先判断是否之前有基于IP的匹配规则被跳过了如果有就将域名解析成IP进行匹配也就是说IPIfNonMatch第一次匹配的时候虽然跳过了基于IP的匹配规则但是当没有任何匹配的时候还是会回过头来再次进行IP规则的匹配所以需要将谷歌的域名解析成IP再来匹配一次此时v2ray发起了获取谷歌IP的DNS请求DNS的执行流程和刚才讲的IPOnDomand的一样大概率会获得一条被污染的IP用这个IP和geoip的规则进行匹配发现这个IP的归属地不是国内结果还是不匹配当没有匹配任何规则的时候会走第一条出站也就是走shadowsocks的代理这里要注意的是我们刚才解析获取到的被污染的谷歌IP仅仅是用来路由匹配规则的我们交给shadowsocks代理的内容还是谷歌的域名而不是被污染的ip地址代理收到数据后会在他的网络环境中进行DNS解析获取正确的谷歌ip地址所以即使本地被污染了也不影响代理正常访问谷歌但是由于刚才发起了明文的DNS请求所以使用这个配置的话存在DNS泄露解决方法就是我在DNS泄漏那期给大家讲的使用v2rayN的绕过大陆配置可以防止DNS泄漏但是如果使用绕过大陆模式而域名解析策略却使用IPOnDomand则还是存在DNS泄漏大家可以自己测试一下相信你能理解其中的原因其实使用黑名单模式也可以防止关键网站的DNS泄露比如YouTube Google等等只是测泄露的时候不太好判断屏幕上面这两条路由规则分别是v2rayN自带的绕过大陆模式和黑名单模式如果你理解了我刚才讲的内容看懂这几条规则也没什么难度了总结一下3种域名解析策略的区别AsIs 如果使用域名却碰到了基于IP的匹配规则则直接跳过IPOnDomand碰到基于IP的规则就马上发起DNS请求获取域名的IP进行匹配IPIfNonMatch首次匹配的时候直接跳过基于IP的规则当没有任何匹配的时候会发起DNS请求获取域名的IP回过头再来和刚才跳过的IP规则进行匹配最终没有任何匹配的时候三种策略都是一样 走第一条出站以上是v2ray在系统代理模式下的执行流程不难理解真正让人难以理解的是和上节讲clash一样在透明代理模式下的执行流程如果你是软路由的用户要想玩明白v2ray透明代理的知识必不可少否则只能抄作业而且也不知道抄的作业到底适不适合你自己我之前讲过我还没有用上软路由有些朋友说要给我众筹大家可能误会了我只是不想用并不是说用不起也不是说软路由不好只是大家的需求不一样我平时的使用场景很简单大多数情况下使用系统代理就够了 没必要使用软路由而且网络越复杂越难以控制比如DNS泄露的问题使用系统代理就很容易解决使用透明代理就很麻烦以后我也可能会为了做教程使用软路由先来改变一下当前的网络结构v2ray直接运行在路由器里路由器会通过iptables的redirect或者Tproxy功能将局域网其他设备访问互联网的数据转发给v2ray的入站具体iptables是怎么配我会把相关的链接放在视频下方的描述栏不过大家一般都用不到基本上都是直接使用软路由的插件SSRplus或者passwall会帮我们配置好电脑上没有运行任何代理工具跟系统代理主要的区别是透明代理的配置文件中添加了DNS模块和相应的分流配置此时浏览器访问谷歌根据DNS泄露篇讲的内容浏览器首先需要发起DNS请求获取谷歌的IPDNS默认使用UDP协议默认端口为53目标IP为本地配置的DNS服务器也就是路由器即使你的本地DNS不是路由器而是你自己填的公共DNS服务器比如114 数据包还是会来到路由器因为路由器作为局域网的网关是局域网设备通往互联网的出口路由器收到数据后会将DNS请求劫持到v2ray监听的12345端口v2ray从tag为all-in的入站收到数据后首先来到路由模块从上到下一条条进行规则匹配第一条 有好几个条件需要都满足才能匹配上首先查看入站tag是不是all-in也就是数据是不是从all-in进来的我们的数据确实是从tag为all-in的入站进来的所以匹配上了再看看目标端口是不是53也匹配上了再看看是不是UDP协议的数据包很明显也匹配上了所以这个数据包会交给tag为dns-out的出站处理数据将会来到这里由于这条出站的协议是DNS所以dns-out拿到数据后会交给内置的DNS模块相当于劫持了这条DNS请求内置的DNS模块会用自己配置的上游DNS查询谷歌的ip地址这里配置了两个DNS服务器8.8.8.8和114不像clash的并行查询v2ray会按顺序从上到下一个一个查询也不一定是按顺序具体要看你的DNS怎么配比如114配置了geosite表示国内的网站优先使用114进行DNS查询防止国内的网站交给国外的8.8.8.8解析导致绕路我这里只是视频演示v2ray的内置DNS功能非常强大你可以参考官方文档将DNS配置的非常细致由于谷歌并不是国内的网站所以不会优先使用114解析会从上到下开始进行DNS查询首先交给8.8.8.8构建了一条发给8.8.8.8的查询谷歌IP的DNS请求这条请求再次来到路由模块进行规则匹配首先匹配第一条规则虽然是发给53号端口的UDP协议但是数据并不是从tag为all-in的入站进来的而是从内置的DNS模块发过来的所以不匹配 下一条匹配114走direct 也不匹配再匹配下一条规则如果目标IP是1.1.1.1或者8.8.8.8就交给proxy很显然这条匹配上了于是数据会来到tag为proxy的出站所以这条DNS请求将会交给vmess协议加密处理由于vmess协议不支持原生UDP所以这条UDP的DNS请求会被封装到vmess的TCP协议里进行传输这种行为叫做UDP over TCP简称UoT加密后的vmess数据发送给了节点服务器节点拿到数据后会进行解密然后帮我们发起DNS请求获取到IP后再加密返回给我们v2ray收到数据后进行解密得到了谷歌的IP这个IP是节点服务器返回的正确无污染IP4.4.4.4然后v2ray将这个结果返回给浏览器浏览器拿到IP之后才能开始发起访问谷歌的HTTP请求这是第一种DNS的情况通过代理进行DNS查询再来看另一种情况假设一不小心手滑把8.8.8.8的分流规则配置成了直连也就是查询谷歌IP的DNS请求将会通过直连的方式交给8.8.8.8这样就存在DNS泄露并且得到的谷歌IP大概率是被污染的假设为5.5.5.5浏览器拿到这个被污染的IP发起了访问谷歌的HTTP请求数据来到路由器路由器会将数据转发给v2ray的入站v2ray拿到数据后如果直接交给路由模块处理由于被污染的IP没有匹配到任何规则最终将会走第一个出站也就是交给vmess处理数据包里封装的是被污染的IP就会出现和上期讲clash的redir-host的模式一样无法正确的访问谷歌但是我们的入站开启了sniffing也就是流量嗅探这个功能会探测HTTP请求里的域名通过嗅探v2ray将获得google.com这个域名然后用这个域名进行路由匹配由于没有匹配到任何规则将会走第一个出站也就是发给vmess节点由于我们开启了嗅探vmess加密的将会是嗅探到的域名节点拿到的是域名而不是被污染的IP将会在他的网络环境中再次发请DNS请求获取正确的谷歌IP并帮我们访问谷歌这就是流量嗅探的作用即使我们本地没有开启流量嗅探如果节点服务器开启了流量嗅探也可以解决被污染的问题我们发给节点服务器虽然是被污染的IP但节点可以嗅探出HTTP里面的域名重新发起DNS请求获取正确的谷歌IP这也是clash关闭redir-host的对远程DNS后使用有些节点代理被污染的IP也可以正常访问谷歌的原因不过clash已经弃用了redir-host的模式而clash.Meta对原版clash的DNS功能做了大幅增强同时支持域名嗅探所以redir-host的模式在clash.Meta中得以保留这就是v2ray在透明代理中数据的处理流程要比系统代理复杂的多对比clash的fake-ip返回一个假的IPv2ray这种处理方式返回真实的IP所以不会有fake-ip存在的那些问题不过也正因为需要返回真实的IP所以必须要发起DNS请求为了防止泄漏和污染可以将DNS请求发送给代理服务器帮我们查询但是这样做必然会增加延迟如果你的节点延迟比较高会肉眼可见的发现打开网页的速度变慢了而fake-ip虽然存在一些问题但是由于不用发起DNS请求获取真实的IP所以不会增加延迟具体哪种方式适合你就看各位的需求了



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有