博客P1ratRuleZZZ

在Ubuntu上建立自己的DNSCrypt服务器 16.04 Linux的

DNSCrypt VS平原DNS

什么是DNS? DNS是域名服务, 这是广泛使用的今天所有人. 如果你不知道,如果你正在使用DNS那么这篇文章不适合你.

DNS是用来解决人类可读的域名机器可读地址. 其实, 在Internet上的服务器,如果你身边有一个整洁和短名称与否并不重要, 它甚至不介意有像丑陋的IP地址 19.5.81.65 而不是 1.1.1.1 – for example. 顺便说说, 1.1.1.1 – is a really working DNS server address of CloudFlare and it supports all the protocols: DNS, DNSCrypt, DNS-过TLS, DNS-过HTTPS.

所以, 为了知道通过域名在互联网上的一些服务器的IP地址名称的DNS服务器使用. 您的浏览器请求的DNS服务器一样的问题: “What is the IPv4 address of www.google.com” and the DNS server responds “The IPv4 address of www.google.com is 123.456.789.123”. 当然,这是不是一个真正的IP, 真正的IP不能包含数字大于 255 因为它需要准确地 1 字节. 所以, in this routine anyone who sniffs on your wired/wireless connection can see that you are visiting “google.com”. DNSCrypt协议是在这里,以这些信息,没有人beetween您的PC和目的地资源的加密就能嗅出您的域名请求.

这篇文章的目的

  • 安装自己的DNSCrypt V2转发 (V1支持太) ( 我们将使用dnsdist包)
  • 安装DNSCrypt客户端的Windows
  • 安装DNSCrypt客户端Android版

注意: 文章写于英语. 切换到英语禁用自动翻译.

阅读文章进一步看到所有的教程.

正如你所看到的,我们要经过客户端软件的安装过程太. 这意味着,如果你不希望安装自己的服务器, 刚刚跳过此步骤,转到客户端安装. 有吨公众DNSCrypt服务器,你可以使用和感到安全,同时浏览互联网.

步 1. DNSCrypt服务器安装

要求

  • VPS服务器运行Ubuntu 16.04 (注意: 任何Linux可以使用, 这并不是使用Ubuntu的要求, 但在本教程中我将使用Ubuntu). 如果您正在运行Debian, 安装过程几乎是完全一样的. 但是,如果你正在运行的CentOS (这是一个基于RPM包) 它会为你不同
  • 您必须在此服务器上的root权限
  • 运行Windows客户端安装和测试任何PC
  • (可选的) 任何PC /路由器/设备运行任何Linux操作系统 (Ubuntu的, Debian的, CentOS的, 红帽等) 与处理器64/86 /臂/ MIPS和等.
  • (可选的) 任何Android手机AdGuard应用程序安装

准备VPS

我会用一些廉价的云服务器上安装它的服务器DNSCrypt. 所以, 我通过SSH连接,并看到控制台根


As you can see I’m using Putty to connect to Linux server from Windows machine. Disclaimer: 我用windows这里作为一个客户端的机器,因为被广泛使用的Windows和很多人都在使用它,我想尽可能接近现实,因为它是. 使用 Linux 作为主要操作系统的人不需要阅读那种手册,因为他们可以自己做🙂

所以, 让更新包,并在官方回购检查libsodium包的版本:

apt-get update
apt-get install nano
apt-cache search libsodium

而我们看到的软件包列表

让我们来看看libsodium18包的版本

 apt-cache madison libsodium18 

