使用 DNSCrypt 安装和配置加密 DNS 服务器
DNS是域名解析的缩写。它用于将 IP 地址解析为域名,反之亦然。这有助于消除记住各种互联网站点的特定 IP 地址的复杂性,因此,人们可以使用域名访问页面,例如 google.com、computingforgeeks.com 等。设置 DNS 有多种解决方案服务器,最流行的有 BIND DNS、Knot DNS、NSD、MaraDNS、YADIFA、PowerDNS 等
DNSCrypt 是一种协议,用于通过加密 DNS 客户端和 DNS 解析器之间的通信来提高 DNS 安全性。它通过身份验证防止 DNS 欺骗,帮助用户私密地进行在线通信,而无需担心安全问题。 DNSCrypt 使用加密签名来验证响应是否来自所选的 DNS 解析器,并确保它们在传输时没有被篡改。 DNSCrypt 适用于多种平台,例如 macOS、Android、Linux 和 Windows 以及路由器。
与 DNSCrypt 相关的主要功能和优点是:
- 它通过缓存响应并避免在纯 IPv4 网络上请求 IPv6 地址来减少延迟。
- 它强制流量使用 TCP,通过仅 TCP 隧道或 Tor 进行路由。
- 它可以在本地阻止广告、跟踪器、恶意软件、垃圾邮件以及域名或 IP 地址与您定义的一组规则匹配的任何网站。
- 它允许用户实时查看源自网络的 DNS 流量,并检测受感染的主机和打电话回家的应用程序。
- 它可以防止本地区域的查询被泄露。
- 它支持 DNSCrypt v2、Anonymized DNSCrypt 和 DNS-over-HTTP (DoH) 转发协议,这些协议可以在同一端口(通常是端口 443)上提供服务。
今天我们将学习如何安装和配置加密 DNS 服务器 (DNSCrypt)
1.安装加密DNS服务器(DNSCrypt)
有多种方法可以安装加密 DNS 服务器 (DNSCrypt)。这些包括:
- 使用预编译的二进制文件
- 从源代码编译
- 使用 Docker
在本指南中,我们将学习如何使用预编译的 x86_64 二进制文件安装加密 DNS 服务器 (DNSCrypt)。不幸的是,有适用于 Linux 和 Windows 系统的二进制文件
对于 Linux,您需要 64 位 Debian/Ubuntu 系统,然后按所示操作。
首先,为 DNSCrypt 创建一个目录。
sudo mkdir -p /opt/encrypted-dns
在该目录下,下载最新的预编译包。在编写本文档时,最新版本是 0.9.9。
使用以下命令下载二进制文件:
VER=$(curl -s https://api.github.com/repos/DNSCrypt/encrypted-dns-server/releases/latest|grep tag_name|cut -d '"' -f 4)
wget https://github.com/DNSCrypt/encrypted-dns-server/releases/download/$VER/encrypted-dns_${VER}_amd64.deb
下载后,安装包:
sudo apt install -f ./encrypted-dns_*_amd64.deb
示例输出:
Selecting previously unselected package encrypted-dns.
(Reading database ... 187584 files and directories currently installed.)
Preparing to unpack encrypted-dns_0.9.13_amd64.deb ...
Unpacking encrypted-dns (0.9.13) ...
Setting up encrypted-dns (0.9.13) ...
2.配置加密DNS服务器(DNSCrypt)
安装后,加密 DNS 服务器 (DNSCrypt) 会在 /usr/share/doc/encrypted-dns/ 中存储一个示例配置文件。我们将此配置文件复制到我们创建的目录中:
sudo cp /usr/share/doc/encrypted-dns/example-encrypted-dns.toml /opt/encrypted-dns/encrypted-dns.toml
我们现在可以相应地修改这个配置文件。
sudo vim /opt/encrypted-dns/encrypted-dns.toml
在这里,将listen_addrs
参数修改为客户端可访问的IP地址(如果您在云上运行服务器,这可以是公共IP)
listen_addrs = [
{ local = "0.0.0.0:443", external = "Your_ipv4_address:443" },
## { local = "[::]:443", external = "[Your_ipv6_address]:443" }
]
您可能还需要修改 upstream_addr
以指向您的内部递归 DNS 服务器或保持原样。设置provider_name
## Upstream DNS server and port
upstream_addr = "1.1.1.1:53"
dnscrypt]
## Provider name (with or without the `2.dnscrypt-cert.` prefix)
provider_name = "example.com"
## Does the server support DNSSEC?
dnssec = true
## Does the server always returns correct answers (no filtering, including ad-blocking)?
no_filters = true
## Set to `true` if the server doesn't keep any information that can be used to identify users
no_logs = true
3. 将 DNSCrypt 作为系统服务运行
完成配置后,我们需要为 DNSCrypt 创建一个 systemd 服务文件。这可以使用以下命令来完成:
sudo bash -c 'cat << EOF > /etc/systemd/system/encrypted-dns.service
# /etc/systemd/system/dnscrypt-server.service
[Unit]
Description=DNSCrypt v2 server
ConditionFileIsExecutable=/usr/bin/encrypted-dns
After=syslog.target network-online.target
[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/bin/encrypted-dns -c /opt/encrypted-dns/encrypted-dns.toml
WorkingDirectory=/opt/encrypted-dns/
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF'
启动并启用服务:
sudo systemctl daemon-reload
sudo systemctl enable --now encrypted-dns
验证服务是否正在运行:
$ systemctl status encrypted-dns
● encrypted-dns.service - DNSCrypt v2 server
Loaded: loaded (/etc/systemd/system/encrypted-dns.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2022-11-27 13:34:33 EAT; 5s ago
Main PID: 376198 (encrypted-dns)
Tasks: 6 (limit: 4575)
Memory: 16.6M
CGroup: /system.slice/encrypted-dns.service
└─376198 /usr/bin/encrypted-dns -c /opt/encrypted-dns/encrypted-dns.toml
Sad 27 13:34:33 dnscrypt.computingforgeeks.com systemd[1]: Started DNSCrypt v2 server.
Sad 27 13:34:33 dnscrypt.computingforgeeks.com encrypted-dns[376198]: [WARN encrypted_dns] No state file found... creating a new provider key
....
Sad 27 13:34:33 dnscrypt.computingforgeeks.com encrypted-dns[376198]: [INFO encrypted_dns] DNS Stamp: sdns://AQcAAAAAAAAADzg4Ljk5LjkyLjgxOjQ0MyBvFka8viUkAT9gkYMioJ5XjB>
从上面的输出中,我们可以同意 DNSCrypt 服务器已设置。在服务状态的最后,我们可以看到 DNSCrypt 服务器的 DNS 标记。这会将连接到安全 DNS 服务器所需的所有参数编码为单个字符串。
现在允许所需的端口通过防火墙:
sudo ufw allow 443
sudo ufw allow 53
4. 在本地设备上启用安全 DNS
一旦 DNSCrypt 服务器运行,我们需要使用它来查询 DNS 请求。在这种情况下,我们需要安装 DNSCrypt 客户端。 DNSCrypt 客户端实现有一长串。在本指南中,我们将安装 DNSCrypt 代理,它可以位于本地或远程系统上。
下载客户端最新版本:
VER=$(curl -s https://api.github.com/repos/DNSCrypt/dnscrypt-proxy/releases/latest|grep tag_name|cut -d '"' -f 4)
wget https://github.com/DNSCrypt/dnscrypt-proxy/releases/download/$VER/dnscrypt-proxy-linux_x86_64-${VER}.tar.gz
完成后,提取存档:
tar xvf dnscrypt-proxy-linux_x86_64-${VER}.tar.gz
cd linux-x86_64
创建配置文件并打开它进行编辑:
cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml
vim dnscrypt-proxy.toml
在文件中,进行以下调整并设置您的服务器名称。
server_names = ['myserver']
公共解析器列表上启用了多个提供程序。对于这种情况,我们将忽略它们并使用自定义的。
接下来,删除以下行开头的“#”并提供 DNSCrypt 服务器的 DNS 标记
[static]
[static.'myserver']
stamp = 'sdns://AQcAAAAAAAAAAAAQMi5kbnNjcnlwdC1jZXJ0Lg'
不必担心 DNS 标记,因为可以在 DNSCrypt 服务器上使用 sudo systemctl status crypto-dns
命令检索它。
您还可以设置要阻止的域列表:
[blocked_names]
## Path to the file of blocking rules (absolute, or relative to the same directory as the config file)
blocked_names_file = 'blocked-names.txt'
....
在该目录中,有一个示例文件,可以根据需要进行复制和编辑:
sudo cp example-blocked-names.txt blocked-names.txt
完成更改后,保存配置,然后启动 DNSCrypt 代理服务:
sudo ./dnscrypt-proxy --config dnscrypt-proxy.toml
示例输出:
[2023-10-31 14:16:36] [NOTICE] dnscrypt-proxy 2.1.5
[2023-10-31 14:16:36] [NOTICE] Network connectivity detected
[2023-10-31 14:16:36] [NOTICE] Now listening to 127.0.0.1:53 [UDP]
[2023-10-31 14:16:36] [NOTICE] Now listening to 127.0.0.1:53 [TCP]
[2023-10-31 14:16:36] [NOTICE] Service is not usable yet
[2023-10-31 14:16:36] [NOTICE] Resolving server host [raw.githubusercontent.com] using bootstrap resolvers over udp
[2023-10-31 14:16:36] [NOTICE] Source [public-resolvers] loaded
[2023-10-31 14:16:36] [NOTICE] Service is not usable yet
[2023-10-31 14:16:36] [NOTICE] Resolving server host [download.dnscrypt.info] using bootstrap resolvers over udp
[2023-10-31 14:16:36] [NOTICE] Source [relays] loaded
[2023-10-31 14:16:36] [NOTICE] Firefox workaround initialized
[2023-10-31 14:16:36] [NOTICE] [myserver] OK (DNSCrypt) - rtt: 0ms
[2023-10-31 14:16:36] [NOTICE] Server with the lowest initial latency: myserver (rtt: 0ms)
[2023-10-31 14:16:36] [NOTICE] dnscrypt-proxy is ready - live servers: 1
您现在已设置为从客户端向 DNSCrypt 服务器发送安全 DNS 查询。要测试所有 DNS 查询是否都经过 127.0.0.1:53,您需要打开一个单独终端并编辑 /etc/resolv.conf,如下所示:
$ sudo vim /etc/resolv.conf
nameserver 127.0.0.1
#options edns0 trust-ad
search .
运行以下命令以查看 DNSCrypt 是否按预期处理 DNS 查询
$ nslookup example.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Non-authoritative answer:
Name: example.com
Address: 93.184.216.34
Name: example.com
Address: 2606:2800:220:1:248:1893:25c8:1946
这表明 DNSCrypt 服务器正在安全地处理流量。
将 dnscrypt-proxy 客户端作为 systemd 服务运行
我们还可以配置该服务作为系统服务运行:
sudo bash -c 'cat << EOF > /etc/systemd/system/dnscrypt-proxy.service
# /etc/systemd/system/dnscrypt-server.service
[Unit]
Description=DNSCrypt v2 server
ConditionFileIsExecutable=/usr/local/bin/dnscrypt-proxy
After=syslog.target network-online.target
[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/local/bin/dnscrypt-proxy --config /opt/dnscrypt-proxy/dnscrypt-proxy.toml
WorkingDirectory=/opt/dnscrypt-proxy/
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF'
将文件复制到所需目录:
sudo mkdir /opt/dnscrypt-proxy
sudo cp ~/linux-x86_64/* /opt/dnscrypt-proxy/
sudo cp ~/linux-x86_64/dnscrypt-proxy /usr/local/bin
停止正在运行的服务:
sudo killall -9 dnscrypt-proxy
启动 dnscrypt-proxy 服务:
sudo systemctl enable --now dnscrypt-proxy
检查服务是否正在运行:
$ systemctl status dnscrypt-proxy
● dnscrypt-proxy.service - DNSCrypt v2 server
Loaded: loaded (/etc/systemd/system/dnscrypt-proxy.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-10-31 16:30:16 EAT; 5s ago
Main PID: 868360 (dnscrypt-proxy)
Tasks: 6 (limit: 4617)
Memory: 7.8M
CPU: 22ms
CGroup: /system.slice/dnscrypt-proxy.service
└─868360 /usr/local/bin/dnscrypt-proxy --config /opt/dnscrypt-proxy/dnscrypt-proxy.toml
Okt 31 16:30:16 computingforgeeks dnscrypt-proxy[868360]: [2023-10-31 16:30:16] [NOTICE] Network connectivity detected
Okt 31 16:30:16 computingforgeeks dnscrypt-proxy[868360]: [2023-10-31 16:30:16] [NOTICE] Now listening to 127.0.0.1:53 [UDP]
Okt 31 16:30:16 computingforgeeks dnscrypt-proxy[868360]: [2023-10-31 16:30:16] [NOTICE] Now listening to 127.0.0.1:53 [TCP]
Okt 31 16:30:16 computingforgeeks dnscrypt-proxy[868360]: [2023-10-31 16:30:16] [NOTICE] Source [relays] loaded
....
验证它是否正在处理 DNS 查询:
$ nslookup example.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Non-authoritative answer:
Name: example.com
Address: 93.184.216.34
Name: example.com
Address: 2606:2800:220:1:248:1893:25c8:1946
您还可以查看它是否能够阻止所设置域上的流量。例如,就我而言,我阻止了到 computingforgeeks.com 的流量
判决
这标志着关于如何安装和配置加密 DNS 服务器 (DNSCrypt) 的详细指南的结束。我希望这对你也有用。
在此页面上查看更多内容:
- 如何使用 DNSSec 密钥保护 BIND DNS 服务器
- 在 Windows Server 上安装和配置 DNS 服务器
- 在 Rocky Linux 上配置 PowerDNS 和 PowerDNS Admin
更新于:4个月前
相关文章
- macOS 使用 SSH 连接服务器
- VSCode 插件 Remote SSH 连接远程服务器
- 购买阿里云服务器、安装宝塔面板、放开安全组端口
- PHP之内置web服务器
- 如何正确安装IIS服务器
- Apache报错:无法使用可靠的服务器域名
- C#的网站通过Windows性能计数器监测服务器的性能
- C#中获取本机IP地址、HostName 和DNS名称
- 提高服务器性能的实用技巧:如何使用ddlinux
- 如何在Java中创建一个简单的HTTP服务器
- Ubuntu Linux中如何手动修改配置DNS地址
- 创建 Netboot.XYZ 服务器以通过网络安装发行版
- 域名解析填写指南:主机记录、记录值、IPv6和DNS填写方法
- 如何在 Docker 容器中运行 Emby 媒体服务器
- 如何在 OPNsense 上启用和启动 SSH 服务器
- 将 Proxmox VM 迁移到另一个 Proxmox 服务器
- 一次服务器宕机的排查与解决过程
- 1Panel - 管理 Linux 服务器的最佳 Web 仪表板
- Tomcat服务器稳定性的挑战与崩溃问题解决策略
- 在 Ubuntu 或 Debian 上设置 netboot.xyz iPXE 服务器