在一些企业机构当中,存在部分DNS请求会被网关直接修改。造成无法访问的情况。而传统的socks代理也只能针对IP层面进行代理,当需要访问的地址以域名的形式存在的时候,DNS解析都是系统自动完成的,并不会走之前设置的socks代理,造成解析出来的IP错误,根本就轮不到使用之前用的代理。
因为早期DNS协议设计的时候并没有考虑安全和加密,造成默认的UDP DNS请求全都是明文传输的,所以在传输过程中非常容易被篡改。
所以我们需要一个完全的方法来应对这种情况:
ISP会直接修改UDP DNS请求的数据包造成DNS污染。
我们可以尝试 DNS over HTTPS(DoH)和DNS over TLS (DoT)。
DoH采用的就是普通的https请求,比较推荐使用,通讯采用443端口。
DoT是有可能会被封锁的。因为其采用853端口,可能网络环境直接ban掉这种不常见端口(常见端口:80,443;8080)。在我的网络环境下,正好就无法outbound 853端口。
在最新版的Windows 10当中,可以看到DoT的身影,但是无法使用DoH。
以下的方案当中,我搭建了一个本地的UDP DNS Server,通过解析UDP DNS报文,将其转换成DoH的请求样式,通过Socks代理向提供DoH服务的提供商发送HTTPS请求,收到返回的请求之后再转换成UDP DNS报文模式返回响应。d
pip install encrypted-dns
第一次运行,直接运行该程序让其生成一个默认的配置文件。
encrypted-dns
生成的配置文件在"C:UsersAdministrator.configencrypted_dnsconfig.json"
下面的样式是我最终的配置,将【】标注的按照要求进行替换就可以进行使用。
建议在网络与共享中心当中设置固定ip地址
在我的网络环境下,https://8.8.8.8都被ban了。所以都要采用代理
{ "version": "1.2.0", "ecs_ip_address": "128.97.0.0", "dnssec": false, "dns_cache": { "enable": true, "override_ttl": 3600 }, "firewall": { "refuse_ANY": true, "AAAA_disabled": false, "rate_limit": 30, "client_blacklist": [ "128.97.0.0" ] }, "rules": { "force_safe_search": false, "hosts": { "localhost": "127.0.0.1", "cloudflare-dns.com": "1.0.0.1", "dns.google": "8.8.8.8", "dns2.google": "8.8.4.4" } }, "inbounds": [ "【本机的IP地址,注意不要用127.0.0.1】:53", "tcp://【本机的IP地址,注意不要用127.0.0.1】:5301" ], "outbounds": [ { "tag": "bootstrap", "dns": [ "8.8.8.8" ], "domains": [ "captive.apple.com", "connectivitycheck.gstatic.com", "detectportal.firefox.com", "msftconnecttest.com", "nmcheck.gnome.org", "pool.ntp.org", "time.apple.com", "time.asia.apple.com", "time.euro.apple.com", "time.nist.gov", "time.windows.com" ] }, { "tag": "unencrypted", "dns": [ "udp://114.114.114.114", "udp://114.114.115.115", "udp://223.5.5.5" ], "concurrent": false, "domains": [ "sub:163.com", "include:baidu.com" ] }, { "tag": "encrypted", "dns": [ "https://dns.google", "https://dns2.google" ], "proxies": { "http": "http://【代理用户名】:【代理密码】@127.0.0.1:【端口】", "https": "http://【代理用户名】:【代理密码】@127.0.0.1:【端口】" }, "concurrent": false, "domains": [ "include:【要防止被污染的域名】", ] } ] }
去掉IPv6,就是将这个勾去掉。因为测试过程中会发现很多应用默认采用的都是IPv6进行请求。其实也可以在IPv6地址的DNS当中进行设置,但是也会可能在后续的socks代理当中出现问题就干脆直接去掉了。
如果要进行IPv6,首先需要确定你的socks代理支持ipv6,然后在上面的配置文件当中
"inbounds": [ "【本机的IP地址,注意不要用127.0.0.1】:53", "【本机的IP地址,IPv6】:53", "tcp://【本机的IP地址,注意不要用127.0.0.1】:5301" "tcp://【本机的IP地址,IPv6】:5301" ],
设置两个bind的地址就可以同时也监听上ipv6地址。
在ipv4当中这样设置。ipv6同理
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)