初入树莓派3----自建无污染DNS

  • 树莓派搭建 overture 无污染DNS

  • 更新

    1
    2
    3
    18.06.26 初始化
    19.01.05 重新整理
    20.01.05 修正错误,更新配置文件

导语

  • ISP 还有无良的第三方,搞的上个网 DNS 被污染的不成样子.
  • 单纯无污染 DNS 的意义已经不大,但还是需要一些仪式感🧐.

需求

  • 国内/国外分流,国内网站交给国内DNS,国外的交给墙外无污染DNS.
  • 对CDN友好,访问百度,我在广州,你DNS分配个青岛的地址要闹那样.
  • 带有DNS缓存,加速解析.
  • 跨平台(小),出门不能一直带着路由器啊.

方案

  • 国内/国外分流

  • 分流可使用ChinaDNS.

    • 无污染DNS
      • 墙外DNS,但udp-53端口,基本被劫持.需要特别方式规避.
        • 非标准DNS端口 例如 opendns的udp-5353端口 tcp-443端口
        • DNS over HTTPS ,支持最好的是google-dns及 Cloudflare-dns,其中google-dns比较麻烦,还需要自行寻找可用的google ip地址.
        • DNS over TLS ,与上一个类似.
        • DNSCrypt ,支持此项的公共DNS很多,与此被干扰的也比较厉害.
      • ss/ssr-vpn-v2ray 等代理解析dns.
      • 一直可用的中科大DNS 北方还好. 基本高校 DNS 已不再对外提供服务.
  • 对CDN友好选择支持EDNS的上游DNS,国内主流都支持了.

  • 带有DNS缓存,这个用的较多的 dnsmasq ,当作下游DNS.

  • 跨平台(大雾),一般都在路由器搞搞.

最终定型

  • dnsmasq(可选) + overture + 上游加密DNS(可选)

  • overture DNS分流净化器,go语言编写,解决chinadns不稳定而编写.

    • 得益于go的跨平台能力,基本通吃.
    • 已经支持DNS缓存
    • 支持tcp / udp dot DNS查询
    • 比chinadns更加稳定.
  • 实际上如果只需要一个纯净DNS,只使用overture就足够了.

  • 当需要广告过滤时,添加dnsmasq. overture 的 host文件就够了.

  • overture可使用 非标准dns端口查询dns,解决上游DNS污染问题.非标准端口被大量干扰或dns查询全程保密,才需要使用DNSCrypt DNS over HTTPS等额外措施.

实施

  • 下载最新releases

  • 配置 PrimaryDNS 选择 AliDNS tcp 查询,打开 EDNS 这样有不错的效果.

  • AlternativeDNS 选择了 Cloudflare 的 Dot .

  • 解压 以win-64为例,打开配置文件,写入以下内容.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    {
    "BindAddress": ":53",
    "DebugHTTPAddress": "127.0.0.1:5555",
    "PrimaryDNS": [
    {
    "Name": "AliDNS",
    "Address": "223.5.5.5:53",
    "Protocol": "tcp",
    "SOCKS5Address": "",
    "Timeout": 2,
    "EDNSClientSubnet": {
    "Policy": "auto",
    "ExternalIP": "",
    "NoCookie": true
    }
    }
    ],
    "AlternativeDNS": [
    {
    "Name": "CloudflareDNS",
    "Address": "one.one.one.one:[email protected]",
    "Protocol": "tcp-tls",
    "SOCKS5Address": "",
    "Timeout": 6,
    "EDNSClientSubnet": {
    "Policy": "disable",
    "ExternalIP": "",
    "NoCookie": true
    }
    }
    ],
    "OnlyPrimaryDNS": false,
    "IPv6UseAlternativeDNS": false,
    "WhenPrimaryDNSAnswerNoneUse": "PrimaryDNS",
    "IPNetworkFile": {
    "Primary": "./china_ip_list.txt",
    "Alternative": "./ip_network_alternative_sample"
    },
    "DomainFile": {
    "Primary": "./china_list.txt",
    "Alternative": "./gfw_list.txt",
    "Matcher": "regex-list"
    },
    "HostsFile": "./hosts_sample",
    "MinimumTTL": 0,
    "DomainTTLFile" : "./domain_ttl_sample",
    "CacheSize" : 2000,
    "RejectQType": [255]
    }
  • IPNetworkFile
    只需要配置 Primary 即可.使用 国内 ip 列表.这里是 IPIP 维护的 chnrouter. 已足够使用.

  • DomainFile 1.区分国内外域名
    Alternative需要配置为 gfwlist,这里把 gfwlist 和 Koolshare 综合一下.

    1
    2
    3
    4
    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 > gfwlist.txt
    curl https://raw.githubusercontent.com/hq450/fancyss/master/rules/gfwlist.conf | sed 's/ipset=\/\.//g; s/\/gfwlist//g; /^server/d' > koolshare.txt
    cat gfwlist.txt koolshare.txt | sort -u > gfw_list.txt
    rm gfwlist.txt koolshare.txt
  • windows 下可以使用 nssm 包装成windows的server,做到开机启动.

  • linux 下,各种脚本为所欲为.