• PowerDNS 安装与主从节点配置记录

    1.安装mariaDB apt update apt install mariadb-server -y 2.创建数据库表与用户 mysql -u root -p CREATE DATABASE powerdns; GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'CHANGEME'; FLUSH PRIVILEGES; USE powerdns; CREATE TABLE domains ( id INT AUTO_INCREMENT, name VARCHAR(255) NOT NULL, master VARCHAR(128) DEFAULT NULL, last_check INT DEFAULT NULL, type VARCHAR(6) NOT NULL, notified_serial INT UNSIGNED DEFAULT NULL, account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE UNIQUE INDEX name_index ON domains(name); CREATE TABLE records ( id BIGINT AUTO_INCREMENT, domain_id INT DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, type VARCHAR(10) DEFAULT NULL, content VARCHAR(64000) DEFAULT NULL, ttl INT DEFAULT NULL, prio INT DEFAULT NULL, change_date INT DEFAULT NULL, disabled TINYINT(1) DEFAULT 0, ordername VARCHAR(255) BINARY DEFAULT NULL, auth TINYINT(1) DEFAULT 1, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE INDEX nametype_index ON records(name,type); CREATE INDEX domain_id ON records(domain_id); CREATE INDEX ordername ON records (ordername); CREATE TABLE supermasters ( ip VARCHAR(64) NOT NULL, nameserver VARCHAR(255) NOT NULL, account VARCHAR(40) CHARACTER SET 'utf8' NOT NULL, PRIMARY KEY (ip, nameserver) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE TABLE comments ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, name VARCHAR(255) NOT NULL, type VARCHAR(10) NOT NULL, modified_at INT NOT NULL, account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL, comment TEXT CHARACTER SET 'utf8' NOT NULL, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE INDEX comments_name_type_idx ON comments (name, type); CREATE INDEX comments_order_idx ON comments (domain_id, modified_at); CREATE TABLE domainmetadata ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, kind VARCHAR(32), content TEXT, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind); CREATE TABLE cryptokeys ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, flags INT NOT NULL, active BOOL, content TEXT, PRIMARY KEY(id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE INDEX domainidindex ON cryptokeys(domain_id); CREATE TABLE tsigkeys ( id INT AUTO_INCREMENT, name VARCHAR(255), algorithm VARCHAR(50), secret VARCHAR(255), PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm); ALTER table cryptokeys add column published BOOL DEFAULT 1 after active; 3.关闭可能回影响占用端口的系统应用 systemctl disable systemd-resolved systemctl stop systemd-resolved 4.开始安装后端 ###Debian 10: echo "deb [arch=amd64] http://repo.powerdns.com/debian buster-auth-master main" | sudo tee /etc/apt/sources.list.d/pdns.list apt install curl wget apt-transport-https gnupg2 -y curl https://repo.powerdns.com/CBC8B383-pub.asc | sudo apt-key add - apt-get update apt-get install pdns-server pdns-backend-mysql echo ' # MySQL Configuration # Launch gmysql backend launch+=gmysql gmysql-host=localhost gmysql-port=3306 gmysql-dbname=powerdns gmysql-user=powerdns gmysql-password=CHANGEME gmysql-dnssec=yes ' > /etc/powerdns/pdns.d/pdns.local.gmysql.conf systemctl restart pdns systemctl enable pdns 5.关于主从的配置 master ip : 10.1.1.1 master domain:ns1.mmcloud.com slave ip : 10.1.1.2 slave domain:ns2.mmcloud.com master pdns.conf: allow-axfr-ips=10.1.1.2/32 api=yes #用于开启weeb api api-key=CHANGEMEAPIKEY #用于开启weeb api daemon=yes guardian=yes include-dir=/etc/powerdns/pdns.d loglevel=7 master=yes #主从配置 slave=no #主从配置 webserver=yes #用于开启weeb api webserver-address=0.0.0.0 #用于开启weeb api webserver-allow-from=0.0.0.0/0 #用于开启weeb api xfr-cycle-interval=3 #4.5以上需要使用此选项 slave pdns.conf allow-notify-from=10.1.1.1/32 autosecondary=yes #4.5以上需要使用此选项 daemon=yes disable-axfr=yes include-dir=/etc/powerdns/pdns.d loglevel=7 slave=yes slave-cycle-interval=3 #4.5以下需要使用此选项 xfr-cycle-interval=5 #4.5以上需要使用此选项 slave和master安装方式相同,只有pdns.conf不同与数据库需要插入新的表。 mysql -u root -p USE powerdns; insert into supermasters values ('10.1.1.1', 'ns2.mmcloud.com', 'admin'); eixt; service pdns restart 至此你可以使用powerdns admin进行管理服务,添加域名选择master即可,注意域名需要增加相应的NS解析。

    2021.12.20 浏览:989
  • 如何在Ubuntu上使用Nginx轻松设置DNS over TLS解析器

    本教程将向您展示如何使用Nginx在Ubuntu上设置自己的DNS over TLS(DoT)解析器,这样您的DNS查询就可以被加密,并免受窥探。 什么是DNS over TLS,为什么它很重要 DNS(域名系统)负责将域名转换为IP地址。它是1987年设计的,没有考虑安全或隐私。默认情况下,DNS查询不加密。它们以明文形式在网络上发送,中间实体可以利用它们。例如,中国的防火长城(GFW)使用一种名为DNS缓存毒药的技术对中国互联网进行审查。(他们还使用其他方法,这超出了本文的范围。) GFW检查发送到中国境外DNS服务器的每个DNS查询。由于纯文本DNS协议基于UDP,这是一种无连接协议,GFW可以欺骗客户端IP和服务器IP。当GFW在其阻止列表中找到域名时,它会更改DNS响应。例如,如果一个中国互联网用户想要访问谷歌。GFW向用户的DNS解析程序返回位于中国的IP地址,而不是谷歌的真实IP地址。然后DNS解析程序将假IP地址返回给用户的计算机,因此用户无法访问谷歌。通用域名格式。 TLS上的DNS意味着DNS查询通过使用TLS加密的安全连接发送,这与加密HTTP流量的技术相同。 为什么要运行自己的点解析器? 现在已经有一些公共DNS解析器,比如1.1.1.1和9.9.9.9,它们支持TLS上的DNS,所以如果您没有技能或时间运行自己的DNS,您可以使用它们。然而,一些人认为,这仍然允许大型DNS服务提供商收集用户信息。他们似乎更信任他们的ISP。但我认为,如果你对隐私心存疑虑,你应该运行自己的点解析程序,这样大型DNS服务提供商和ISP都不能监视你。 目前,并非所有DNS解析程序(绑定、解除绑定、结解析程序、PowerDNS递归程序等)都支持TLS上的DNS。我将向您展示如何为您现有的DNS解析程序设置Nginx TLS代理,以提供点服务,而不是为特定的解析程序制作指南,因此无论您使用的是什么DNS解析程序,都可以遵循本教程。 先决条件 假设您在Ubuntu服务器上运行DNS解析器。您可以使用任何DNS解析程序(绑定、未绑定、结解析程序…)我个人使用绑定。 在Ubuntu 16.04/18.04上设置自己的BIND9 DNS解析器 在Ubuntu 20.04上设置自己的BIND9 DNS解析器 您还需要一个域名,因为DNS客户端需要与我们的DNS解析器建立安全的TLS连接。我从namescape注册了我的域名,因为价格低廉,而且他们终身免费保护whois的隐私。 一旦满足上述要求,请按照以下说明操作。 第一步:在Ubuntu服务器上安装Nginx 这很容易做到。只需运行以下命令。 sudo apt安装nginx 第2步:从Let's Encrypt获取受信任的TLS证书 DNS over TLS要求在服务器端安装TLS证书。我们将获取并安装Let's Encrypt证书。使用Let’s Encrypt证书的优点是,它是免费的,更容易设置,并且受客户端软件的信任。 运行以下命令从默认的Ubuntu存储库安装Let's Encrypt client(certbot)。 sudo apt安装certbot 要获得Let's Encrypt TLS证书,我们可以使用以下命令创建一个Nginx虚拟主机。修理点。实例使用你自己的域名。别忘了为这个子域创建DNS记录。 sudo nano/etc/nginx/conf.d/dot。实例通用域名格式。形态 复制以下文本并将其粘贴到虚拟主机文件中。 服务器{listen 80;server_name dot.example.com;root/usr/share/nginx/html/;location ~/.well-known/acme challenge{allow all;} 保存并关闭文件。重新加载Nginx以使更改生效。 sudo systemctl重新加载nginx 创建并启用虚拟主机后,运行以下命令以获取使用webroot插件加密证书。 sudo certbot certonly--webroot--agree tos--email[email protected]-d dot。实例com-w/usr/share/nginx/html/ 步骤3:在Nginx中通过TLS代理创建DNS 编辑Nginx主配置文件。 sudo nano/etc/nginx/nginx。形态 在该文件底部添加以下行。请注意,它们需要放在http上下文之外。 流{#DNS上游池上游DNS{zone DNS 64k;服务器127.0.0.1:53;}#解密服务器的点服务器{listen 853 ssl;ssl_certificate/etc/letsencrypt/live/DoT.example.com/fullchain.pem;ssl_certificate_key/etc/letsencrypt/live/DoT.example.com/privkey.pem;代理通过dns;} 如何在Ubuntu上使用Nginx轻松设置DNS over TLS解析器 Save and close the file. Then test Nginx configuration and restart. sudo nginx -t sudo systemctl restart nginx If there’s a firewall running on Ubuntu server, you need to open TCP port 853. For example, if you use the UFW firewall, run the following command. sudo ufw allow 853/tcp Since we are using DNS over TLS, there’s no need to worry about DNS amplification attack. Step 5: Configure the Stubby DoT Client on Ubuntu Desktop Stubby is an open-source DNS stub resolver developed by the getdns team. A stub resolver is a small DNS client on the end-user’s computer that receives DNS requests from applications such as Firefox and forward requests to a recursive resolver like 1.1.1.1 or 8.8.8.8. Stubby is special in that it supports DNS over TLS. By default, it will only send DNS requests encrypted. Install Stubby on Ubuntu desktop from the default repository. sudo apt install stubby Once installed, stubby runs in the background. check its status with: systemctl status stubby Stubby listens on TCP and UDP port 53 of localhost (127.0.0.1). By default, Stubby uses third-party DNS over TLS resolvers. We need to configure it to use our own. sudo nano /etc/stubby/stubby.yml Scroll down to the upstream_recursive_servers: section and add the following text above other DNS servers. Replace 12.34.56.78 with the IP address of your DoT resolver. # My Own DNS over TLS resolver - address_data: 12.34.56.78 tls_auth_name: "dot.example.com" Then find the following line: round_robin_upstreams: 1 Change 1 to 0. This will make stubby always use your own DNS over TLS resolver. If it’s not available, stubby will use other DNS servers. Save the file and restart stubby for the changes to take effect. sudo systemctl restart stubby Step 6: Configure Ubuntu Desktop to Use Stubby Although Stubby is running, it’s not being used by the operating system. Click the Network Manager icon on the upper-right corner of your desktop. Then select wired settings. (If you are using Wi-fi, select Wi-fi settings.) Click the gear button. Select IPv4 tab, then in DNS settings, switch Automatic to OFF, which will prevent your Ubuntu system from getting DNS server address from your router. Enter 127.0.0.1 in the DNS field. Click Apply button to save your changes. Then restart NetworkManager for the changes to take effect. sudo systemctl restart NetworkManager Once you are reconnected, you can see that your Ubuntu system is now using 127.0.0.1 as the DNS server in the Details tab. How to Check if Your DNS Traffic is Encrypted We can use WireShark to monitor DNS traffic. Install WireShark on Ubuntu desktop. sudo apt install wireshark If you are asked “Should non-superusers be able to capture packets?”, answer Yes. Once it’s installed, run the following command to add your user account to the wireshark group so that you can capture packets. sudo adduser your-username wireshark Log out and log back in for the changes to take effect. Then open WireShark from your application menu, select your network interface in WireShark. For example, my Ethernet interface name is enp5s0. Then enter port 853 as the capture filter. This will make WireShark only capture traffic on port 853, which is the port used by DNS over TLS. Click the button on the upper-left corner to start capturing. After that, in terminal window, run the following command to query domain name by using the dig utility. For instance, I can query the A record of my domain name. dig A linuxbabe.com Now you can see the captured DNS traffic in WireShark. Connections were made over TCP and encrypted with TLS, which is what we want. You should check if the Destination column includes the IP address of your DoT resolver. If DNS queries are sent without encryption, then the computer would contact DNS server on port 53. You can capture packets again with port 53 as the capture filter, but you won’t see any packets in WireShark, which means stubby is encrypting your DNS queries. Wrapping Up I hope this tutorial helped you set up a DNS over TLS resolver with Nginx on Ubuntu. You may also want to read: 使用DNSdist在Ubuntu上运行自己的DNS over HTTPS(DoH)解析器 As always, if you found this post useful, then subscribe to our free newsletter to get more tips and tricks. Take care ?

    2022.03.23 浏览:51
  • 使用DNSdist在Ubuntu上设置DNS over HTTPS(DoH)解析器

    本教程将向您展示如何使用DNSdist在Ubuntu上设置自己的DNS over HTTPS(DoH)解析器,这样您的DNS查询就可以被加密并防止被窥探。 什么是HTTPS上的DNS?为什么它很重要 DNS(域名系统)负责将域名转换为IP地址。它是1987年设计的,没有考虑安全或隐私。默认情况下,DNS查询不加密。它们以明文形式在网络上发送,中间实体可以利用它们。例如,中国的防火长城(GFW)使用一种名为DNS缓存毒药的技术对中国互联网进行审查。(他们还使用其他方法,这超出了本文的范围。) GFW检查发送到中国境外DNS服务器的每个DNS查询。由于纯文本DNS协议基于UDP,这是一种无连接协议,GFW可以欺骗客户端IP和服务器IP。当GFW在其阻止列表中找到域名时,它会更改DNS响应。例如,如果一个中国互联网用户想要访问谷歌。GFW向用户的DNS解析程序返回位于中国的IP地址,而不是谷歌的真实IP地址。然后DNS解析程序将假IP地址返回给用户的计算机,因此用户无法访问谷歌。通用域名格式。 HTTPS是加密纯文本HTTP网页的标准方式。使用HTTPS上的DNS(DoH),您的DNS查询将被加密,因此第三方无法看到您的DNS查询。 为什么要运行自己的DoH解析器? 现在已经有一些公共DNS解析器,比如1.1.1.1和9.9.9.9,它们支持HTTPS上的DNS,所以如果您没有技能或时间运行自己的DNS,您可以使用它们。从Firefox版本61开始,您可以在浏览器设置中启用DNS over HTTPS,这是互联网安全和隐私方面的一大进步。Firefox默认使用Cloudflare解析器(1.1.1.1)。然而,一些人认为这允许Cloudflare收集Firefox用户的信息。他们似乎比Cloudflare更信任他们的ISP。但我认为,如果你对隐私心存疑虑,你应该运行自己的DoH解析器,这样Cloudflare和ISP都不能监视你。 DoH vs DoT 除了HTTPS上的DNS,还有另一个协议也旨在加密DNS查询。它被称为TLS上的DNS(DoT)。之前我在Ubuntu桌面上写了一篇关于通过TLS使用DNS的指南,但现在我正在切换到通过HTTPS使用DNS。 对于生活在中国等互联网审查严格的国家的人来说,使用DoH更为有利。 DoT在TCP端口853上运行,该端口很容易被国家防火墙屏蔽。 DoH在TCP端口443上运行,这是HTTPS网站的标准端口,这使得DoH非常难以阻止,因为如果TCP端口443被阻止,那么几乎所有HTTPS网站也将被阻止。 我的DoH解析器运行在中国境外的VPS(虚拟专用服务器)上,中国的防火长城无法拦截我的DNS查询。我甚至可以将我的DoH解析器的IP地址隐藏在Cloudflare CDN(内容交付网络)后面。 DoH的另一个优点是,它允许web应用程序通过现有的浏览器API访问DNS信息,因此不需要存根解析器。 主要DNS解析程序中的DoH支持 BIND将在9.17版本中支持DoH,该版本仍在开发中。Ubuntu 20.04和21.04存储库随BIND 9.16一起发布。 自版本4.0.0以来,结分解器支持DoH。目前的最新版本是5.11。它有Debian、Ubuntu、CentOS和Fedora的官方存储库。 Unbound从1.12.0版开始支持DoH。 PowerDNS递归程序目前不支持DoH。 实际上,我更喜欢用DNSdist运行DoH解析器,它在1.4.0版中增加了对DoH的支持。目前的最新版本是1.5。它有Debian、Raspbian、Ubuntu和CentOS的官方存储库。DNSdist是一个DNS负载平衡器,可以将DNS查询转发到后端DNS解析程序,因此无论您使用的是哪个DNS解析程序,都可以使用DNSdist运行自己的DoH服务器。DNSdist由PowerDNS团队开发。 先决条件 假设您在Ubuntu服务器上运行DNS解析器。你可以使用任何DNS解析程序(绑定、结解析、未绑定…)我个人使用绑定。 在Ubuntu 16.04/18.04上设置自己的BIND9 DNS解析器 在Ubuntu 20.04上设置自己的BIND9 DNS解析器 一旦DNS解析程序启动并运行,请按照以下说明操作。 第一步:在Ubuntu服务器上安装DNSdist 如果使用非LTS Ubuntu,则必须从默认存储库(sudo apt install dnsdist)安装dnsdist。如果您使用Ubuntu LTS,建议从上游存储库安装DNSdist,这样您将拥有最新的稳定版本。首先,需要为DNSdist创建一个源列表文件。 Ubuntu 20.04 echo“deb[arch=amd64] main“| sudo-tee/etc/apt/sources.list.d/pdns.list Ubuntu 18.04 echo“deb[arch=amd64] main“| sudo-tee/etc/apt/sources.list.d/pdns.list Ubuntu 16.04 echo“deb[arch=amd64] main“| sudo tee/etc/apt/sources.list.d/pdns.list 接下来,我们为DNSdist创建一个首选项文件来锁定包,这样就不会意外地从另一个存储库安装DNSdist。 sudo nano/etc/apt/preferences。d/dnsdist 将以下行添加到文件中。 包装:dnsdist*密码:origin repo。powerdns。com Pin优先级:600 保存并关闭文件。然后运行以下命令导入PowerDNS公钥,以便APT软件包管理器可以验证从该存储库下载的软件包的相互关系。 卷曲https://repo.powerdns.com/FD380FBB-pub.asc| sudo apt按键添加- 接下来,更新存储库列表并安装DNSdist。 sudo apt更新sudo apt安装dnsdist 默认情况下,DNSdist尝试绑定到端口53。因为您在端口53上有一个现有的DNS解析器,比如BIND监听,dnsdist。服务将无法启动。 由于我们只是部署一个DoH解析器,并不关心DNS负载平衡,所以我们可以将DNSdist配置为在另一个端口上侦听。编辑DNSdist配置文件。 sudo nano/etc/dnsdist/dnsdist。形态 此文件中没有内容。现在,只需在该文件中添加以下行,DNSdist就会监听TCP和UDP端口5353,而不是端口53。 setLocal(“127.0.0.1:5353”) 保存并关闭文件。然后重新启动DNSdist。 sudo systemctl restart dnsdist 检查它的状态。 systemctl状态dnsdist 它应该处于活动状态(正在运行)。 第2步:在Ubuntu服务器上安装Let's Encrypt Client(Certbot) HTTPS上的DNS需要在服务器端安装TLS证书。我们将获取并安装Let's Encrypt证书。使用Let’s Encrypt证书的优点是,它是免费的,更容易设置,并且受客户端软件的信任。 运行以下命令从默认的Ubuntu存储库安装Let's Encrypt client(certbot)。 sudo apt安装certbot 要检查版本号,请运行 certbot——版本 样本输出: certbot 0.40.0 步骤3:从Let's Encrypt获取受信任的TLS证书 我建议使用standalone或webroot插件获取dnsdist的TLS证书。 独立插件 如果你的Ubuntu服务器上没有运行web服务器,你可以使用独立插件从Let's Encrypt获取TLS证书。为子域(doh.example.com)创建DNS记录,然后运行以下命令。 sudo certbot certonly--独立--首选挑战http--同意tos--电子邮件[电子邮件 受保护]-d doh。实例通用域名格式 哪里: certonly:获取证书,但不要安装它。 --standalone:使用standalone插件获取证书 --首选挑战http:执行http-01挑战以验证我们的域,该域将使用端口80。 --同意:同意让我们加密服务条款。 --电子邮件:电子邮件地址用于帐户注册和恢复。 -d:指定你的域名。 从下面的截图可以看到,我成功地获得了证书。

    2022.03.23 浏览:60