Hiiragiの咖啡厅 Hiiragiの咖啡厅

[2019.06.28]在Ubuntu Server上安装Unbound并配置DNS over TLS功能

in 默认分类read (716) 文章转载请注明来源!

Capture.PNG
封面配图PID 74975502


本来想偷个懒懒,找一些dalao写过的教程参考一下怎么搭的,无奈全网有关DNS over TLS服务器搭建的教程少之又少,咱只好从官方文档开始摸起,顺便在这里记录一下踩坑的过程,,

  • 前言

1.DNS over TLS 是什么?

它是通过传输层安全协议(TLS)来加密并打包域名系统(DNS)的安全协议。此协议旨在防止中间人攻击与控制DNS数据以保护用户隐私。(摘自中文维基↗)
如果你使用境外的安全DoT( DNS over TLS 的缩写,下同),这可以有效防止某墙的DNS污染。
安卓Pie已原生支持DoT,部分国产ROM及部分应用内置DNS查询除外。打开 设置 → 网络和Internet → 高级 → 私有DNS 就是DoT的设置界面了。

Capture.PNG

2.Unbound 是什么?

Unbound 是优秀的DNS解析器,适合咱们萌新使用。

3.为什么要自己搭建DoT呢?一些公共的DNS服务不都提供DoT了吗?

因为境外的一些DoT服务器,如 CloudflareGoogle 的,因为被太多人使用而被墙干扰了,丢包严重(反正我所在的地区是这样的)。所以我们可以试着利用VPS搭建一个属于自己的DoT服务器。

4.Ubuntu Server是什么?

自个儿百度去


  • 我们开始

首先,你需要一个域名并准备一张有效证书。你可以自签或者撸一张 Let’s Encrypt 的证。自签证书因为过程比较复杂而且需要在服务器和客户端上同时安装,故此处不细讲。(懒)
Let’s Encrypt 的证书可以参考这篇文章

然后国际惯例,备份数据然后更新系统

apt update
apt upgrade
  • 安装本篇主角 Unbound

Ubuntu软件仓库已经有了,所以直接apt install就好,记得小写。

apt install unbound

进度条跑完后,这里有一个坑,你需要把TLS所用的证书、密钥文件复制到Unbound的配置文件所在目录。如果你在配置文件中指定了其他位置的证书文件,Unbound很可能会因权限问题报错!即使你使用了chmod 4777对证书文件进行了权限修改,它仍会报错~!

然后打开配置文件并进行修改。配置文件默认这里 → /etc/unbound/unbound.conf
完整的官方说明在这里 → https://nlnetlabs.nl/documentation/unbound/unbound.conf/
我们在此选择部分需要的功能进行配置就好。清空unbound.conf,复制下面的内容并修改

server:
        directory: "/etc/unbound"
        username: unbound
        chroot: "/etc/unbound"
        # logfile: "/etc/unbound/unbound.log"  #不建议启用日志,因为这样会对服务器造成一定负担
        pidfile: "/etc/unbound/unbound.pid"
        interface: 0.0.0.0@853
        # interface: ::0@853 #如果你想在IPv6上部署
        access-control: 0.0.0.0/0 allow 
        # access-control: ::1 allow #同上,如果你想在IPv6上部署

        tls-service-key: "privkey.key" #你的证书密钥文件名
        tls-service-pem: "fullchain.pem" #你的证书文件名
        tls-port: 853 #DoT所用的端口,默认是853
        incoming-num-tcp: 1000
        udp-upstream-without-downstream: yes 
        qname-minimisation: yes #节省带宽
    
forward-zone:
    name: .
    forward-tls-upstream: yes
    forward-addr: 8.8.8.8@853 #上游DNS服务器

保存修改后的配置,重启服务器(或者单单重启Unbound → 运行命令 service unbound restart
到这里不出意外的话,Unbound服务器应该就部署好了
如果VPS带有防火墙,请在防火墙中放行853端口的TCP连接

  • 最后测试

这里使用kdig命令进行模拟查询,你可能需要先安装相应的工具包。
Ubuntu下可使用apt install knot-dnsutils进行安装,同样别忘了先更新系统
Windows下我不知道,请自行谷歌。如果您希望对Windows那可怜的网络工具资源做出一点点贡献,请git一份源码进行编译并上传至网络社区,谢谢您~!

装好后运行命令:(将X.X.X.X替换为待测试服务器)

kdig +tls @X.X.X.X www.google.com -d

正确的返回结果如下:(部分数据在这里用代替)

;; DEBUG: Querying for owner(www.google.com.), class(1), type(1), server(✦✦✦.✦✦✦.✦✦✦.✦✦✦), port(853), protocol(TCP)
;; DEBUG: TLS, received certificate hierarchy:
;; DEBUG:  #1, CN=✦✦✦✦✦.✦✦✦✦✦.✦✦✦  #你的证书CN名
;; DEBUG:      SHA-256 PIN: ✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦
;; DEBUG:  #2, C=US,O=✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦
;; DEBUG:      SHA-256 PIN: ✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦✦=
;; DEBUG: TLS, skipping certificate PIN check
;; DEBUG: TLS, skipping certificate verification
;; TLS session (TLS1.2)-(✦✦✦✦✦✦-✦✦✦-✦✦✦✦✦✦✦✦✦)-(✦✦✦✦✦✦✦✦✦-✦✦✦✦✦✦✦✦✦)
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 65121
;; Flags: qr rd ra; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 0

;; QUESTION SECTION:
;; www.google.com.             IN    A

;; ANSWER SECTION:
www.google.com.         299    IN    A    172.✦✦✦.✦✦✦.✦✦✦

;; Received ✦✦ B
;; Time 20✦✦-✦✦-✦✦ ✦✦:✦✦:✦✦ ✦✦✦
;; From ✦✦✦.✦✦✦.✦✦✦.✦✦✦@853(TCP) in ✦✦✦.✦ ms

恭喜你成功了~你现在有了一台属于自己的DoT服务器,快去试试它吧~

Capture.PNG

发表新评论
已有 2 条评论
  1. liji
    liji
    回复

    配置报错呢 可以私聊你吗

    1.  柊 ゆり子
      柊 ゆり子本文作者
      回复

      @liji 嗯呐,可以留下联系方式吗?

博客已萌萌哒运行
© 2019 由 Typecho 强力驱动.Theme by Yodu
前篇 后篇