初入树莓派5----docker运行overture

栏目: 编程工具 · 发布时间: 5年前

内容简介:新增有变动
19.01.30 初始化

导语

  • 升级overture时候,才发现配置文件有更改,且支持了dot,索性扔进 docker 里面,方便维护.

需求

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

新增

  • docker运行,自动更新分流list文件.

方案

  • 国内/国外分流
  • 分流可使用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 北方还好.
  • 对CDN友好选择支持EDNS的上游DNS,国内主流都支持了,除了114.

  • 带有DNS缓存,这个用的较多的 dnsmasq ,当作下游DNS.
  • 跨平台(大雾),一般都在路由器搞搞.

最终定型

有变动

  • dnsmasq(可选) + overture + 上游加密DNS(可选)
  • overture DNS分流净化器,go语言编写,解决chinadns不稳定而编写.

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

  • 当需要广告过滤时,添加dnsmasq.
  • overture 可使用 非标准dns端口查询dns,解决上游DNS污染问题.非标准端口被大量干扰或dns查询全程保密,才需要使用DNSCrypt DNS over HTTPS等额外措施.
  • overture 已经支持 dns over tls,无需上游加密DNS

实施

  • 最新的 releases ,这里以 v1.5-rc3 为例.

配置文件

  • 配置文件

    {
      "BindAddress": ":53",
      "HTTPAddress": ":5555",
      "PrimaryDNS": [
        {
          "Name": "DNSPod",
          "Address": "119.29.29.29:53",
          "Protocol": "udp",
          "SOCKS5Address": "",
          "Timeout": 6,
          "EDNSClientSubnet": {
            "Policy": "disable",
            "ExternalIP": "",
            "NoCookie": true
          }
        }
      ],
      "AlternativeDNS": [
        {
          "Name": "OpenDNS",
          "Address": "208.67.222.222:443",
          "Protocol": "tcp",
          "SOCKS5Address": "",
          "Timeout": 6,
          "EDNSClientSubnet": {
            "Policy": "disable",
            "ExternalIP": "",
            "NoCookie": true
          }
        }
      ],
      "OnlyPrimaryDNS": false,
      "IPv6UseAlternativeDNS": false,
      "IPNetworkFile": {
        "Primary": "./ip_network_primary_sample",
        "Alternative": "./ip_network_alternative_sample"
      },
      "DomainFile": {
        "Primary": "./domain_primary_sample",
        "Alternative": "./domain_alternative_sample"
      },
      "HostsFile": "./hosts_sample",
      "MinimumTTL": 0,
      "CacheSize" : 0,
      "RejectQtype": [255]
    }
    
  • 主要变动

    • XXXXDNS下的 Protocol ,字段除 tcp udp 可选之外,增加了 tcp-tls ,使得无需上游加密DNS,使用 tcp-tls 时,对 Address 字段有要求, "servername:port@serverAddress" , 一般可用 one.one.one.one:853@1.1.1.1 .或者 one.one.one.one:853@1.0.0.1

    • 分流文件,细化为了 IPNetworkFile 和 DomainFile.

      • IPNetworkFile
        • 大致是当 PrimaryDNS 查询的结果在 Primary 字段对应文件时,立刻使用,忽略 AlternativeDNS 查询结果. 这里可以配置为国内ip的list文件.防止国内服务器解析到国外,配合支持 EDNS 的 PrimaryDNS,基本可以做到cdn的就近解析.
        • Alternative字段 可以忽略,作用类似.
      • DomainFile
        • 根据域名直接分流到对应的DNS进行解析. Primary 字段可以是常见国内域名,也可忽略. Alternative 使用处理过的 gfwlist ,即可做到被污染域名走 AlternativeDNS .
      • IPNetworkFile 需要 chinaiplist , DomainFile 需要 gfwlist . gfwlist 需要处理一下格式.

Dockerfile

  • 至此我们确认了Dockerfile的主要内容.
    • 下载并解压最新的 releases ,这里是 overture-linux-amd64.zip ,树莓派3b 需要下载 arm64 版本.
    • 下载 chinaiplist gfwlist 处理格式.
    • 编辑默认的配置文件, 配置 chinalist gfwlist
    • 写入计划任务,自动更新分流文件.
  • 其他

    • 基础镜像使用 apline:3.8 仅 5M大小.
    • apline 使用的是 busybox ,命令与常用的有一些差别.包管理为 apk 命令.
    • 计划任务也与常用的略有不同.
  • Dockerfile

    FROM alpine:3.8
    
    ENV VERSION v1.5-rc3
    
    WORKDIR /srv
    
    RUN set -xe && \
        mkdir overture && \
        cd /srv/overture && \
        apk add --no-cache unzip curl && \
        curl -fsSLO --compressed "https://github.com/shawn1m/  overture/releases/download/${VERSION}/  overture-linux-amd64.zip" && \
        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/17mon/  china_ip_list/master/china_ip_list.txt >    china_ip_list.txt && \
        unzip -o "overture-linux-amd64.zip" -d /srv/overture  &&   \
        rm -rf "overture-linux-amd64.zip" && \
        apk del unzip && \
        sed -i 's/ip_network_primary_sample/china_ip_list.txt/  g' config.json && \
        sed -i 's/domain_alternative_sample/gfwlist.txt/g'   config.json && \
        echo '#!/bin/sh' > update.sh && \
        echo "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" >> update.sh && \
        echo "curl https://raw.githubusercochina_ip_list/master/  china_ip_list.txt >>  china_ip_list.txt" >> update.sh &&   \
      chmod u+x update.sh && \
      echo '0 2 * * *  sh  /srv/overture/update.sh'>>/var/spool/cron/crontabs/root
    
    CMD crond && cd /srv/overture && ./overture-linux-amd64 -l overture.log
    
  • 开箱即用,整体略混乱….配置文件未独立,不太符合docker的最佳实践.修改配置文件需要拷贝 /src/overture 再挂载回容器.

  • 有时间再整理,将配置文件/分流文件独立出来,或者加载到数据卷中. crond 的启动等,全部放入脚本文件.
  • 1.5rc3编译的镜像大致10M左右.

以上所述就是小编给大家介绍的《初入树莓派5----docker运行overture》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

游戏人工智能编程案例精粹

游戏人工智能编程案例精粹

巴克兰德 (Mat Buckland) / 罗岱 / 人民邮电出版社 / 2008年06月 / 55.00元

《游戏人工智能编程案例精粹》适合对游戏AI开发感兴趣的爱好者和游戏AI开发人员阅读和参考。一起来看看 《游戏人工智能编程案例精粹》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具