我们将家庭网络转换为DoH,或再次单击过滤鼻子

在Mozilla最近宣布在网络上的生产环境中开始支持基于HTTPS的DNS(DoH)之后,无论这是邪恶还是好的,争论仍在继续。 我认为,“邪恶”的地位主要是基于这样一个事实,即即使出于对您有用的目的,要操作DNS查询也很困难,因此,我现在仍然处于“良好”的地位。
图片


在俄罗斯联邦,电信运营商在我们的立法中处于非常严格的条件,被迫建立复杂的多层系统来阻止对俄罗斯联邦Roskomnadzor禁止访问的内容的访问,而DNS拦截在其中某一水平上或多或少成功地发挥了作用。 使用DoH将使您绕过此级别,而VPN的使用可以使您的生活更加轻松。 请注意,解决方案本身无法避免您被阻止,因为俄罗斯几乎没有提供程序仅依赖通过DNS进行过滤。 您还需要其他一些解决方法来阻止阻塞,例如,VPN,这是我之前的文章中介绍的方法之一。


这是自相矛盾的,但是在当前的全景视图中,电信运营商并没有威胁您绕开他的锁(为此使用专用工具),因此,如果您担心以这种方式伤害他,那么这些担心就没有用了。


但是,切换到特殊的浏览器以绕过DNS拦截不是我们的方法。 我们的方法是将家庭网络中的所有设备快速,有效地转移到DoH,而无需进行不必要的工作。


免责声明


由于发布绕过对俄罗斯联邦领土上禁止的信息的访问方法不是很合法,因此本文的目的是讨论一种方法,该方法可以让您自动访问俄罗斯联邦领土上允许的资源,但是由于某人的行为无法直接访问通过您的提供商。 不幸的是,访问由于文章的操作而获得的其他资源是副作用,而本文的目标绝不是。


TL; DR


我们正在使用Cloudflare DoH部署我们自己的基于Pi-Hole的DNS服务器,以向全世界查询。 目的是对所有DNS查询进行加密,并以这种方式绕过DNS拦截操作员过滤。 一个有用的好处是过滤广告。


没有魔术诀窍打开,对于那些不想自己理解所有复杂性的人来说,这是一个简单的逐步说明。


你需要什么


  1. 信任Cloudflare。 这实际上是非常重要的一点,因为在所描述的实现中,所有DNS查询都由Cloudflare服务处理。 如果您不信任他,那么您将必须实现另一种解决方案(这比所描述的解决方案要复杂一些,但本文的目的并非如此)。
  2. 为了能够在家庭网络上支持不断运行的Linux服务器,该服务器将处理设备的DNS查询。 Pi-Hole要求来自512M RAM(但是,我没有检查较小体积的工作)。 如果您的路由器或NAS能够使用虚拟机-如果Raspberry Pi或ARM上的另一台微型计算机躺在架子上,那么这是一个绝佳的选择-如果ESXi上的虚拟服务器场正在走廊中的嗡嗡声中嗡嗡作响,这也同样不错-我告诉您,你自己知道一切。 如果您没有这些,那么最年轻的解决方案,例如Orange Pi Zero,可以在二级市场上以几百卢布的价格找到,或者从Ali处以正负相同的价钱购买。 但是平台的选择远远超出了本文的范围,因此我们相信您有所收获。 但是,可以在评论中询问有关此主题的问题。
  3. 您必须熟悉Linux和网络。 或至少想得到这样的想法。 由于这次我还没有准备好接受巨大的事物,因此您将不得不为自己研究一些无法理解的时刻。 但是,我当然会在评论中回答特定的问题,并且不可能是唯一要回答的问题,所以请不要犹豫。

源数据


我们的服务器在家庭网络上的IPv4地址为192.168.1.10,并且已分配为静态地址。


Linux上的设置是从根目录执行的(即,在开始配置之前,我们运行sudo su-命令)。


简而言之-解决方案的逻辑


  1. 安装和配置Pi-Hole
  2. 安装和配置cloudflared
  3. 配置家用路由器
  4. 我们解决问题

实际决定


1.安装和配置Pi-Hole


