DNS学习理解

什么是DNS

DNS (Domain Name System 的缩写)是一套域名解析系统,比如访问wonpn.com,就要通过DNS查出它的IP地址比如:104.24.115.54,通过IP地址才能访问网站。主要的目的是面向人类,便于记忆。

一般默认使用的是运营商的“端局通告的DNS服务器”,当然也有一些公共DNS:

  • 114DNS:114.114.114.114/114.114.115.115

  • 阿里DNS:223.5.5.5/223.6.6.6

  • 百度DNS 180.76.76.76

  • DNSPod DNS+ 119.29.29.29/182.254.116.116

这些DNS基本在全国各地都有自己的节点,可以实现快速连接。相比运营商的DNS还有一个优势就是无劫持,现在的流量劫持之风在国内盛行,不仅仅运营商,包括浏览器,什么360,uc都在干这事,对抗流量劫持,要有干净的DNS,干净的浏览器,要有https,这又是另一个话题了。总之,这些公共DNS相对干净一些,目前推荐鹅厂:119.29.29.29

如何设置DNS

推荐方法是进路由器的设置页面进行设置,也可以在电脑设置:

下面说说chinaDNS

国内的DNS有些国外的域名是解析不了的,比如google.com,解析了也大多是被污染的,无法使用。如果全部使用国外的无污染 dns 解析,一来速度慢,二来无法提供国内的 cdn 资源优化。

chinadns应运而生,这里借用飞羽博客一张图:

只看chinadns部分,它将收到的dns请求,分别转发,左边是udp协议53端口发到国内的dns,右边用dns-forwarder通过tcp协议发送请求到国外dns,因为跨国的udp53 端口不稳定,可能会被干扰(下详)。还要用到国内路由表chinadns_chnroute.txt,其中记录国内的IP地址。

若国内DNS返回ip地址为国内ip地址,则丢弃国外结果,使用国内dns结果。

若国内DNS返回ip地址为国外ip地址,不管它对不对一律丢弃,使用国外dns结果。

搭配s-s,即可以实现不影响国内解析效果的前提下,高效的访问国外网站,

UDP解析

chinaDNS 负责将 dns 分别到国外、国内dns请求,国外的的请求又可以分为两种实现方式。上图使用的方式是 tcp 方式。

  1. TCP方式

    通过 DNS Forwarder 软件包将 udp 包类型的 dns 请求转化成 tcp 类型,向上游dns进行查询。 tcp 国外 ip 走透明代理,同时也解决了线路优化问题。

    优点:避免 ISP 运营商限制 udp 导致的解析不稳定,同时有一定的线路 dns 加速。

    缺点:tcp 请求较慢。

  2. UDP 方式

    使用自带的 ss-tunnel 将 dns 的 udp 查询转发到上有dns服务器。需要 s s 服务器开启 udp relay 。启动 ss-server 时加上 -u 参数即可。

    优点:简单,不需要其他依赖包,速度快。

    缺点:解析可能不稳定。

对待运营商 udp 限速的情况,可以通过 DNS Forwarder 解决,udp 线路通畅使用 ss-tunnel 更方便快速。

评论