优麒麟技术论坛

 找回密码

TLS上的DNS [复制链接]

#DNS是不安全的因为默认情况下,DNS查询未加密因此中间实体可以利用它,TLS上的DNS表示DNS查询是通过使用TLS加密的安全连接发送的TLS是与加密HTTP流量相同的技术因此没有第三方可以看到您的DNS查询.与HTTPS和加密的SNI一起使用,可以完全保护您的浏览历史记录.
#Ubuntu 桌面上安装和使用Stubby(我的版本是18.04)
  1. sudo apt install stubby
复制代码
查看永运行stubby默认运行在53端口
  1. root@l:~#  netstat -lnptu | grep stubby
  2. tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      1685/stubby         
  3. tcp6       0      0 ::1:53                  :::*                    LISTEN      1685/stubby         
  4. udp        0      0 127.0.0.1:53            0.0.0.0:*                           1685/stubby         
  5. udp6       0      0 ::1:53                  :::*                                1685/stubby         
  6. root@l:~#
复制代码
主要配置文件是/etc/stubby/stubby.yml
下面的代码行使stubby作为stub解析器而不是完整的递归解析器运行,因此将其命名为stubby.

  1. resolution_type:GETDNS_RESOLUTION_STUB
复制代码
以下配置使存根发送使用TLS加密的DNS查询它不会以纯文本形式发送查询.
  1. dns_transport_list:
  2. -GETDNS_TRANSPORT_TLS
复制代码
此以下行要求远程递归解析器上有有效的TLS证书
  1. tls_authentication:GETDNS_AUTHENTICATION_REQUIRED
复制代码
以下几行设置了stubby守护程序的侦听地址默认情况下,IPv4和IPv6均已启用.
  1. listen_addresses:
  2. - 127.0.0.1
  3. - 0::1
复制代码
下面代码行以循环的方式使存根查询递归解析器成为可能,如果设置为0则Stubby将顺序使用每个上游服务器,直到它不可用为止然后继续使用下一个.
  1. round_robin_upstreams:1
复制代码
默认情况下在stubby配置文件中启用了3个递归解析器,它们由开发人员运行并支持基于TLS的DNS.
  1. dnsovertls.sinodun.com 145.100.185.15
  2. dnsovertls1.sinodun.com 145.100.185.16
  3. getdnsapi.net 185.49.141.37
复制代码
Additional Servers部分中还有其他默认情况下禁用的DNS服务器
  1. dns.quad9.net
  2. unicast.censurfridns.dk
  3. dnsovertls3.sinodun.com(支持TLS1.2和TLS 1.3)
  4. dnsovertls2.sinodun.com
  5. dns.cmrg.net
  6. dns.larsdebruin.net
复制代码
也有DNS服务器在端口443上侦听如果网络中阻止了端口853则可以取消注释它们以使用这些服务器.
  1. dnsovertls.sinodun.com
  2. dnsovertls1.sinodun.com
  3. dns.cmrg.net
  4. dns.neutopia.org
复制代码
设定
  1. vim /etc/resolvconf/resolv.conf.d/head
复制代码
  1. 里面以前设置的注释掉或者删除
  2. nameserver 127.0.0.1
  3. wq保存退出
  4. sudo resolvconf -u
  5. 更改生效
复制代码
如果想看到运行效果安装一款捕获软件
  1. sudo apt install wireshark
复制代码
如果询问非超级用户是否可以捕获数据包?请回答“是,安装完成后,运行以下命令将您的用户帐户添加到wireshark组,以便您可以捕获数据包
  1. sudo adduser your-username wireshark #your-username 替换成你的用户名称
复制代码

注销并重新登录以使更改生效。然后从应用程序菜单中打开WireShark,在WireShark中选择您的网络接口例如我的以太网接口名称是enp4s0f0然后输入port 853作为捕获过滤器。这将使WireShark仅捕获端口853上的流量,该端口是DNS通过TLS使用的端口
#如果不知道网络接口终端输入
  1. ifconfig
复制代码



#参照上面图形和解说开始点击捕获,打开终端运行
  1. 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服务器
  1. sudo vim /etc/stubby/stubby.yml
复制代码

向下滚动到upstream_recursive_servers:部分然后在其他DNS服务器上方添加以下文本
  1. # Additional servers

  2. # IPv4 addresses
  3. ## dns.alidns.com
  4.   - address_data: 223.5.5.5
  5.     tls_auth_name: "dns.alidns.com"
  6.   - address_data: 223.6.6.6
  7.     tls_auth_name: "dns.alidns.com"
  8. ## Dns.Google
  9. #  - address_data: 8.8.8.8
  10. #    tls_auth_name: "dns.google"
  11. #  - address_data: 8.8.4.4
  12. #    tls_auth_name: "dns.google"
  13. ##CloudFlare servers
  14. #  - address_data: 1.1.1.1
  15. #    tls_auth_name: "cloudflare-dns.com"
  16. #  - address_data: 1.0.0.1
  17. #    tls_auth_name: "cloudflare-dns.com"
复制代码
#我是直接启用了223.5.5.5 223.6.6.6 阿里然后把默认的和ipv6都注释了这样直接友好的使用

保存文件并重新启动stubby以使更改生效
  1. sudo systemctl restart stubby
复制代码

#就到这里吧本人懒惰解说不够详细如有问题可以询问或者google












本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
发表于 2020-10-23 02:04:40
回复

使用道具 举报

小黑屋|优麒麟    

GMT+8, 2022-1-20 16:52 , Processed in 0.021473 second(s), 19 queries .

Copyright ©2013-2022 Ubuntu Kylin. All Rights Reserved .

ICP No. 15002470-2 Tianjin

快速回复 返回顶部 返回列表