WireGuard作为带有广告的Kubernetes上的VPN服务器

2020-07-13 03:16:31

我在我的浏览器中使用uBlock Origin扩展,就像大多数阅读这类文章的人一样,但对于大多数人,包括我的其他家庭成员来说,情况并非如此。因此,为了增强他们的网络浏览体验,我决定在DNS级别屏蔽广告。

但我想,为什么不就此打住,为什么不在我做这件事的时候也改善他们的隐私呢?所以我也决定建立一个VPN。现在让我在这里澄清一些事情,我不是VPN的狂热粉丝,也不是大公司宣传VPN的方式,下面是汤姆·斯科特(Tom Scott)制作的一段很棒的视频,解释了我的意思。但它们也有自己的用例,其中一些是:

我看过Blokada和DNS66这样的应用程序,它们可以让你在移动设备上拦截设备范围的广告。在Android上,这是通过在手机上创建内部VPN来实现的,这样来自设备的所有流量都可以通过它进行路由,并且它有一个包含所有列入黑名单的域的文件,以过滤掉流量。

但这种方法有一个警告。由于Android的限制,我不能使用其他VPN来路由我的流量。

一次只能运行一个VPN连接。创建新接口时,现有接口将停用。

这意味着我的ISP仍然可以访问我的浏览模式。因此,我开始寻找拦截广告的DNS服务器,这样我就可以将Android的全球DNS指向它。我发现AdGuard和PiHole是最顶尖的项目。在家里把这些东西放在树莓PI上似乎是一个可行的解决方案,但再说一遍,人们在旅行时不能使用它。解决方案显然是将其托管在可公开访问的服务器上。在这两个人中,我发现AdGuard更有吸引力,原因如下。

你可以在这里找到更多关于他们的不同之处。这两个都是伟大的项目,但AdGuard完美地满足了我的要求。

当谈到VPN时,我甚至没有考虑使用OpenVPN,WireGuard是显而易见的选择,因为它速度快、体积小、易于审计的代码库(我不是要审计它,但仍然)、跨平台兼容性和与Linux内核的集成。

作为Kubernetes的忠实粉丝并将基础设施作为代码进行维护,我想要一种能够轻松部署和版本控制我的部署的方法。经过多次搜索,我偶然发现了一个基于wireGuard为Kubernetes构建的网络覆盖。通过加密Pod间通信,并允许我在跨越多个云提供商的节点上构建安全群集,它可以做我想做的事情,同时还可以增强我的群集的安全性。此外,它还可以让我轻松调试部署在Kubernetes集群上的应用程序,因为当连接时,我将成为网络上的一个对等用户,从而可以访问部署、服务等的所有私有IP。您可以观看Lucas Servén Marín的这篇演讲以了解更多信息。

没有更多的麻烦,让我们直接跳到设置中。我将解释在K3S群集上设置它的步骤。您可能需要根据您的群集修改它们。在部署K3之后,第一件需要做的事情就是设置KIO。首先在k3s上下载KIO的货单。

现在,您需要修改kg容器的args下的DaemonSet部分,并将其添加到-Mesh-Granity=Full。

.-kubeconfig=/etc/Kubernetes/kubeconfig-hostname=$(NODE_NAME)-Mesh-Granality=Full env:-NAME:NODE_NAME值From:fieldRef:fieldpath:spec.nodeName.。

这样做是为了确保我们的所有节点都网状连接在一起,而与数据中心无关。然后只需应用清单即可。

这将在稍后用于设置WireGuard VPN。稍后会详细介绍这一点。现在我们可以继续设置AdGuard了。这是AdGuard的说明书。

apiVersion:apps/v1Kind:DeploymentMetadata:Name:adGuardhomespec:selector:matchLabels:app:adGudhome副本:1策略:type:RollingUpdate RollingUpdate:maxUnailable:1 maxSurge:0模板:METADATA:Labels:app:adGudhome规范:卷:-Name:tls-cert-Secret:SecretName:Production-TLS-cert-name:adGuard-config hostPath:path:&#。类型:目录或创建容器:-name:adGudhome映像:adGuard/adGuardhome:v0.102.0端口:#Regular DNS Port-tainerPort:53 hostPort:53 protocol:udp-tainerPort:53 hostPort:53 protocol:tcp#dns over TLS-tainerPort:853 hostPort:853 protocol:tcp volumemount:-name:tls-cert-Secret mount tPath:/certs-name:adGuard-config mount tPath:/。名称:adGuardhome标签:app:adGuardhomespec:type:ClusterIP选择器:app:adGuardhome端口:-port:80#targetPort:3000 targetPort:80 protocol:tcp。

