使用以下方式设置简单的 VPN WireGuard 以及用作服务器的树莓派

自 WireGuard 将成为一部分 未来核心 Linux 5.6,我决定研究如何最好地将此 VPN 与我的系统集成。 Raspberry Pi 上的 LTE 路由器/接入点.

Оборудование

  • 具有 LTE 模块和公共 IP 地址的 Raspberry Pi 3。 这里会有一个VPN服务器(下文中称为 边缘行者)
  • 电话 Android必须使用 VPN 进行所有通信
  • 笔记本 Linux应该只在网络内部使用 VPN

连接到 VPN 的每台设备都必须能够连接到所有其他设备。 例如,如果笔记本电脑和手机都属于 VPN 网络,那么手机应该能够连接到笔记本电脑上的 Web 服务器。 如果设置非常简单,那么您可以考虑将桌面连接到 VPN(通过以太网)。

考虑到有线和无线连接随着时间的推移变得越来越不安全(有针对性的攻击, KRACK WPA2破解攻击 и 针对 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 我安装了该应用程序。 WireGuard VPN 来自官方 Google 应用商店目录。

钥匙的安装

对节点进行身份验证 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

一个小细节:作为我使用的 DNS 服务器 dnsmasq 绑定到网络接口 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-quick и systemd:

$ 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).

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

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

二维码将以ASCII格式输出到控制台。可以通过应用程序扫描该二维码。 Android VPN并自动配置VPN隧道。

结论

调整 WireGuard 简直太神奇了 OpenVPN.

来源: habr.com

为具有 DDoS 保护、VPS VDS 服务器的站点购买可靠的主机 🔥 购买具备 DDoS 防护的可靠网站托管服务,包括 VPS 和 VDS 服务器 | ProHoster