运行我自己的DoH继电器并使Pi-hole保护远离家

2021-03-01 07:31:44

我绝对喜欢我的Pi孔在家里为我提供的保护,并且绝对讨厌当我不在家时我无法获得这些好处,所以我决定解决这个问题。这非常容易做到,并且可能是一个有趣的小项目,在其他领域也很有用!

如果您不熟悉Pi-hole,那么您应该是。它是一个小型DNS服务器,您可以在房屋内的Raspberry Pi上运行,它将对所有不良内容进行DNS级别阻止!我有一个博客,介绍了如何设置Pi-hole以及我做过的一些更高级的内容,但是老实说,如果您不希望进一步介绍它,那么即使是基础知识也将是一个很大的改进。

我最近在@The_Pi_Hole中添加了几个新的主机列表,使被阻止的域达到1.8m +!现在,我网络上超过20%的DNS查询已被阻止,实际上,我有一些例外可以使工作正常进行。 pic.twitter.com/PRN1s8PoaX

-斯科特·赫尔姆(Scott Helme)(@Scott_Helme)2021年1月13日

我所做的那条微弱的推文主题涵盖了大多数概论,并且我喜欢Pi-hole如何毫不费力地保护我网络上的所有设备。因为它是在DNS上完成的,所以您的PC,电话,笔记本电脑,电视,冰箱,烤面包机上不需要广告拦截器...等等。确切地。网络范围的保护是这里的主要好处。问题是,当我走出家门并放下Wi-Fi时,我不在网络上,因此失去了所有保护。

您可以采用许多不同的方法,而我选择的方法不是或一定是适合您的正确方法。这就是我的操作方式,我的标准是快速简便!

我需要的是一种让我不在家里的时候,我的手机发出的DNS请求能够打通我的Pi漏洞的方法。对于我的笔记本电脑,由于其他原因,我已经有一个VPN解决方案可以返回家中,但这确实是一把破烂锤。在我的手机上获取经过Pi-hole过滤的DNS。我还想像往常一样,看看是否能从中获得更多的好处,而不仅仅是将DNS传递给我的Pi-hole,而当我想到DoH或HTTP-over-HTTPS时。我在链接博客中进一步讨论了DoH,以及它如何通过基本通过HTTPS将JSON请求作为JSON请求发送来使您的DNS加密。这是一个简单的HTTP API ...令我震惊的是,如果可以让我做一个DoH,我就可以托管一个简单的HTTP(S)终结点来对电话中的字段进行查询!

现在,如何使DoH服务器快速,轻松地启动并运行?我做了一次谷歌搜索,几乎马上就发现Nginx具有从DoH到DNS的功能!考虑到我已经使用Nginx在其他地方运行本地服务器,这真是太棒了,这将是一件非常简单的事情。这是我的nginx.conf文件的补充。