Pi-Hole是一个著名的家庭平台,主要用于通过阻止集中更新的列表中的域请求来对抗广告。 这并不是解决方案的必要组成部分,但是,如果您开始收集家庭DNS,将很难停止。 但认真的说-Pi-Hole可能并不完美,但它可以消除需要“工作”的人的大量头痛。


要在已经运行的Linux服务器上安装Pi-Hole,我们只需要运行一个命令:


curl -sSL https://install.pi-hole.net | bash 

然后正在运行的脚本将指导您完成安装步骤。


当他询问您有关上游DNS提供商的选择时,您可以选择任何一个,因为在下一步中我们仍将对其进行更改。 默认情况下,可以安全地保留所有其他参数。


在安装结束时,该脚本将向您显示从Web界面随机生成的密码,这对于您写下来很有用。


如果在安装过程中出现问题,则可以使用此处描述的替代方法。


2.安装和配置cloudflared


为了通过HTTPS切换到DNS,我们使用Cloudflare的标准解决方案。 最初创建cloudflared守护程序是为了从订阅者的一侧提起Argo隧道,使您可以将Web服务器发布到Cloudflare CDN,即使该服务器托管在NAT后面的私有IP地址上也是如此。 但是,此守护程序的一个非常有用的属性是它作为DoH代理的工作,我们在此使用此属性。


在这里,对于安装,我们需要付出更多的努力,但也没有什么特别复杂的。


我们选择并下载适用于我们平台的安装程序。


 # For amd64 Debian/Ubuntu cd /tmp wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.deb apt-get install ./cloudflared-stable-linux-amd64.deb cloudflared -v # For amd64 CentOS/RHEL/Fedora cd /tmp wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.rpm yum install ./cloudflared-stable-linux-amd64.rpm cloudflared -v # For ARM cd /tmp wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz tar -xvzf cloudflared-stable-linux-arm.tgz cp ./cloudflared /usr/local/bin chmod +x /usr/local/bin/cloudflared cloudflared -v 

执行完最后一条命令后,我们应该获得类似于以下内容的输出:


 cloudflared version 2019.9.0 (built 2019-09-06-0333 UTC) 

如果您有一个(当然,版本和内部版本号可能有所不同),那么恭喜您,安装成功。 现在由您决定。


创建服务的用户:


 useradd -s /usr/sbin/nologin -r -M cloudflared 

创建服务配置文件/ etc / default / cloudflared:


 # Commandline args for cloudflared CLOUDFLARED_OPTS=--port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query 

并且,我们向新创建的用户和可执行文件授予权限:


 chown cloudflared:cloudflared /etc/default/cloudflared chown cloudflared:cloudflared /usr/local/bin/cloudflared 

接下来,创建文件/lib/systemd/system/cloudflared.service,这将使我们有机会将服务集成到systemd中:


 [Unit] Description=cloudflared DNS over HTTPS proxy After=syslog.target network-online.target [Service] Type=simple User=cloudflared EnvironmentFile=/etc/default/cloudflared ExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS Restart=on-failure RestartSec=10 KillMode=process [Install] WantedBy=multi-user.target 

我们激活服务并运行它:


 systemctl enable cloudflared systemctl start cloudflared systemctl status cloudflared 

如果一切顺利,您将看到该服务处于活动(运行)状态。


您可以使用dig命令检查服务的运行情况:


 dig @127.0.0.1 -p 5053 google.com 

在答案的答案部分,您将看到您的服务通过DoH为google.com收到的IP地址,例如:


 google.com. 217 IN A 172.217.6.142 

仅保留将服务连接到Pi-Hole。 为此,请转到Pi-Hole Web界面(在第一阶段中记录的密码对您有用),转到“设置-DNS”菜单项,并使它看起来像这样:


Pi-hole配置的屏幕截图


最主要的是在Custom字段中填写条目127.0.0.1#5053,然后将daw保留在其中,将其从所有其他字段中删除。 之后,不要忘记向下滚动页面并单击“保存”。


如果您忘记输入密码-可以,请通过ssh转到服务器并运行命令pihole -a -p ,它将允许您设置新密码。 好吧,总的来说,看看pihole团队的关键,那里有很多有趣的事情。 例如,使用一个pihole-up命令完成系统更新。


3.设置您的家用路由器


