使用WireGuard和Raspberry Pi作为服务器设置简单的VPN

由于WireGuard 将成为未来Linux 5.6内核的一部分,因此我决定了解如何最好地将此VPN与Raspberry Pi上的LTE路由器/接入点集成

设备


  • 具有LTE模块和公共IP地址的Raspberry Pi 3。将会有一个VPN服务器(以下简称edgewalker
  • 应该使用VPN进行所有通信的Android手机
  • 仅在网络内部使用VPN的Linux笔记本电脑

连接到VPN的每个设备都必须能够连接到所有其他设备。例如,如果两个设备都是VPN的一部分,则电话应该能够连接到便携式计算机上的Web服务器。如果设置非常简单,则可以考虑通过VPN连接到VPN和桌面。

鉴于有线和无线连接的安全性越来越小(针对性攻击针对WPA2黑客的KRACK攻击针对WPA3的Dragonblood攻击),我认真考虑了在我的所有设备上使用WireGuard的可能性,无论它们在什么环境下工作。

软件安装


WireGuard 为大多数Linux,Windows和macOS发行版提供了预编译的软件包Android和iOS应用程序通过应用程序目录交付。

我拥有最新的Fedora Linux 31,并且在安装之前我懒得阅读手册。我只是找到了软件包wireguard-tools,安装了它们,然后我不明白为什么什么都不起作用。进一步的研究表明,我没有安装软件包wireguard-dkms(带有网络驱动程序),并且不在我的发行版存储库中。

如果我阅读了说明,则将采取正确的步骤:

$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools

我已经在Raspberry Pi上安装了Raspbian Buster分发工具包,那里已经有一个软件包wireguard,请安装它:

$ sudo apt install wireguard

在Android手机上,我从Google App Store的官方目录中安装了WireGuard VPN应用程序

密钥安装


对于主机身份验证,Wireguard使用简单的私钥/公钥方案对VPN主机进行身份验证。您可以使用以下命令轻松创建VPN密钥:

$ wg genkey | tee wg-laptop-private.key |  wg pubkey > wg-laptop-public.key
$ wg genkey | tee wg-server-private.key |  wg pubkey > wg-server-public.key
$ wg genkey | tee wg-mobile-private.key |  wg pubkey > wg-mobile-public.key

这给了我们三个密钥对(六个文件)。我们不会在配置文件中引用这些文件,而是在此处复制内容:每个键在base64中为一行。

为VPN服务器(Raspberry Pi)创建配置文件


配置非常简单,我创建了以下文件/etc/wireguard/wg0.conf

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <copy private key from wg-server-private.key>
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wwan0 -j MASQUERADE

[Peer]
# laptop
PublicKey = <copy public key from wg-laptop-public.key>
AllowedIPs = 10.200.200.2/32

[Peer]
# mobile phone
PublicKey = <copy public key from wg-mobile-public.key>
AllowedIPs = 10.200.200.3/32

几点评论:

  • 在适当的位置,您需要使用键从文件中插入行
  • 我的VPN使用内部范围 10.200.200.0/24
  • 对于命令PostUp/ PostDown我有一个外部网络接口wwan0,您可能还有另一个接口(例如eth0)

通过以下命令可以轻松解除VPN网络:

$ sudo wg-quick up wg0

一个小细节:作为用于dnsmasq绑定到网络接口的DNS服务器br0,我还将设备添加wg0到允许的设备列表中。在dnsmasq中,这是通过向配置文件添加带有网络接口的新行来完成的/etc/dnsmasq.conf,例如:

interface=br0
interface=wg0

另外,我添加了iptable规则,以允许到侦听UDP端口的流量(51280):

$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT

现在一切正常,我们可以将VPN隧道设置为自动启动:

$ sudo systemctl enable wg-quick@wg0.service

笔记本电脑上的客户端配置


在笔记本电脑上,/etc/wireguard/wg0.conf使用相同的设置创建一个配置文件

[Interface]
Address = 10.200.200.2/24
PrivateKey = <copy private key from wg-laptop-private.key>

[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

笔记:

  • 您需要指定公共IP或VPN服务器的主机,而不是edgewalker
  • 通过设置AllowedIPs10.200.200.0/24,我们仅使用VPN访问内部网络。到所有其他IP地址/服务器的流量将继续通过“正常”开放渠道。还将使用笔记本电脑上的预配置DNS服务器。

对于测试和自动启动,我们使用相同的命令wg-quicksystemd

$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0.service

在Android手机上设置客户端


对于Android手机,创建一个非常相似的配置文件(我们称之为mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = <copy private key from wg-mobile-private.key>
DNS = 10.200.200.1
        
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

与笔记本电脑上的配置不同,电话必须将我们的VPN服务器用作DNS服务器(字符串DNS),并且还必须通过VPN隧道(AllowedIPs = 0.0.0.0/0传递所有流量

您可以将文件转换为QR码,而不是将文件复制到移动设备:

$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf

QR码将作为ASCII输出到控制台。您可以从Android VPN应用程序对其进行扫描,然后自动配置VPN隧道。

结论


与OpenVPN相比,设置WireGuard太神奇了。

Source: https://habr.com/ru/post/undefined/


All Articles