2023年如何搭建干净的DNS服务

因为一些众所周知的原因, 我们可以尝试自己搭建干净/安全的DNS服务,一切都只要掌握一些简单知识/技巧.## 懒人提示对于绝大多数不愿意折腾的人而言, 223.5.5.5作为dns服务器就够了## 搭建原理首先呢, 地球上除了少数地方以外, Google家的8.8.8.8的DNS是非常理想的选择,

因为一些众所周知的原因, 我们可以尝试自己搭建干净/安全的DNS服务,一切都只要掌握一些简单知识/技巧.

## 懒人提示

对于绝大多数不愿意折腾的人而言, 223.5.5.5作为dns服务器就够了

## 搭建原理

首先呢, 地球上除了少数地方以外, Google家的8.8.8.8的DNS是非常理想的选择, 我们要做的,就是自建DNS服务, 通过DoH转发Google的DNS服务, 但是呢, 直接转发肯定是不行的,我们可以通过cf的workers无服务函数进行中转, 中转的时候顺便把自己的IP地址打码后传给Google DNS, 这样就能获得一个支持EDNS的DNS服务了(如果不传EDNS IP的话, 很多域名解析出来就是海外链路了, 速度必然受到影响).

## 开始实操

整个过程总共分为六步, 一切顺利的话, 30分钟内就能完成搭建:

  1. 使用Technitium DnsServer自建一台DNS服务器
  2. 建立一个cf的Workers(其它厂商无服务函数也可以), 具体代码见附录, 这里要注意把EDNS的IP设置成你当地的IP(记得打码噢)
  3. 因为Workers的顶级域名被XX了, 这里需要在触发器自定义域添加一个自己的二级域名, 比如dns.demo.com
  4. 在Technitium DnsServer里设置Forwarder, Forwarder Protocol选DNS-over-HTTPS (JSON), 转发地址就是https://dns.demo.com/, 保存设置. (这里需要注意的是, Technitium DnsServer从v11版本开始去除了DNS-over-HTTPS (JSON)这个协议, 所以目前需要把版本锁定至v10)
  5. (可选)在DnsServer的日志里检查Forwarder转发是否成功
  6. (可选) DnsServer开启DNS-over-TLS, 需要自行准备ssl证书,对外开放一个public.demo.com:853服务, 这样就可以将其在安卓手机里设置为”私人DNS”了

## 附录

addEventListener('fetch', function(event) {

    const { request } = event

    const response = handleRequest(request)

    event.respondWith(response)

})

const doh = 'https://dns.google/dns-query'

const dohjson = 'https://dns.google/resolve'

const contype = 'application/dns-message'

const jstontype = 'application/dns-json'

async
function handleRequest(request) {

    const { method, headers, url } = request

    const searchParams = new
URL(url).searchParams

    if (method == 'GET' && searchParams.has('dns')) {

        return
await fetch(doh + '?dns=' + searchParams.get('dns')+'&edns_client_subnet=6.6.6.0/24', {

            method: 'GET',

            headers: {

                'Accept': contype,

            }

        });

    } else
if (method == 'POST' && headers.get('content-type')==contype) {

        return
await fetch(doh, {

            method: 'POST',

            headers: {

                'Accept': contype,

                'Content-Type': contype,

            },

            body: await request.arrayBuffer()

        });

    } else
if (method== 'GET' && headers.get('Accept')==jstontype) {

        const search = new
URL(url).search

        const result = await fetch(dohjson + search + '&edns_client_subnet=6.6.6.0/24', {

            method: 'GET',

            headers: {

                'Accept': jstontype,

            }

        });

        const secondCheck = await result.clone().json();

        if (secondCheck['Status'] == 0) {

            return result

        } else {

            // Some request name can't work with edns

            // "Status": 5 /* REFUSED */,

            return
await fetch(dohjson + search, {

                method: 'GET',

                headers: {

                    'Accept': jstontype,

                }

            });

        }

    } else {

        return
new
Response("", {status: 404})

    }

}

购买必读
本站模板没有任何后门,也不会和我们服务器有任何通信,请您放心使用。
本源码一次性买断,没有二次费用,并享受免费更新。
在使用本站模板时,请不要使用我们的产品从事违反中华人民共和国法律、违反公序良俗的活动,否则我们有权拒绝服务,并配合有关单位予以处置。如果您不符合条件,请勿购买。
售后是指通过QQ与客服联系处理问题,售后过期不影响您对主题的使用和更新。免费三个月售后服务。售后服务时间为工作日早9点到晚5点。如果不在线可以QQ留言,我们会尽快给您答复。
售后服务包括程序的使用、BUG的处理、意见建议等。不包括技术服务、网站优化、二次开发、环境配置、服务器运维等。
代码类商品属于数字化商品,具有可复制性,不支持退款,详见《网络交易管理办法》第二章 第16条 第三类。
请仔细阅读我们的用户协议:用户协议

给TA打赏
共{{data.count}}人
人已打赏
使用指南

41合1的一键DD脚本 最好用的DD脚本 一键DD Linux/Windows

2023-9-21 16:31:34

迅睿CMS教程

迅睿cms做seo_迅睿CMS:以SEO为中心的最佳选择

2023-8-16 8:30:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧

线

专属客服

(工作日 10:00 - 22:30 为您服务)

2026-08-26 03:03:42

您好,无论是售前、售后、意见建议……均可通过联系工单与我们取得联系。

猜你想问:

  • 购买的模板免费包安装吗?

  • 这个演示地址有吗?

  • 购买vip会员可以下载哪些模板?

您的工单我们已经收到,我们将会尽快跟您联系!
取消

您想了解哪方面的问题?

选择聊天工具: