在Google Cloud的始终免费使用层上设置Pi-Hole广告拦截VPN服务器

2020-08-22 06:55:27

对于因遵循本指南而导致的任何误用和/或其他意外账单或其他后果,我们概不负责。

本指南的目标是使您能够在云中具有自运行VPN服务器的手机、平板电脑和计算机上安全、私密地使用互联网。它可以免费运行;保护您免受侵入性广告的影响;阻止您的ISP、手机公司、公共WiFi热点提供商和应用程序/网站深入了解您的使用活动。

在谷歌云的免费使用层内运行您自己的隐私优先广告拦截服务。本指南让您使用Google Cloud帐户进行设置,并指导您在Android&;iOS设备和计算机上设置全通道(所有流量)或分割通道(仅DNS流量)VPN连接。

全隧道VPN连接和拆分隧道VPN连接都通过加密的云连接提供基于DNS的广告拦截。不同之处在于:

拆分隧道VPN允许您与本地网络上的设备(如Chromecast或Roku)交互。

全隧道VPN可以帮助绕过公司WiFi网络上配置错误的代理,并保护您免受中间人SSL代理的攻击。

将您的虚拟机命名为pi-hole。您的区域选择只能是任何美国区域(不包括北弗吉尼亚州[US-East4])。我使用了us-East 1和us-East 1-b区,因为它离我最近。

如果您出于任何原因计划保留DNS查找记录,请将引导盘更改为30 GB,否则默认的10 GB磁盘分配就足够了。

依次展开“管理”、“安全”、“磁盘”、“网络”、“独占”,然后单击“网络”选项卡。单击Network Interfaces(网络接口)下的铅笔图标。

外部IP地址不应是短暂的。选择创建IP地址以保留新的静态IP地址。

单击左上角的Hamburger菜单,单击VPC网络,然后单击防火墙规则。

2.单击页面中央上方的创建防火墙规则。您的规则的名称应该是Allow-openvpn,将Targets下拉菜单更改为All Instance in the network。源IP范围应为0.0.0.0/0。应选中UDP复选框,并将其旁边的端口号从ALL更改为1194。

3.然后单击创建按钮。您可以禁用Google使用默认操作ALLOW设置的DEFAULT-ALLOW-RDP规则,但是因为我们的服务器不在端口3389上运行任何服务,所以不使用此规则是无害的。不要禁用default-allow-ssh防火墙规则,否则将从Google Cloud控制台中禁用基于浏览器的SSH。

一旦您通过SSH登录到您的虚拟机,您就需要更新和升级它。

使用您之前在http://your-external-ip/admin/settings.php?tab=dns上记录的外部IP登录Web界面。

单击设置,然后导航到DNS。将您的接口侦听行为设置为侦听此页上的所有接口:

您将进入蓝屏中的一系列提示。所有默认值都是适当的。

在安装程序结束时,重新启动的默认答案是否。您可以说“不”,我们以root身份登录时还有一些内容需要编辑。

编辑server.conf。我通过在bash shell中运行以下命令来使用Nano进行编辑:

保活间隔越长,OpenVPN连接的任一端检测该连接是否不再活着所需的时间就越长。由于移动设备经常断开连接并重新连接,因此需要较低的值。

注释掉Keep Alive 1800 3600并在其下方添加KeepAlive 10 60,如下所示:

注释掉显示cipher AES-256-CBC的行,并在其下面添加cipher AES-128-GCM,其内容如下:

按CTRL O调出Nano底部的保存提示,按Enter保存。然后按CTRL X退出。

要在端口443上通过TCP接受传入的OpenVPN连接,我们需要一个单独的配置文件。通过在bash shell中运行以下命令,我们可以克隆现有配置作为起点:

编辑/etc/iptables/rules.v4。我通过在bash shell中运行以下命令来使用Nano进行编辑:

在-A POSTROUTING-s 10.8.0.0/24-o eth0-j mallade行下面,在新行中添加以下内容:

按CTRL O调出Nano底部的保存提示,按Enter保存。然后按CTRL X退出。

编辑server_tcp443.conf。我通过在bash shell中运行以下命令来使用Nano进行编辑:

编辑server 10.8.0.0 255.255.255.0行以反映IP地址10.9.0.0,如下所示:

编辑Push";dhcp-option dns 10.8.0.1&34;行,以反映IP地址10.9.0.1,如下所示:

注释掉Keep Alive 10 60并在其下方添加KeepAlive 10 120,如下所示:

按CTRL O调出Nano底部的保存提示,按Enter保存。然后按CTRL X退出

通过在bash shell中运行以下命令,在端口443上添加OpenVPN服务:

连接到PI-Hole服务器并设置OpenVPN客户端配置文件。(您不需要具有提升的root权限即可执行此操作。)。

为您的客户配置文件指定一个名称。我喜欢使用由用户的名字、设备的型号和型号(没有空格和特殊字符)组成的字母数字字符串。

为每台设备创建新的客户端配置文件。不要在两个不同的设备之间共享客户端配置文件。

===完成了!Mypixel3xl.ovpn创建成功!为了便于传输,mypixel3xl.ovpn被复制到:/home/myusername/ovpns。请仅在一台设备上使用此配置文件,并为其他设备创建其他配置文件。===。

要将mypixel3xl.ovpn文件发送到您的手机,最简单的方法是最大化SSH窗口并将该文件打印到终端窗口,然后复制和粘贴输出(&;Paste):

按CTRL-直到屏幕缩小到可以在屏幕上看到整个ovpn文件打印的位置。第一行将包含单词client,最后一行是<;/tls-crypt>;。用鼠标突出显示整个块将导致剪刀图标出现在SSH窗口的中间,这意味着此选择已复制到您的剪贴板。

将其粘贴到您最喜欢的文本编辑器中,并使用清晰的名称保存该文件:mypixel3xl-udp-1194-plit-tunel.ovpn

在第12行周围,编辑显示密码AES-256-CBC的行,并将其更改为:

复制mypixel3xl-udp-1194-plit-tunel.ovpn的内容并将其粘贴到您喜欢的文本编辑器中,以清晰的名称保存该文件:mypixel3xl-udp-1194-full-tunel.ovpn。

复制mypixel3xl-udp-1194-Split-Tunel.ovpn的内容并将其粘贴到您喜欢的文本编辑器中,以清晰的名称保存该文件:mypixel3xl-tcp-443-plit-tunel.ovpn。

将第4行末尾的1194更改为443,不要更改此行上的IP地址(它是您的Google Compute Engine虚拟机的外部IP地址):

复制mypixel3xl-tcp-443-plit-tunel.ovpn的内容并将其粘贴到您喜欢的文本编辑器中,使用清晰的名称保存该文件:mypixel3xl-tcp-443-full-tunel.ovpn。

通过电子邮件将这些文件发送给您自己,在Google Drive中上传,或使用您喜欢的任何安全方法将此文件传输到您的设备。将此文件下载到您的设备是安全的。

当“OpenVPN for Android”打开时,您将进入“配置文件”选项卡。您将必须对mypixel3xl-udp-1194-Split-Tunel.ovpn执行以下步骤,并再次对mypixel3xl-tcp-443-Split-Tunel.ovpn执行以下步骤。

单击左上角的Hamburger菜单以选择Google Drive或您的下载文件夹,具体取决于您将.ovpn文件下载到手机的方式。

第一个切换应被禁用,并将显示为VPN仅用于选定的应用程序。

Android系统WebView、您首选的Web浏览器以及您希望屏蔽广告的任何其他应用程序都应该有一个复选标记。

单击“后退”按钮几次,直到再次进入“配置文件”选项卡。

如果您希望节省电池和减少数据使用量,并且只想在使用手机时阻止某些内容,则应启用关闭屏幕后暂停VPN连接。

单击“后退”按钮几次,直到再次进入“配置文件”选项卡。

将mypixel3xl-udp-1194-full-tunel.ovpn和mypixel3xl-tcp-443-full-tunel.ovpn文件从电子邮件或Google Drive下载到Android手机或平板电脑。默认情况下,这些文件将保存到您设备的“下载”文件夹中。

当“OpenVPN Connect”应用程序打开时,在其主页屏幕中,您将看到3个选项:专用隧道、访问服务器和OVPN配置文件。单击OVPN配置文件。

点击您的.ovpn文件名,然后点击右上角的Import(导入),然后点击Add(添加),导入并添加.ovpn客户端配置文件。如果您已经导入了客户端配置文件,则可以通过按右下角的+按钮导入更多客户端配置文件。

在IPv6下,应选择仅IPv4隧道按钮。(默认选择为“无首选项”)。

在“连接超时”下,应选择“连续重试”选项。(默认选择为1分钟)。

使用以下两种方法之一导入并添加所有.ovpn文件:

使用iTunes Sync,选择您的设备,进入应用程序选项卡下的OpenVPN,然后将您的.ovpn文件放入文件共享窗口。

在“连接超时”下,应选择“连续重试”选项。(默认选择为30秒)。

由于计算机可以使用的带宽量,建议在计算机上使用分割通道.ovpn配置文件,而不是使用全通道。

要在Windows上启用粘性拆分隧道VPN,请在将连接导入粘性后,编辑连接并单击网络选项卡。在DNS模式下拉菜单中,选择完全DNS(对所有通信使用VPN DNS)。

