神代綺凜

[overture] 无污染的智能 DNS 折腾记 #4
我是在大概三个月前得知了 overture 并开始使用,其相对 ChinaDNS 的优点是设置更丰富、使用国内外 ...
扫描右侧二维码阅读全文
22
2018/10

[overture] 无污染的智能 DNS 折腾记 #4

我是在大概三个月前得知了 overture 并开始使用,其相对 ChinaDNS 的优点是设置更丰富、使用国内外 DNS 的判断逻辑更完善、支持 ECS (edns-client-subnet),并且设置比 Pcap DNSProxy 简单很多。

本文会介绍在 PC 及 openwrt 路由器上部署 overture 的方法和要点。

即便现在由于 SNI 阻断,无污染 DNS 的作用越来越小,但这还是我此生不变的信仰(x

Head Pic: 「雨上がり」/「Mauve」のイラスト [pixiv]

overture

这是 Go 语言编写的一个 DNS 服务端

你可以直接在 Releases 页面下载到编译好的可执行文件

Windows 请下载overture-windows-386.zip(32位)或overture-windows-amd64.zip(64位)
Linux 请根据架构下载对应版本,常见的x86_64请下载overture-linux-arm64.zip
Openwrt 路由器请下载overture-linux-mipsle.zip(32位)或overture-linux-mips64le.zip(64位)

配置

此处稍微解释下配置内容,过于简单的部分就不赘述了
你也可以在项目 README 看到完整的英文说明

{
    "BindAddress": ":53",
    "PrimaryDNS": [{    //主DNS:一般使用国内DNS
        "Name": "DNSPod",
        "Address": "119.29.29.29:53",
        "Protocol": "udp",
        "SOCKS5Address": "",
        "Timeout": 6,
        "EDNSClientSubnet": {   //ECS设置,在后文详述
            "Policy": "auto",
            "ExternalIP": ""
        }
    }],
    "AlternativeDNS": [{    //备DNS:一般使用支持非53端口的国外DNS
        "Name": "OpenDNS",
        "Address": "208.67.222.222:443",
        "Protocol": "tcp",
        "SOCKS5Address": "",
        "Timeout": 6,
        "EDNSClientSubnet": {
            "Policy": "disable",
            "ExternalIP": ""
        }
    }],
    "OnlyPrimaryDNS": false,
    "IPv6UseAlternativeDNS": false, //对于IPv6是否仅使用备DNS查询的作为结果
    "IPNetworkFile": {  //IP黑白名单配置,在后文详述
        "Primary": "./ip_network_primary_sample",
        "Alternative": "./ip_network_alternative_sample"
    },
    "DomainFile": {     //域名黑白名单配置,在后文详述
        "Primary": "./domain_primary_sample",
        "Alternative": "./domain_alternative_sample"
    },
    "HostsFile": "./hosts_sample",  //指定Hosts
    "MinimumTTL": 0,    //解析记录最小缓存时间(秒),0则不使用
    "CacheSize": 0,     //缓存条数,0则不使用
    "RejectQtype": [255]
}

ECS

不清楚 edns-client-subnet 可先百度了解

国内的话目前 DNSPod 有 EDNS 支持
国外的话谷歌支持,但是谷歌不支持非53端口查询,如果非要用得设置 SOCKS5Address,因此还是用 OpenDNS 更加方便

  • Policy 可填以下几种
    • auto:如果客户端IP不是保留IP(你可以简单的将保留IP理解成 内网IP + localhost),则使用客户端IP,否则使用 ExternalIP
    • manual:如果 ExternalIP 不为空则使用,否则当客户端IP不是保留IP的时候使用客户端IP
    • disable:关闭该功能
  • ExternalIP(外部IP)
    如果该项为空并且发起查询请求的IP不是外部IP,则该功能会被禁用

也就是说,如果想启用该功能,则 Policy 填auto
如果你是在自己的 PC 上运行 overture,则 ExternalIP 填你当前网络环境的公网IP
如果你是用你自己的 VPS 搭建 DNS,则 ExternalIP 可以留空

xxxxxFile

这些文件的指定是用于筛选主备DNS返回的结果,并将“合格”的作为最终结果,作用有点像黑白名单

填写路径的时候注意绝对/相对路径之间的区别,建议填写绝对路径
以及,Windows 路径的反斜杠需要转义,即使用\\

(我有点担心所以还是说一下):不支持直接使用在线 URL,所以后续提到的文件请下载到本地后使用

如果你想在路由器上使用,并且用的是H大的老毛子固件,后续有使用 overture 代替固件中自带的 ChinaDNS 的配置方法详述,不需要下载下面提到的文件

IPNetworkFile

文件内容为一行一个 IP-CIDR

Primary 可使用 chnrouter,Alternative 不需要理会

这样的作用是当主DNS查询结果是国内 IP 的时候则立即采用,抛弃备DNS的结果,以加快查询速度和防止将国内服务解析到国外服务器

推荐 IPIP 维护的 chnrouter

DomainFile

文件内容为一行一个域名

Primary 不需要理会(可以使用国内常见域名列表,但没必要),Alternative 可使用 gfwlist 域名列表(注意是域名列表,而不是 AutoProxy 或 PAC)

你可以使用以下 Linux 命令生成一个可使用的域名列表(其中包含 gfwlist + Koolshare 列表)

curl https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt | base64 -d | sort -u | sed '/^$\|@@/d'| sed 's#!.\+##; s#|##g; s#@##g; s#http:\/\/##; s#https:\/\/##;' | sed '/\*/d; /apple\.com/d; /sina\.cn/d; /sina\.com\.cn/d; /baidu\.com/d; /qq\.com/d' | sed '/^[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+$/d' | grep '^[0-9a-zA-Z\.-]\+$' | grep '\.' | sed 's#^\.\+##' | sort -u > /tmp/temp_gfwlist.txt
curl https://raw.githubusercontent.com/hq450/fancyss/master/rules/gfwlist.conf | sed 's/ipset=\/\.//g; s/\/gfwlist//g; /^server/d' > /tmp/temp_koolshare.txt
cat /tmp/temp_gfwlist.txt /tmp/temp_koolshare.txt | sort -u > gfw_all_domain.txt

如果你没有 Linux,呃,你可以开一个虚拟机或者 Windows 下的 Linux 子系统,或者用我提供的列表,但不会保证及时更新

HostsFile

Windows 使用C:\\Windows\\System32\\drivers\\etc\\hosts

Linux / Openwrt 使用/etc/hosts

运行

Windows

直接运行 .exe 文件即可,但这样会一直存在一个命令提示符窗口,想必会很难受

因此你可以将以下代码保存为一个 VBS 脚本,例如overture.vbs,用来运行或直接添加到开机启动中,可以不显示窗口

建议直接将脚本放在和可执行文件同目录下,并且添加开机启动时使用脚本的快捷方式,这样不需要额外写路径
CreateObject("WScript.Shell").Run "overture-windows-amd64.exe",0

Linux / Openwrt

在 Linux 中运行时推荐手动使用-c参数指定配置文件路径,并且推荐使用绝对路径,特别是你写入/etc/rc.local中的时候

H大的老毛子固件

有非常简便的方法可以使用 overture 代替 ChinaDNS,更加稳定

只建议可以使用内存卡或U盘的路由器来使用 overture,因为 overture 体积比较大无法保存在路由器闪存中

以下默认你已经将 overture 文件夹放置在/opt/overture,并且将可执行文件直接更名为overture

1. 修改 overture 配置文件

端口改为8053,和 ChinaDNS 的端口一致

IPNetworkFile 的 Primary 使用/tmp/ss/chnroute.txt
DomainFile 的 Alternative 使用/tmp/ss/all_domain.txt

2. 修改H大固件中的 ChinaDNS 脚本

脚本路径/etc/storage/script/Sh19_chinadns.sh

请灵性修改,固件中的脚本在将来可能有变化因此我报的行数不一定是正确的,宗旨就是让 ChinaDNS 的启动和守护全换成 overture 的

找到 119 行的chinadns_keep () {,在后面插入新行

chinadns_path="/opt/overture/overture"

找到 164 行,仿照这两句 killall,在后面加上两行

killall overture
killall -9 overture

将 198 行改为

chinadns_path="/opt/overture/overture"

将 221 行改为

eval "$chinadns_path -c /opt/overture/config.json" &

改完记得mtd_storage.sh save,并且将修改后的脚本备份一份,以免更新固件后脚本被换回原版还得重改累得半死

接着就可以设置酸酸“DNS 服务模式选择”为dnsmasq了,固件会使用我们改好的 ChinaDNS 脚本启动 overture

我的文章对您有帮助吗?
我很可爱 请给我钱
扫一扫拿红包 → 扫商家收款码 → 转账与红包相等的金额
即可免费赞赏,又可拿支付宝奖励金!
现在支付宝超抠门的,红包只给一两分钱了
Last modification:October 23rd, 2018 at 01:38 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment

19 comments

  1. fuochai  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 69.0.3497.100(Google Chrome 69.0.3497.100)

    这个头图……莫非大佬也刷药水的吗( ,,´・ω・)ノ"(´っω・`。)

    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 69.0.3497.100(Google Chrome 69.0.3497.100)
      @fuochai

      what

  2. Noob  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 69.0.3497.100(Google Chrome 69.0.3497.100)

    大佬,你的支付宝下面的gif图可不可以发给我呢,我找了半天都没找到

    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 69.0.3497.100(Google Chrome 69.0.3497.100)
      1. Noob  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 69.0.3497.100(Google Chrome 69.0.3497.100)
        @神代綺凜

        谢大佬

  3. Kaniwow  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 63.0.3239.132(Google Chrome 63.0.3239.132)

    这个怎么搭建到小水管上啊
    我把他的项目git下来就懵逼了

    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 69.0.3497.100(Google Chrome 69.0.3497.100)
      @Kaniwow

      项目是go语言写的,你要clone源码得自己编译,否则直接去下releases来用

      1. Kaniwow  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 63.0.3239.132(Google Chrome 63.0.3239.132)
        @神代綺凜

        用的screen 把他挂后台结果出现这种东西

        WARN[0080] DNSPod Fail: read udp 172.19.51.126:38202->119.29.29.29:53: i/o timeout
        WARN[0085] DNSPod Fail: read udp 172.19.51.126:57058->119.29.29.29:53: i/o timeout
        WARN[0090] DNSPod Fail: read udp 172.19.51.126:42885->119.29.29.29:53: i/o timeout
        WARN[0096] DNSPod Fail: read udp 172.19.51.126:50712->119.29.29.29:53: i/o timeout
        WARN[0101] DNSPod Fail: read udp 172.19.51.126:46151->119.29.29.29:53: i/o timeout
        WARN[0106] DNSPod Fail: read udp 172.19.51.126:36140->119.29.29.29:53: i/o timeout
        WARN[2931] DNSPod Fail: read udp 172.19.51.126:33076->119.29.29.29:53: i/o timeout
        WARN[2936] DNSPod Fail: read udp 172.19.51.126:54772->119.29.29.29:53: i/o timeout
        WARN[2941] DNSPod Fail: read udp 172.19.51.126:46273->119.29.29.29:53: i/o timeout

        Orz

        1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 69.0.3497.100(Google Chrome 69.0.3497.100)
          @Kaniwow

          你本地和DNSPod无法通信?

          1. Kaniwow  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 63.0.3239.132(Google Chrome 63.0.3239.132)
            @神代綺凜

            我关闭了防火墙,开放了安全组,还是……Orz

            1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 69.0.3497.100(Google Chrome 69.0.3497.100)
              @Kaniwow

              你直接ping 119.29.29.29也不通?

              1. Kaniwow  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 63.0.3239.132(Google Chrome 63.0.3239.132)
                @神代綺凜

                是国内小鸡,阿里云上海

              2. Kaniwow  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 63.0.3239.132(Google Chrome 63.0.3239.132)
                @神代綺凜

                我直接dig成功
                我遇到的都是什么魔鬼问题

                1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 69.0.3497.100(Google Chrome 69.0.3497.100)
                  @Kaniwow

                  奇怪的问题

                  1. Kaniwow  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 63.0.3239.132(Google Chrome 63.0.3239.132)
                    @神代綺凜

                    大佬要不你给我下你的DNS吧,我直接放弃了Orz

                    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 69.0.3497.100(Google Chrome 69.0.3497.100)
                      @Kaniwow

                      no,我自用的

                      而且我顺便直接在路由器上部署了

                      1. Kaniwow  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 63.0.3239.132(Google Chrome 63.0.3239.132)
                        @神代綺凜

                        好的吧,我还是用别人的公共DNS吧

  4. Noob  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 69.0.3497.100(Google Chrome 69.0.3497.100)

    LEDE固件上行吗?

    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 69.0.3497.100(Google Chrome 69.0.3497.100)
      @Noob

      是openwrt都行啊