大家知道在国内dns是被干扰的。而且在DNS干扰方面是越来越严重。这十多年干扰的方式过程是这样的:
1. 十年前干扰DNS,就是国内的DNS服务器将一些海外网站的IP换成一个不可到达的假IP。这时候,可以通过host,或者更换成国外的DNS服务器就可以避免干扰;
2. 后来除了DNS继续干扰,同时将一些网站IP直接丢包。如谷歌IP,即使你获得真的IP也无法连上;
3. 接着将国外多数DNS服务器IP直接丢包,这样即使你更换成国外的DNS服务器,发现已经连不上DNS服务器,所以也就查询不到海外网站的IP。
4. 再后来,国内建立个假的国外DNS服务器,如8.8.8.8 和1.1.1.1, 你发现ping是正常的。即使你将你的DNS服务器设置为上面这些DNS服务器,发现返回来的还是干扰的IP地址。因为你连上的就是一个假的“国外”DNS服务器。
针对上面的问题,一个解决方案是使用DNS Over HTTPS Proxy (DoH)+privoxy。 下面介绍如何在openwrt上使用DoH
1. 在Openwrt上输入命令:
opkg update
opkg install luci-app-https-dns-proxy
opkg install privoxy2. 设置privoxy
修改/etc/config/privoxy 文件,提换为如下内容:
config privoxy 'privoxy'
option confdir '/etc/privoxy'
option logdir '/var/log'
option logfile 'privoxy.log'
list listen_address '0.0.0.0:8118'
option forward_socks5 '/ 0.0.0.0:1080 .'这里假定你已经安装了sock5的代理,而且端口是1080。 安装privoxy的 原因是将socks5代理转成http的代理。我发现luci-app-https-dns-proxy不支持socks5,只支持http,虽然一些文档中说是支持socks5的。你们也可以尝试你们的是否可以支持socks5.
3. 设置luci-app-https-dns-proxy
如果你试试socks5, 可以将代理这里改成 socks5://127.0.0.1:1080 (但是我的不成功)。如果不设置代理,在个别区域DoH是没法使用的,因为如上面第4点原因,DoH是依靠bootstrap_dns (1.1.1.1), 这个IP地址本身就是假的。所以https的证书验证就没有通过,所以查询不到IP。只有通过国外代理的方式才能找到真正的IP。
4. 设置dnsmasq
编辑文件/etc/dnsmasq.conf, 在文件后面加上一行 server=127.0.0.1#5054
至于设置中需要用到的socks5代理,shadowsocks、vmess、vless、trojan、xray等等这些工具都能提供。这里不详细介绍。

没有评论:
发表评论