如果您没有Homebrew,您可以在Tunnelblick网站上获得备用安装说明。

在IPv4选项卡中启用选项,该选项显示为仅对其网络上的资源使用此连接。

如果您使用拆分隧道仅通过VPN访问DNS,则不需要执行此测试。

您将看到您的IP地址非常显著地显示在标签上方的顶部:您的公有IP地址。

如果您看到的不是Google Compute Engine虚拟机的外部IP地址,则表示您没有全通道VPN。

如果您在连接到VPN时看到IPv6地址,那么您就有大问题了。

如果您没有看到IPv4地址,并且公共IPv6地址与之前Google搜索结果中的地址相同,这意味着您的隧道没有处理任何IPv4流量,您将通过IPv6直接连接到Internet。

这通常意味着您的服务器配置和客户端配置文件有问题。

如果DNS查找不是专门通过到PI-Hole服务器的VPN连接进行的,则存在DNS泄漏。DNS泄漏将导致出现广告。

在http://your-external-ip/admin/settings.php?tab=dns的Pi-Hole Web界面中,只选择一个DNS提供商。两台Google IPv4 DNS服务器将为您提供最高性能。在我们的测试中,我们将取消选择Google IPv4 DNS服务器,而选择2个Cloudflare DNS服务器。

在您的设备上,转到https://www.dnsleaktest.com/并单击扩展测试按钮。在下一页的桌子上,每一行都必须写着“云耀斑”。如果您看到任何不属于Cloudflare的IP,则说明存在DNS泄漏。这通常意味着您的服务器配置和客户端配置文件有问题。

关闭VPN并再次尝试扩展测试,您将看到Internet提供商或路由器定义的默认DNS服务器。

一旦您完成测试,如果您想要PI-Hole最快的DNS解析器,请只使用Google IPv4上游DNS服务器。如果速度不是您的首要要求,您可以使用任何其他上游DNS服务器。

Pi-Hole项目还维护了一个列表,其中列出了您可以测试的充斥着广告的优秀页面:https://pi-hole.net/pages-to-test-ad-blocking-performance/。

离开可在公共IP上访问的PI-Hole Web界面可能会让您感到不舒服。

如果您不希望PI-Hole Web界面可公开访问,请禁用Google云防火墙中的端口80。

确保您的项目在顶部的蓝色条(“Google Cloud Console”旁边)中处于选中状态;默认情况下,它应该是

单击左上角的汉堡菜单,单击VPC网络,然后单击防火墙规则。

单击“Save”(保存)按钮上方的“Disable Rule”(禁用规则)以显示一个单选按钮组。

Default-Allow-RDP不是必需的,因为您的PI-Hole没有在Windows服务器上运行,并且端口3389上没有运行任何服务。

执行此操作后,要访问PI-Hole Web界面,您将必须通过vpn连接,如果您使用的是udp配置文件,则转到http://10.8.0.1;如果您使用的是tcp配置文件,则转到http://10.9.0.1(不太理想)。

Default-allow-ssh实际上应该只对Google的私有网络开放,可惜他们默认情况下让它对整个世界开放。没有人能成功地通过端口22强行进入您的服务器,因为它没有密码保护。它是用钥匙固定的。如果禁用此规则,则在重新启用此规则之前,您将无法在Google Cloud Console中使用基于浏览器的SSH界面。

PiVpn启用PI-Hole的自动安全更新,但如果更新需要,它不会重新启动虚拟机。重新启动VM需要通过SSH连接到它,并在需要时重新启动它。要删除该步骤,让我们使用每日cron作业来检查是否需要重新启动,并根据需要重新启动虚拟机。

为此,让我们使用以下命令sudo Nano/etc/cron.day/ZZ-Restart-if-Required将一个新文件添加到/etc/cron.Daily/中,名为zz-Restart-if-Required。在NANO中,添加以下代码行以检查是否存在需要重新引导的令牌文件,如果存在,则重新启动虚拟机:

存储在/etc/cron.Daily/中的文件仅在权限配置为允许的情况下才会运行,因此我们需要更改权限以允许该文件运行。为此,如果需要,请执行sudo chmod755/etc/cron.Daily/zz-Restart-if-Required。

同样,PI-Hole也会不时更新。让我们也自动安装这些更新。为此,让我们使用sudo Nano/etc/cron.Daily/update-pi-hole创建一个文件,并添加以下代码块:

如果您对它们何时运行感到好奇,Stack Exchange为您提供了一个很棒的问答服务。

如果有可以做得更好的地方,或者如果本文档可以以任何方式改进,请提交包含您的修复或编辑的拉取请求。