stream {#导入处理DoH请求的JavaScript文件js_include /etc/nginx/njs.d/nginx_stream.js; #DNS上游池(也可以是DoT)上游dns {区域dns 64k;服务器192.168.1.21:53; #我的本地Pi-hole}#HTTPS(网关)上的DNS转换过程#上游可以是DNS(TCP)或DoT服务器{听127.0.0.1:8053; js_filter dns_filter_doh_request; proxy_pass dns; }} http {#DoH配置上游dohloop {区域dohloop 64k;服务器127.0.0.1:8053; } ...}

服务器{监听*:443 ssl http2;听[::]:443 SSL http2;根目录/ var / www / html / home; server_name doh.scotthelme.co.uk; client_max_body_size 10M; ssl_certificate /home/scott/certificates/doh.scotthelme.co.uk/chain.crt; ssl_certificate_key /home/scott/certificates/doh.scotthelme.co.uk/private.key; ssl_dhparam /home/scott/acme/dhparam.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers" ECDHE-ECDSA-AES256-GCM-SHA384&#34 ;; ssl_prefer_server_ciphers; gzip on; gzip_disable" msie6&#34 ;; gzip_proxied任何; gzip_vary on; gzip_types文本/纯文本/ css应用程序/ x-javascript文本/ xml应用程序/ xml应用程序/ xml + rss文本/ javascript文本/ js应用程序/ javascript; gzip_static on;位置/ {返回404" 404找不到\ n&#34 ;; } location / dns-query {proxy_http_version 1.1; proxy_set_header连接"&#34 ;; proxy_pass http:// dohloop; }}

就是这样!现在,我有了自己的DoH端点,可以查询该端点,并将请求发送到我的Pi-hole,这意味着对使用该端点的任何设备都提供了全面保护!下一个问题是如何让我的手机使用DoH?

在更高版本的Android上,您可以通过转到设置->设置系统范围的DoH终结点。网络和互联网->进阶->专用DNS。在我的iPhone上,尚无等效设置,虽然应用可以选择使用DoH,但我想在整个系统范围内强制使用此设置。为此,我将使用Apple移动设备管理(MDM),并且不需要花费您想的那么多就可以将其设置为打开状态,大概只需几分钟。要创建配置配置文件,您只需要一个XML文件,其中包含要在配置文件将加载到的设备上强制执行的定义的设置,这是我的:

&lt;?xml version =&#34; 1.0&#34; encoding =&#34; UTF-8&#34;?&gt;&lt;!DOCTYPE plist PUBLIC&#34;-// Apple // DTD PLIST 1.0 // EN&#34; &#34; http://www.apple.com/DTDs/PropertyList-1.0.dtd"&lt; plist version =&#34; 1.0&#34;&gt;&lt; dict&gt; &lt; key&gt; PayloadContent&lt; / key&gt; &lt; array&gt; &lt; dict&gt; &lt; key&gt; DNSSettings&lt; / key&gt; &lt; dict&gt; &lt; key&gt; DNSProtocol&lt; / key&gt; &lt; string&gt; HTTPS&lt; / string&gt; &lt; key&gt; ServerURL&lt; / key&gt; &lt; string&gt; https://doh.scotthelme.co.uk/dns-query< / string&gt; &lt; / dict&gt; &lt; key&gt;有效载荷描述&lt; / key&gt; &lt; string&gt;将设备配置为DoH&lt; / string&gt; &lt; key&gt; PayloadDisplayName&lt; / key&gt; &lt; string&gt; Scott Helme DoH&lt; / string&gt; &lt; key&gt; PayloadIdentifier&lt; / key&gt; &lt; string&gt; com.apple.dnsSettings.managed.c9731aa9-1b80-46aa-af7f-5ab8beca8fe1&lt; / string&gt; &lt; key&gt; PayloadType&lt; / key&gt; &lt; string&gt; com.apple.dnsSettings.managed&lt; / string&gt; &lt; key&gt; PayloadUUID&lt; / key&gt; &lt; string&gt; 1d01eca5-ed69-4abf-ad99-340aa8d98802&lt; / string&gt; &lt; key&gt; PayloadVersion&lt; / key&gt; &lt;整数&gt; 1&lt; /整数&gt; &lt;密钥&gt;禁止禁用&lt; /密钥&gt; &lt; false /&gt; &lt; / dict&gt; &lt; / array&gt; &lt; key&gt;有效载荷描述&lt; / key&gt; &lt; string&gt;配置设备以使用我自己的DoH服务器。 &lt; key&gt; PayloadDisplayName&lt; / key&gt; &lt; string&gt; Scott Helme DoH&lt; / string&gt; &lt; key&gt; PayloadIdentifier&lt; / key&gt; &lt; string&gt; uk.co.scotthelme.doh&lt; / string&gt; &lt; key&gt; PayloadRemovalDisallowed&lt; / key&gt; &lt; false /&gt; &lt; key&gt; PayloadType&lt; / key&gt; &lt; string&gt;配置&lt; / string&gt; &lt; key&gt; PayloadUUID&lt; / key&gt; &lt; string&gt; d9358d81-c292-41ef-8d8a-2dbfa9911139&lt; / string&gt; &lt; key&gt; PayloadVersion&lt; / key&gt; &lt;整数1&lt; /整数&lt; / dict&gt;&lt; / plist&gt;

我的个人资料是对此处找到的其中一个个人资料的改编,如果愿意,可以使用这些个人资料将DoH强制使用Cloudflare 1.1.1.1解析器之类的公共端点。您还可以在此处找到有关MDM有效负载中DNS设置的更多详细信息。创建配置文件后,您需要将其下载到您的iPhone上,我只是通过电子邮件将其发送并保存在本地。从那里单击配置文件,然后按照提示进行安装。

就是这样! 现在,我所有的DNS流量都使用DoH路由到我家里的简单中继,然后将其传递到我的Pi孔,以在需要时进行过滤/阻止。 当然,我的Pi-hole也向Cloudflare的上游供应商提供DoH服务,因此现在全部已加密和受保护! 举例来说,我在这里开设了一个非常重要的4G网站,并且可以看到我的Pi孔中显示了DNS请求! 客户端有home.scotthelme.co.uk,这是服务器的内部名称,为什么会这样显示,但是如果我登录到服务器并拖尾Nginx访问日志,则可以看到DoH查询从我的手机中传入 从外部! 现在,无论身在何处,我都将始终受到Pi孔的保护,同时还能获得性能上的优势,因为当我离开Wi-Fi网络时,注意到一切变慢了很多,这开始困扰我! 😅 如果您希望在我发布新博客时收到通知,请考虑订阅! 标签:Pi-Hole,DNS,DoH,DoT,MDM