#DNS是不安全的因为默认情况下,DNS查询未加密因此中间实体可以利用它,TLS上的DNS表示DNS查询是通过使用TLS加密的安全连接发送的TLS是与加密HTTP流量相同的技术因此没有第三方可以看到您的DNS查询.与HTTPS和加密的SNI一起使用,可以完全保护您的浏览历史记录.
#Ubuntu 桌面上安装和使用Stubby(我的版本是18.04)
sudo apt install stubby
查看永运行stubby默认运行在53端口
root@l:~# netstat -lnptu | grep stubby
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 1685/stubby
tcp6 0 0 ::1:53 :::* LISTEN 1685/stubby
udp 0 0 127.0.0.1:53 0.0.0.0:* 1685/stubby
udp6 0 0 ::1:53 :::* 1685/stubby
root@l:~#
主要配置文件是/etc/stubby/stubby.yml
下面的代码行使stubby作为stub解析器而不是完整的递归解析器运行,因此将其命名为stubby.
resolution_type:GETDNS_RESOLUTION_STUB
以下配置使存根发送使用TLS加密的DNS查询它不会以纯文本形式发送查询.
dns_transport_list:
-GETDNS_TRANSPORT_TLS
此以下行要求远程递归解析器上有有效的TLS证书
tls_authentication:GETDNS_AUTHENTICATION_REQUIRED
以下几行设置了stubby守护程序的侦听地址默认情况下,IPv4和IPv6均已启用.
listen_addresses:
- 127.0.0.1
- 0::1
下面代码行以循环的方式使存根查询递归解析器成为可能,如果设置为0则Stubby将顺序使用每个上游服务器,直到它不可用为止然后继续使用下一个.
round_robin_upstreams:1
默认情况下在stubby配置文件中启用了3个递归解析器,它们由开发人员运行并支持基于TLS的DNS.
dnsovertls.sinodun.com 145.100.185.15
dnsovertls1.sinodun.com 145.100.185.16
getdnsapi.net 185.49.141.37
Additional Servers部分中还有其他默认情况下禁用的DNS服务器
dns.quad9.net
unicast.censurfridns.dk
dnsovertls3.sinodun.com(支持TLS1.2和TLS 1.3)
dnsovertls2.sinodun.com
dns.cmrg.net
dns.larsdebruin.net
也有DNS服务器在端口443上侦听如果网络中阻止了端口853则可以取消注释它们以使用这些服务器.
dnsovertls.sinodun.com
dnsovertls1.sinodun.com
dns.cmrg.net
dns.neutopia.org
设定
vim /etc/resolvconf/resolv.conf.d/head
里面以前设置的注释掉或者删除
nameserver 127.0.0.1
wq保存退出
sudo resolvconf -u
更改生效
如果想看到运行效果安装一款捕获软件
sudo apt install wireshark
如果询问非超级用户是否可以捕获数据包?请回答“是,安装完成后,运行以下命令将您的用户帐户添加到wireshark组,以便您可以捕获数据包
sudo adduser your-username wireshark #your-username 替换成你的用户名称
注销并重新登录以使更改生效。然后从应用程序菜单中打开WireShark,在WireShark中选择您的网络接口例如我的以太网接口名称是enp4s0f0然后输入port 853作为捕获过滤器。这将使WireShark仅捕获端口853上的流量,该端口是DNS通过TLS使用的端口
#如果不知道网络接口终端输入
ifconfig
#参照上面图形和解说开始点击捕获,打开终端运行
dig A linuxbabe.com
现在,您可以在WireShark中查看捕获的DNS通信,正如你所看到的,我的DNS查询被送到185.49.141.37,145.100.185.15并且145.100.185.16这是在粗短的配置文件中定义的3个默认的DNS解析器,连接是通过TCP进行的并使用TLS加密.
如果发送的DNS查询未加密,则计算机将与端口53上的DNS服务器联系,您可以使用port 53捕获筛选器再次捕获数据包,但在WireShark中将看不到任何数据包.这意味着存根正在对DNS查询进行加密.
#默认的dns服务器延迟太高了,而且对于解析baidu真正的不友好,ping值200多,需要自己定义添加适合的dns服务器
sudo vim /etc/stubby/stubby.yml
向下滚动到upstream_recursive_servers:部分然后在其他DNS服务器上方添加以下文本
# Additional servers
# IPv4 addresses
## dns.alidns.com
- address_data: 223.5.5.5
tls_auth_name: "dns.alidns.com"
- address_data: 223.6.6.6
tls_auth_name: "dns.alidns.com"
## Dns.Google
# - address_data: 8.8.8.8
# tls_auth_name: "dns.google"
# - address_data: 8.8.4.4
# tls_auth_name: "dns.google"
##CloudFlare servers
# - address_data: 1.1.1.1
# tls_auth_name: "cloudflare-dns.com"
# - address_data: 1.0.0.1
# tls_auth_name: "cloudflare-dns.com"
#我是直接启用了223.5.5.5 223.6.6.6 阿里然后把默认的和ipv6都注释了这样直接友好的使用
保存文件并重新启动stubby以使更改生效
sudo systemctl restart stubby
#就到这里吧本人懒惰解说不够详细如有问题可以询问或者google