├── .github └── workflows │ └── main.yml ├── .gitignore ├── Dockerfile ├── README.md ├── build.sh ├── config.conf ├── smartdns.sublime-project ├── start.sh └── test.sh /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Publish Docker image 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | release: 8 | types: [published] 9 | workflow_dispatch: 10 | 11 | jobs: 12 | push_to_registry: 13 | name: Push Docker image to Docker Hub 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: get_image_name 17 | run: | 18 | VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') 19 | 20 | # Use Docker `latest` tag convention 21 | [ "$VERSION" == "master" ] && VERSION=latest 22 | 23 | repository=${{ github.repository }} 24 | IMAGE_NAME=${{ github.actor }}/${repository##*/}:$VERSION 25 | 26 | echo IMAGE_NAME=$IMAGE_NAME 27 | 28 | echo "IMAGE_NAME=$IMAGE_NAME" >> $GITHUB_ENV 29 | - name: Check out the repo 30 | uses: actions/checkout@v2 31 | - name: Log in to Docker Hub 32 | uses: docker/login-action@v1 33 | with: 34 | username: ${{ secrets.DOCKER_USERNAME }} 35 | password: ${{ secrets.DOCKER_PASSWORD }} 36 | - name: Push to Docker Hub 37 | uses: docker/build-push-action@v2 38 | with: 39 | push: true 40 | tags: ${{ env.IMAGE_NAME }} 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | smartdns.sublime-workspace 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine AS builder 2 | 3 | LABEL maintainer="Ghostry " 4 | 5 | RUN export URL=https://api.github.com/repos/pymumu/smartdns/releases/latest \ 6 | && export OS="linux" \ 7 | && apk --no-cache --update add curl \ 8 | && cd / \ 9 | && wget --tries=3 $(curl -s $URL | grep browser_download_url | egrep -o 'http.+\.\w+' | grep -i "$(uname -m)" | grep -m 1 -i "$(echo $OS)") \ 10 | && tar zxvf smartdns.*.tar.gz 11 | 12 | FROM alpine 13 | 14 | COPY --from=builder /smartdns/usr/sbin/smartdns /bin/smartdns 15 | RUN chmod +x /bin/smartdns 16 | 17 | ADD start.sh /start.sh 18 | ADD config.conf /config.conf 19 | 20 | WORKDIR / 21 | 22 | VOLUME ["/smartdns"] 23 | 24 | EXPOSE 53 25 | 26 | CMD ["/start.sh"] 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # docker-smartdns 2 | **使用** 3 | ``` 4 | docker pull ghostry/smartdns 5 | docker container stop gsmartdns ; docker container rm gsmartdns 6 | docker run -d -p 53:53/udp --restart=always --name gsmartdns -v ~/.gsmartdns:/smartdns ghostry/smartdns 7 | docker restart gsmartdns 8 | ``` 9 | 10 | tcp可以按需映射,一般都是用udp,增加tcp使用`-p 53:53` 11 | 12 | **介绍** 13 | 14 | 本项目使用https://github.com/pymumu/smartdns 提供的程序制作. 15 | 16 | >SmartDNS是一个运行在本地的DNS服务器,SmartDNS接受本地客户端的DNS查询请求,从多个上游DNS服务器获取DNS查询结果,并将访问速度最快的结果返回给客户端,避免DNS污染,提高网络访问速度。 同时支持指定特定域名IP地址,并高性匹配,达到过滤广告的效果。 17 | 18 | >与dnsmasq的all-servers不同,smartdns返回的是访问速度最快的解析结果。 19 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker build -f Dockerfile -t ghostry/smartdns . 3 | -------------------------------------------------------------------------------- /config.conf: -------------------------------------------------------------------------------- 1 | # https://github.com/pymumu/smartdns/blob/master/etc/smartdns/smartdns.conf 2 | bind-tcp [::]:53 3 | bind [::]:53 4 | tcp-idle-time 3 5 | cache-size 4096 6 | prefetch-domain yes 7 | serve-expired yes 8 | serve-expired-ttl 0 9 | speed-check-mode tcp:80,tcp:443,ping 10 | rr-ttl-min 60 11 | rr-ttl-max 86400 12 | log-level warn 13 | server 192.168.1.1 14 | server 8.8.8.8 -blacklist-ip -check-edns 15 | server-tcp 119.29.29.29 16 | server-tcp 64.6.64.6 17 | server-tcp 114.114.114.119 18 | server-tcp 223.5.5.5 19 | server-tls 1.1.1.1 20 | server-tls 8.8.4.4 21 | server-tls 9.9.9.9 22 | server-https https://cloudflare-dns.com/dns-query 23 | -------------------------------------------------------------------------------- /smartdns.sublime-project: -------------------------------------------------------------------------------- 1 | { 2 | "folders": 3 | [ 4 | { 5 | "path": "." 6 | } 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | if [ ! -f /smartdns/smartdns.conf ]; then 3 | mkdir -p /smartdns 4 | cp -u /config.conf /smartdns/smartdns.conf 5 | fi 6 | /bin/smartdns -f -x -c /smartdns/smartdns.conf 7 | -------------------------------------------------------------------------------- /test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | docker build -f Dockerfile -t smartdns . 3 | --------------------------------------------------------------------------------