因为 WireGuard
Оборудование
- 具有 LTE 模块和公共 IP 地址的 Raspberry Pi 3。 这里会有一个VPN服务器(下文中称为 边缘行者)
- 必须使用 VPN 进行所有通信的 Android 手机
- Linux 笔记本电脑只能在网络内使用 VPN
连接到 VPN 的每台设备都必须能够连接到所有其他设备。 例如,如果笔记本电脑和手机都属于 VPN 网络,那么手机应该能够连接到笔记本电脑上的 Web 服务器。 如果设置非常简单,那么您可以考虑将桌面连接到 VPN(通过以太网)。
考虑到有线和无线连接随着时间的推移变得越来越不安全(
软件安装
WireGuard 提供
我有最新的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 对等方进行身份验证。 您可以使用以下命令轻松创建 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 [email protected]
笔记本电脑上的客户端配置
在笔记本电脑上创建配置文件 /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 [email protected]
在 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
QR 码将以 ASCII 形式输出到控制台。 您可以从 Android VPN 应用程序扫描它并自动设置 VPN 隧道。
结论
与 OpenVPN 相比,设置 WireGuard 简直是神奇。
来源: habr.com