自 WireGuard 未来核心 Linux 5.6,我决定研究如何最好地将此 VPN 与我的系统集成。 .
Оборудование
- 具有 LTE 模块和公共 IP 地址的 Raspberry Pi 3。 这里会有一个VPN服务器(下文中称为 边缘行者)
- 电话 Android必须使用 VPN 进行所有通信
- 笔记本 Linux应该只在网络内部使用 VPN
连接到 VPN 的每台设备都必须能够连接到所有其他设备。 例如,如果笔记本电脑和手机都属于 VPN 网络,那么手机应该能够连接到笔记本电脑上的 Web 服务器。 如果设置非常简单,那么您可以考虑将桌面连接到 VPN(通过以太网)。
考虑到有线和无线连接随着时间的推移变得越来越不安全(, и 我正在认真考虑使用 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 应用商店目录。
钥匙的安装
对节点进行身份验证 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
- 通过设置
AllowedIPs上10.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