RollingUpdate被有意配置为不等待新Pod启动,并在部署期间直接终止现有Pod。从表面上看,这似乎是一种反模式,但由于我正在使用hostPort指令,因此除非主机上有端口53可供其绑定,否则不会调度新Pod,因此必须先终止现有Pod,然后才能部署新Pod。

另外,我最初打算使用ConfigMap来保存AdGuardHome.yml,但AdGuard在初始启动时试图写入它时出现了一些问题,但由于ConfigMap被设置为ReadOnly,Pod创建通常会失败,所以我决定使用Volume,直到我弄清楚问题。

对于初始设置,可以在端口3000上访问AdGuard管理UI,因此您必须首先在adGuardhome服务中将targetPort切换为3000,访问admin UI,设置密码,然后将targetPort恢复为80。

您还可以在“DNS设置”下启用DNSSEC,以通过对DNS响应进行签名并使篡改可检测来保证DNS响应的真实性。

仅当您要启用TLS上的DNS时,才需要装载TLS-cert-secret的卷。您需要配置入口资源,然后才能将其挂载到此处。

要启用DNS-over-TLS,可以在AdGuard管理UI上转到Encryption Settings->;Enable Encryption,然后输入证书路径/certs/tls.crt和密钥路径/certs/tls.key。再次重申,您的Inress资源需要正确配置,并且您需要拥有托管AdGuard的域的有效TLS证书。

在Android Pie及更高版本的Android手机上,您可以进入设置->;WiFi和互联网->;私有DNS。选择Private DNS Hostname Provider(专用DNS主机名提供程序),并在上配置后将其设置为的域名。您也可以在您的家庭路由器上配置它,以确保所有设备都能获得DNS级别的广告拦截。

从现在开始,我将把K3S集群称为服务器,将本地笔记本电脑称为客户端。

您的服务器和客户端计算机上都需要安装WireGaurd。按照您的发行版的步骤进行安装。如果您使用的是前沿发行版,如ArchLInux或Gentoo,那么您不需要在服务器端做任何事情,因为此时WireGuard已经嵌入内核。但是,在客户端,您需要安装它才能让命令行客户端启用/禁用界面。

在客户端拥有的另一个有用工具是kgctl。您可以使用以下命令进行安装。

现在,我们需要在客户机上创建私钥和公钥对。

这将创建具有各自密钥内容的2个文件。此密钥对需要在服务器上进行授权。您只需创建对等资源即可做到这一点。创建名为archie.yaml的文件。

apiVersion:kilo.squat.ai/v1alpha1Kind:PeerMetadata:Name:Archiespec:alloweIPs:-10.120.120.1/32#这只是个示例,您可以在此处使用任何有效的CIDR public Key:client_public_key#在此处输入公钥,即您刚刚生成的公钥Keeplive:10。

请记住,允许的IP应该是有效的CIDR,该CIDR在服务器和客户端都可用。现在,我们可以使用kgctl工具生成客户端WireGuard配置的对等部分。

在客户端的/etc/wireguard位置创建一个名为adgaurd.yaml的文件,并向其中添加以下内容。

[interface]address=10.120.120.1/32#使用对等清单中列出的相同CIDR PrivateKey=Clinet_PRIVATE_KEY#您在客户端上生成的CIDR DNS=Your_SERVER_IP#输入服务器的IP以阻止广告,FQDN由于某种原因不能在Android上工作[Peer]AllowweIP=0.0.0.0/0,::/0#此修改对于通过wireguard接口路由来自您计算机的所有流量非常重要。

您可以通过访问ifconfig.io验证您是否已连接到VPN服务器。它应该将您的IP显示为服务器的IP。

使用上面概述的相同流程,您可以添加多个对等设备并创建多个配置。您还可以安装并使用qrencode实用程序将相同的配置转换为二维码,以便在手机上轻松扫描。

这将在您的终端上打印一个二维码。您可以在手机上安装WireGuard Android应用程序,然后扫描此二维码以导入配置。

维奥拉,只要你连接上了,你的ISP就不能窥探你正在访问的网站,此外,你的所有流量都会被过滤掉,因为广告会被过滤掉,同时还会通过服务器路由你的数据,以防止你的网络中的恶意行为者,对于最重要的樱桃来说,你可以让所有的设备连接起来,相互交谈,而不管它们所在的位置/网络是什么。