我包版本 1.0.8. 这不是对我们有好处,因为它不支持需要DNSCrypt V2加密 (anyway v1 will work though we want to do it the way “comme il le faut”. 我们至少需要版本 1.0.9.

所以, 我们将转向Linux的思维模式,并编译它从源代码!

好, 这里稍微注意: 如果您正在运行Ubuntu / Debian的64位, 您可以通过我在这里下载编译的dpkg包: libsodium-1.0.9-的dpkg

让我们先启用源是在APT提供: 为了这, open the file /etc/apt/sources.list and uncomment in sources universe the row with deb-src … universe OR just execute the following:


echo "deb-src http://mirror.yandex.ru/ubuntu $(lsb_release -cs) universe" > /etc/apt/sources.list.d/universe.list
apt-get update

Let’s create a new folder inside /root and call it “build”. 然后下载源libsodium,并尝试建立它没有改变:

apt-get build-dep libsodium18
apt-get install git nano dpkg-dev devscripts fakeroot
mkdir -p /root/build/libsodium
cd /root/build/libsodium
apt-get source libsodium18
cd libsodium-1.0.8/
fakeroot debian/rules binary

It will take some time… But the main point is that you should not have any errors while compilation and should see at the end the following:

所以, *.deb包被成功地建. 现在让我们来更新此包的版本 1.0.9. 我们将使用官方 github上 资源.


uupdate -v 1.0.9 ../libsodium_1.0.8-5.debian.tar.xz
cd ../libsodium-1.0.9
git init
git remote add origin https://github.com/jedisct1/libsodium.git
git fetch origin
git checkout -b stable origin/stable
git checkout c09b00cf20

注意: 最新的命令没有必要执行. 但是,这是我使用的版本和它的工作. So if you want to install newer version just do not execute latest command with “c09b00cf20” commit id. 如果你不知道这是它, 只需按照教程进行操作,这应该可以🙂

现在, 让我们更新包的changelog,并设置版本的新号:


dch -n

这将打开一个文本编辑器 (纳米) 你只需要按下Ctrl + O然后退出按Ctrl + X进行保存.

现在, 重建版本 1.0.9

fakeroot debian/rules binary
cd ../
ls -lah

看看我们的文件列表: 我们应该有libsodium18_1.0.9-0ubuntu1_amd64.deb libsodium-dbg_1.0.9-0ubuntu1_amd64.deb libsodium-dev_1.0.9-0ubuntu1_amd64.deb
现在, 全部安装:

dpkg -i libsodium18_1.0.9-0ubuntu1_amd64.deb libsodium-dbg_1.0.9-0ubuntu1_amd64.deb libsodium-dev_1.0.9-0ubuntu1_amd64.deb

而已. 主要的要求包被安装. 现在, 让我们使用官方的回购上编译来源dnsdist包 GitHub上.


apt-get install ragel virtualenv zip libsystemd-dev protobuf-compiler libssl-dev libprotobuf-dev dh-systemd libboost-dev libboost1.58-dev libbsd-dev libedit-dev liblua5.2-0 liblua5.2-dev libreadline-dev libreadline6-dev libtinfo-dev
cd /root/build
git clone -b "dnsdist-1.3.3" https://github.com/PowerDNS/pdns
cd pdns/pdns/dnsdistdist
autoreconf -i
./configure --prefix="" --exec-prefix=/usr --sysconfdir="/etc/dnsdist" --with-systemd="/lib/systemd/system" --enable-dns-over-tls --enable-dnscrypt --with-protobuf

检查这里没有错误和编译


make
make install

And wait it to compile… This will take a while depending on your VPS. 然后检查版本:


dnsdist -V

对我来说,:


dnsdist 0.0.0.HEAD.gg27dd1e3 (Lua 5.2.4)
Enabled features: dns-over-tls(openssl) dnscrypt ebpf libsodium protobuf recvmmsg/sendmmsg systemd

好, 让我们添加一些快速CONFIGS,看看它是如何工作的


mkdir /etc/dnsdist
cd /etc/dnsdist
wget -O "/tmp/dnsdist.zip" "https://blog.jazinbaz.in/download/2571/"
unzip /tmp/dnsdist.zip

systemctl daemon-reload
service dnsdist restart
service dnsdist status

或者只是手动从这里下载配置文件并复制其内容 dnsdist.conf.zip

我们应该看到,服务正在运行. 现在, 让生成将需要加密的密钥.

mkdir -p /var/lib/dnsdist
dnsdist -c 

generateDNSCryptProviderKeys("/var/lib/dnsdist/providerPublic.key", "/var/lib/dnsdist/providerPrivate.key")
sinceDate=os.time(os.date("!*t"))
expireDate=os.time({year=2100, month=0, day=1, hour=00, minute=00})
generateDNSCryptCertificate("/var/lib/dnsdist/providerPrivate.key", "/var/lib/dnsdist/resolver.cert", "/var/lib/dnsdist/resolver.key", 1, sinceDate, expireDate, VERSION1)
generateDNSCryptCertificate("/var/lib/dnsdist/providerPrivate.key", "/var/lib/dnsdist/resolver2.cert", "/var/lib/dnsdist/resolver2.key", 1, sinceDate, expireDate, VERSION2)

然后, 通过从dnsdist控制台按下Ctrl + C出口并打开其配置,以使实际DNSCrypt结合. 第一, 让我们看看我们的公共IP地址. 我们凉爽的Linux高手,所以我们将使用COMAND行此


wget -4 -qO- ifconfig.co
wget -6 -qO- ifconfig.co

我们将得到 2 IP地址: 对于IPv4和IPv6. 当然, 你可以跳过V6和只在IPv4上工作, 这是足以让我们.

在我的情况, 我的IP地址 85.143.172.89. 您还可以通过运行使用ifconfig获得同样的IP. 如果你是在NAT, 必须为它分配到ip像 192.168.10.135 – for example. 再往前所需的端口 (8443, 5353)

现在, lets open the config file /etc/dnsdist/dnsdist.conf and find the line with “ipv4addr” and change the address here.

Then go to addDNSCryptBind… part at the end of the file and uncomment the ones with ipv4 in it so it will look like this

We’ve just removed ‘–‘ from the start of the strings to uncomment them. 也, 更改提供程序名称在此配置: these are “1.dnscrypt.mydomain.com” and same for other. 你可以保留原样, 这不是坏的,它并没有成为一个真正的域名,虽然最好是在一个真实的域名. 我们会离开它是在这个例子中. 现在, 保存文件Ctrl + O键和退出Ctrl + X键和停止服务,并手动运行它,看看日志


service dnsdist stop
dnsdist -v --disable-syslog

我们看到,这是确定并且它正在侦听我们的港口.

好, 工作上半年完成. 离开dnsdist在控制台中运行, 不要关闭它,不要切断互联网关. 现在, 让摸清供应商的公开密钥. 为了做到这一点, 写在控制台下面权与运行dnsdist

printDNSCryptProviderFingerprint("/var/lib/dnsdist/providerPublic.key")

这将显示fingerpring公钥

现在, 让采取指纹,并将其复制到剪贴板,然后打开一个新的控制台窗口用ssh连接到你的VPS (因为我们不希望停止dnsdist正在运行的进程). 在新的控制台, 右以下


fingerprint="DF76:2D34:2E3A:DFCE:6A68:B520:AF34:7D58:A203:0967:184D:2C95:F341:4204:77DC:4450"
fingerprint="${fingerprint//:}"; echo "${fingerprint,,}"

当然, 更换你的价值fingerpring. 这将为我们提供标准化的小写值. 这个复制到剪贴板. For me it is “df762d342e3adfce6a68b520af347d58a2030967184d2c95f341420477dc4450”. 正如你可以猜测, we removed “:” character and lowercased the string, 而已.

现在, 让我们创建一个DNS邮票此服务器. 一起去超市伟大事业页面在这里 https://dnscrypt.info/stamps/

而从配置填充值. 对于我来说,将这样看

现在保存SNDS://… server info stamp.

对我来说,: SDNS://AQYAAAAAAAAAEjg1LjE0My4xNzIuODk6ODQ0MyDfdi00LjrfzmpotSCvNH1YogMJZxhNLJXzQUIEd9xEUBcxLmRuc2NyeXB0Lm15ZG9tYWluLmNvbQ

这对DNSCrypt V1协议一个配置. 其实, 足够了, 但我们从来源dnsdist尤其是使用的协议版本 2. 现在, 做DNSCrypt V2相同 (在端口 5353 在这种情况下)

邮票DNSCrypt V2: SDNS://AQYAAAAAAAAAEjg1LjE0My4xNzIuODk6NTM1MyDfdi00LjrfzmpotSCvNH1YogMJZxhNLJXzQUIEd9xEUBcyLmRuc2NyeXB0Lm15ZG9tYWluLmNvbQ

这实际上是我们所需要的最终结果. 此DNS邮票是加密对我们特别的DNS服务器信息, 我们将添加这种在客户端连接到我们的服务器. 这是不加密的安全性,但只是为了让事情变得更容易, 一样的QR码, 但对于DNS服务器. 好, 所述DNSCrypt服务器配置完成. 让我们来测试我们的DNSCrypt服务器在某些客户端软件.

一旦你有下面的一些客户端测试服务器, 它并不需要在控制台运行. 回到你的VPS,并通过按Ctrl + C停止进程. 然后, 永久启用此服务


systemctl enable dnsdist
systemctl restart dnsdist
systemctl status dnsdist

它会在后台运行, 所以你可以关闭你的SSH连接并关闭窗口腻子.

高级配置

  • 快来了: 设置域TXT记录
  • 快来了: 启用IPv6

安装DNSCrypt客户端的Windows

我们将使用被广泛使用于Linux内核太为DNSCrypt总头目软件: DNSCrypt代理. 它已经编译为Win32和Win64中,所以它不是安装它的一个问题,这是一点都不难. 我们将安装使用所有的公共解析器. 对于使用我们的自定义DNS服务器, 检查dnscrypt代理的configuation为Linux.

开始吧. 下载所需的版本为您的系统 (64或32倍) 从官方的最新版本 GitHub的页面. 如果你不知道,如果你的系统是64位或32倍, 下载X32版本. 我现在虽然我的x64系统会做同样的. 我将下载文件称为 dnscrypt-proxy-win32-2.0.22.zip (你可以从这里下载它太). 现在,让我们找到下载的文件.

这里是我有什么. 提取该文件. 但首先, 下载7Zip的 并安装有相同的菜单,因为我有. 为什么不WinRAR的? 好, 没问题, 但它不是免费的,虽然7zip的是免费的,确实几乎相同. 我将使用7zip的,因为它是免费提供给所有.

好, 现在我们已经提取的文件夹. 因此,我们有一个文件夹命名为dnscrypt代理,布拉布拉

重命名它是整洁漂亮的: dnscrypt代理

现在, 去我的计算机>C盘和创建一个文件夹命名工具. 我们必须有这个管理员权限. Move our dnscrypt-proxy folder into this Tools folder so it will be “Tools->dnscrypt-proxy”

现在, rename the file “example-dnscrypt-proxy.toml” to “dnscrypt-proxy.toml” and open it in text editor, 我建议你安装 记事本+ +. 这是在Windows记事本的最佳替代品也许有一天,微软将包括它,而不是从Windows这个stupud记事本 (抱歉, 微软).

一般, 它不需要在这里做任何事. 做出一些改变,如果你想, 保存它,只是来看看这是什么文件看起来像并将其关闭. 现在, 让安装dnscrypt代理服务. There is a file named “service-install.bat”. 你必须运行它以管理员身份.

有将被打开新的控制台窗口. 检查是否有任何错误和关闭.

所以, now run the second file “service-restart.bat” also As Administrator.

有一个警告,服务无法停止,但它是确定. 服务必须安装,因为它应该运行. Press Start button and open command line by searching for “cmd”

Type “control” and press Enter

控制面板将打开. 发现互联网和网络类

Now choose “Change adapter parameters”

而在列表中的主网络适配器选择 (其连接到互联网). 如果你具备WiFi, 这将是一个WiFi适配器,以便选择

和打开选项. Choose from the list “ipv version 4” and press “Options”

现在,在这里保存所有的点和退出. 关闭所有窗口,并尝试在浏览器中打开一些网页. 如果照常工作, the setup has been done and you have now secured your dns requests.

For ipv6 set your DNS server under the “IP Version 6” to “::1. 如果你不使用它, 即不需要.

安装DNSCrypt客户端Android版 (Adguard)

下载 Adguard 和您的移动设备上安装. 前往设置->域名过滤并启用此功能. The down below there is “Select DNS server”. 点击它,滚动到页面底部看到按钮添加DNS服务器. 下面是一些图片,看看我们在做什么:

现在, 让我们先戳V2协议并对其进行测试.

Choose “Add custom DNS Server” and paste the sdns://… stuff here. 我们将看到这种图片:

Press “Save and enable” and then check logs on server side:

所以, 因为我们看到, 版本协议 2 是伟大的工作.

在Linux上安装客户端DNSCrypt

快来了

在Apple Mac OS X上安装客户端DNSCrypt

快来了

在苹果iOS上安装客户端DNSCrypt

快来了

Exit mobile version