当然,我不能用此文本关闭所有路由器。 但是对于大多数家用路由器,以下几点是正确的:


1)即使从提供商动态获取IP地址,也可以在WAN接口设置中为路由器设置自定义DNS服务器。


2)路由器将其地址发布给内部客户端作为DNS,并将其请求转发到WAN设置中指定的服务器


因此,在这种情况下,对于我们来说,在家用路由器的WAN接口设置中将我们的Pi-Hole的地址注册为DNS服务器是必要且充分的。 重要的是,如果指定了其他设置,则它必须是设置中唯一的DNS服务器-路由器将根据其唯一已知的原理来平衡它们之间的请求,这种情况对于调试网络上的问题非常不便。


如果突然出现问题并且服务停止工作,只需将上述设置更改为提供商的DNS服务器的地址,例如8.8.8.8,然后才可以理解。


如果您的路由器更智能,例如,能够在DHCP中指定将哪个地址作为DNS服务器分发给客户端,则可以选择另一种路径,并直接配置Pi-Hole地址向客户端的分发。 这会稍微减轻路由器的负担,但是会使使用该服务的上述回滚变得复杂。


如果无法解决问题-在评论中提出问题,我们将找到解决方案。


4.我们解决问题


通常,完成上述几点后,您一切都会很好,但是有时我和我的客户也会遇到细微差别。


在开始使用Pi-Hole后,您可能会遇到减少设备(尤其是移动设备)上的广告减少的异常感觉。 不要惊慌,这就是您的意图。 另外,某些服务可能会以您熟悉的方式停止工作,这需要您参与设置。 例如,Aliexpress网站会定期尝试将您重定向到广告列表上的best.aliexpress.com地址,这将阻止所有对Ali的访问。


检测到这样的问题非常简单-如果您尝试访问被阻止的服务器,浏览器将显示错误ERR_NAME_NOT_RESOLVED等,并且通过nslookup <server name>进行的命令行检查返回0.0.0.0。


解决特定服务器的问题也很容易-只需将其添加到白名单中即可。 为此,请转至http://pi.hole/admin ,登录并在左侧菜单中选择“白名单”,然后添加我们需要的服务器。 例如,除了提到的best.aliexpress.com之外,我还必须打开s.click.aliexpress.com以及miui.com域中的一组站点才能使小米服务正常工作。 您可能需要自己的东西。 但是,跟踪确切需要打开的内容并不那么困难-在该服务的仪表板主页和查询日志中,您始终可以查看哪些域请求已被阻止并将其添加到白名单中。


通常,Pi-Hole安装在已经运行某种Web服务的服务器上。 在这种情况下,您将无法访问基于Web的管理界面。 如何解决这种冲突取决于具体情况,但是主要的解决方案是:


  1. 如果不使用Web服务器,而是默认使用它-查找并禁用
  2. 如果使用了Web服务器,并且您知道如何使用它,请将Pi-Hole Web界面作为单独的资源添加到Web服务器。
  3. 您还可以通过更正/etc/lighttpd/lighttpd.conf文件中的server.port参数,将Pi-Hole Web界面放置在其他端口上。 但这需要记住服务器在哪个端口上运行,因此我不欢迎此类方案。

结论


按照承诺,他没有写任何新的东西。 对于许多读者而言,这种方案是可以理解和显而易见的,并且已经实施,或者没有必要实施。 许多其他人使用相同或其他组件以不同的方式构建相似的事物。 如果您需要,我建议您认为此帖子更适合您自己的解决方案。 但是,按照逐步的说明进行操作后,您将已经获得了一项服务,该服务涵盖了过滤广告和使用DoH的基本需求。


传统上,我会回答问题并提供设置帮助。


来自GennPen的 PS注意-使用DoH时,您将依赖于Internet连接,并且如果帐户中的钱用完了,您甚至无法登录提供商的个人帐户进行支付。 因此,对于此解决方案中的此类站点,希望在Pi-Hole中注册静态条目-可以使用pihole -a -r命令在控制台中完成此操作,也可以在/ etc / hosts文件中手动进行。 不幸的是,此工具未包含在Web界面中。

Source: https://habr.com/ru/post/zh-CN468621/


All Articles