文章目录
- 1 WireGuard VPN 的特点
- 2 要求
- 3 第 1 步:在 Debian 服务器和桌面上安装 WireGuard
- 4 第 2 步:生成公钥/私钥对
- 5
- 6 步骤3:创建WireGuard配置文件
- 7 步骤 4:在服务器上启用 IP 转发
- 8 步骤 5:在服务器上配置 IP 伪装
- 9 步骤 6:在服务器上安装 DNS 解析器
- 10 步骤7:在防火墙中打开WireGuard端口
- 11 第8步:启动WireGuard
- 12 故障排除技巧
- 13 添加其他 VPN 客户端
- 14 在 iOS/Andorid 上配置 VPN 客户端
- 15 配置Windows客户端
- 16 策略路由、分割隧道和 VPN Kill Switch
- 17 在 Debian 10 上安装 Linux 内核 5.x
本教程将向您展示如何在 Debian 11 bullseye 和 Debian 10 Buster 上设置您自己的 WireGuard VPN 服务器。 WireGuard 专为 Linux 内核而设计。它在 Linux 内核内部运行,允许您创建快速、现代且安全的 VPN 隧道。
WireGuard VPN 的特点
- 轻量级和超快的速度,让 OpenVPN 脱颖而出。
- 跨平台。 WireGuard 可以在 Linux、BSD、macOS、Windows、Android、iOS 和 OpenWRT 上运行。
- 用户身份验证是通过交换公钥来完成的,类似于 SSH 密钥。
- 它将静态隧道 IP 地址分配给 VPN 客户端。有些人可能不喜欢它,但在某些情况下它可能很有用。
- 移动设备可以在 Wi-Fi 和移动网络之间无缝切换,而不会断开任何连接。
- 它的目标是在大多数用例中取代 OpenVPN 和 IPSec。
要求
要学习本教程,您需要一个可以自由访问被阻止网站(在您所在国家/地区或互联网过滤系统之外)的 VPS(虚拟专用服务器)。我推荐 Kamatera VPS,它具有以下特点:
- 30 天免费试用。
- 起价为 4 美元/月(1GB RAM)
- 基于KVM的高性能VPS
- 全球9个数据中心,包括美国、加拿大、英国、德国、荷兰、香港和以色列。
按照下面链接的教程在 Kamatera 创建 Linux VPS 服务器。
- 如何在 Kamatera 上创建 Linux VPS 服务器
一旦您拥有运行 Debian 的 VPS,请按照以下说明操作。
本教程假设 VPN 服务器和 VPN 客户端都运行 Debian 操作系统。
第 1 步:在 Debian 服务器和桌面上安装 WireGuard
登录您的 Debian 服务器。 WireGuard 包含在 Debian 11 (Bullseye) 存储库中,因此您可以运行以下命令来安装它。
sudo apt update
sudo apt install wireguard wireguard
Debian 10 用户需要使用以下命令添加向后移植存储库。
deb http://deb.debian.org/debian buster-backports main | sudo tee /etc/apt/sources.list.d/buster-backports.list
然后安装 WireGuard。
sudo apt update
sudo apt -t buster-backports install wireguard wireguard-tools wireguard-dkms linux-headers-$(uname -r)
使用相同的命令在本地 Debian 计算机(VPN 客户端)上安装 WireGuard。请注意,您还需要在客户端安装openresolv
软件包来配置DNS服务器。
sudo apt install openresolv
第 2 步:生成公钥/私钥对
服务器
在 Debian 服务器上运行以下命令创建公钥/私钥对,该公钥/私钥对将保存在 /etc/wireguard/
目录下。
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
客户
运行以下命令在本地 Debian 计算机(VPN 客户端)上创建公钥/私钥对。
wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key
步骤3:创建WireGuard配置文件
服务器
使用 Nano 等命令行文本编辑器在 Debian 服务器上创建 WireGuard 配置文件。 wg0
将是网络接口名称。
sudo nano /etc/wireguard/wg0.conf
复制以下文本并将其粘贴到您的配置文件中。您需要使用自己的服务器私钥和客户端公钥。
[Interface]
Address = 10.10.10.2/24
DNS = 10.10.10.1
PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=
[Peer]
PublicKey = kQvxOJI5Km4S1c7WXu2UZFpB8mHGuf3Gz8mmgTIF2U0=
AllowedIPs = 0.0.0.0/0
Endpoint = 12.34.56.78:51820
PersistentKeepalive = 25
在哪里 :
- 地址:指定VPN服务器的私有IP地址。这里我使用10.10.10.0/24网络范围,这样就不会和你的家庭网络范围冲突。 (大多数家庭路由器使用 192.168.0.0/24 或 192.168.1.0/24)。 10.10.10.1 是 VPN 服务器的私有 IP 地址。
- PrivateKey:VPN服务器的私钥,可以在服务器上的
/etc/wireguard/server_private.key
文件中找到。 - ListenPort:WireGuard VPN 服务器将侦听 UDP 端口 51820,这是默认值。
- PublicKey:VPN客户端的公钥,可以在客户端计算机上的
/etc/wireguard/client_public.key
文件中找到。 - AllowedIPs:允许 VPN 客户端使用的 IP 地址。在此示例中,客户端只能在 VPN 隧道内使用 10.10.10.2 IP 地址。
保存并关闭文件。 (要在 Nano 文本编辑器中保存文件,请按 Ctrl+O
,然后按 Enter 确认。按 Ctrl+X
退出。)
更改文件权限模式,只有root用户可以读取文件。
sudo chmod 600 /etc/wireguard/ -R
客户
使用 Nano 等命令行文本编辑器在本地 Debian 计算机上创建 WireGuard 配置文件。 wg-client0
将是网络接口名称。
sudo nano /etc/wireguard/wg-client0.conf
复制以下文本并将其粘贴到您的配置文件中。您需要使用自己的客户端私钥和服务器公钥。
[Interface] Address = 10.10.10.2/24 DNS = 10.10.10.1 PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI= [Peer] PublicKey = kQvxOJI5Km4S1c7WXu2UZFpB8mHGuf3Gz8mmgTIF2U0= AllowedIPs = 0.0.0.0/0 Endpoint = 12.34.56.78:51820 PersistentKeepalive = 25
在哪里 :
- 地址:指定VPN客户端的私有IP地址。
- DNS:指定 10.10.10.1(VPN 服务器)作为 DNS 服务器。它将通过 resolvconf 命令进行配置。您还可以指定多个 DNS 服务器以实现冗余,如下所示:
DNS=10.10.10.1 8.8.8.8
- PrivateKey:客户端的私钥,可以在客户端计算机上的
/etc/wireguard/client_private.key
文件中找到。 - PublicKey:服务器的公钥,可以在服务器上的
/etc/wireguard/server_public.key
文件中找到。 - AllowedIPs:0.0.0.0/0 代表整个互联网,这意味着所有到互联网的流量都应该通过 VPN 路由。
- 端点:VPN服务器的公网IP地址和端口号。将 12.34.56.78 替换为服务器的真实公共 IP 地址。
- 持久保持活动:每 25 秒向对等方发送一个经过身份验证的空数据包,以保持连接处于活动状态。如果未启用 PersistentKeepalive,VPN 服务器可能无法 ping VPN 客户端。
保存并关闭文件。
更改文件模式,以便只有 root 用户可以读取文件。
sudo chmod 600 /etc/wireguard/ -R
步骤 4:在服务器上启用 IP 转发
为了使 VPN 服务器能够在 VPN 客户端和 Internet 之间路由数据包,我们需要启用 IP 转发。编辑 sysctl.conf 文件。
sudo nano /etc/sysctl.conf
在此文件末尾添加以下行。
net.ipv4.ip_forward = 1
保存并关闭文件。然后使用以下命令应用更改。 -p 选项将从 /etc/sysctl.conf 文件加载 sysctl 设置。该命令将在系统重新启动后保留我们的更改。
sudo sysctl -p
步骤 5:在服务器上配置 IP 伪装
我们需要在服务器防火墙中设置IP伪装,使服务器成为VPN客户端的虚拟路由器。我将使用 UFW,它是 iptables 防火墙的前端。在 Debian 上安装 UFW:
sudo apt install ufw
首先,您需要允许 SSH 流量。
sudo ufw allow 22/tcp
接下来,找到服务器主网络接口的名称。
ip addr
如您所见,它在我的 Debian 服务器上名为 ens3
。
要配置 IP 伪装,我们必须在 UFW 配置文件中添加 iptables 命令。
sudo nano /etc/ufw/before.rules
默认情况下,filter
表有一些规则。在此文件末尾添加以下行。将 ens3 替换为您自己的网络接口名称。
# NAT table rules *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -o ens3 -j MASQUERADE # End each table with the 'COMMIT' line or these rules won't be processed COMMIT
在 Nano 文本编辑器中,您可以通过按 Ctrl+W
,然后按 Ctrl+V
转到文件末尾。
上述行将在 nat 表的 POSTROUTING 链的末尾附加 (-A) 规则。它将您的虚拟专用网络与互联网连接起来。并且还向外界隐藏您的网络。因此互联网只能看到您的 VPN 服务器的 IP,而看不到您的 VPN 客户端的 IP,就像您的家庭路由器隐藏您的私人家庭网络一样。
缺省情况下,UFW 禁止报文转发。我们可以允许转发我们的专用网络。在此文件中找到 ufw-before-forward 链,添加以下 3 行,如果源 IP 或目标 IP 在 10.10.10.0/24范围。
# allow forwarding for trusted network -A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT -A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT
<a href="https://cn.linux-terminal.com/common-images/wireguard-vpn-server-debian/ufw-allow-packet-fowarding.png"><img src="https://cn.linux-terminal.com/common-images/wireguard-vpn-server-debian/ufw-allow-packet-fowarding.png" /></a>
保存并关闭文件。然后启用UFW。
sudo ufw enable
如果您之前启用过 UFW,则可以使用 systemctl 重新启动 UFW。
sudo systemctl restart ufw
现在,如果您使用以下命令列出 NAT 表的 POSTROUTING 链中的规则:
sudo iptables -t nat -L POSTROUTING
你可以看到假面舞会规则。
<a href="https://cn.linux-terminal.com/common-images/wireguard-vpn-server-debian/wireguard-IP-Masquerading-ufw-debian.png"><img src="https://cn.linux-terminal.com/common-images/wireguard-vpn-server-debian/wireguard-IP-Masquerading-ufw-debian.png" /></a>
步骤 6:在服务器上安装 DNS 解析器
由于我们指定 VPN 服务器作为客户端的 DNS 服务器,因此我们需要在 VPN 服务器上运行 DNS 解析器。我们可以安装bind9 DNS服务器。
sudo apt install bind9
安装完成后,BIND 将自动启动。您可以通过以下方式检查其状态:
systemctl status bind9
示例输出:
● named.service - BIND Domain Name Server
Loaded: loaded (/lib/systemd/system/named.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-05-17 08:11:26 UTC; 37s ago
Docs: man:named(8)
Main PID: 13820 (named)
Tasks: 5 (limit: 1074)
Memory: 14.3M
CGroup: /system.slice/named.service
└─13820 /usr/sbin/named -f -u bind
如果它没有运行,请使用以下命令启动它:
sudo systemctl bind9
编辑 BIND DNS 服务器的配置文件。
sudo nano /etc/bind/named.conf.options
添加以下行以允许 VPN 客户端发送递归 DNS 查询。
allow-recursion { 127.0.0.1; 10.10.10.0/24; };
<a href="https://cn.linux-terminal.com/common-images/wireguard-vpn-server-debian/wireguard-BIND-DNS-resolver.png"><img src="https://cn.linux-terminal.com/common-images/wireguard-vpn-server-debian/wireguard-BIND-DNS-resolver.png" /></a>
保存并关闭文件。然后编辑 /etc/default/named 文件。
sudo nano /etc/default/named
将 -4 添加到 OPTIONS 以确保 BIND 可以查询根 DNS 服务器。
OPTIONS="-u bind -4"
保存并关闭文件。
默认情况下,BIND 启用 DNSSEC,这可确保 DNS 响应正确且不被篡改。但是,由于<em>信任锚翻转</em>和其他原因,它可能无法开箱即用。为了使其正常工作,我们可以使用以下命令重建托管密钥数据库。
sudo rndc managed-keys destroy
sudo rdnc reconfig
重新启动 BIND9 以使更改生效。
sudo systemctl restart bind9
然后您需要运行以下命令以允许 VPN 客户端连接到端口 53。
sudo ufw insert 1 allow in from 10.10.10.0/24
步骤7:在防火墙中打开WireGuard端口
运行以下命令,打开服务器上的UDP端口51820。
sudo ufw allow 51820/udp
第8步:启动WireGuard
服务器
在服务器上运行以下命令启动 WireGuard。
sudo wg-quick up /etc/wireguard/wg0.conf
要停止它,请运行
sudo wg-quick down /etc/wireguard/wg0.conf
您还可以使用 systemd 服务来启动 WireGuard。
sudo wg-quick up /etc/wireguard/wg0.conf
启用系统启动时自动启动。
sudo systemctl enable
使用以下命令检查其状态。其状态应为活动(已退出)。
systemctl status
现在 WireGuard 服务器已准备好接受客户端连接。
客户
启动 WireGuard。
sudo systemctl start
启用系统启动时自动启动。
sudo systemctl enable
检查其状态:
systemctl status
现在访问此网站:http://icanhazip.com/ 检查您的公共 IP 地址。如果一切顺利,它应该显示您的 VPN 服务器的公共 IP 地址,而不是您的客户端计算机的公共 IP 地址。
您还可以运行以下命令来获取当前的公网IP地址。
curl https://icanhazip.com
故障排除技巧
检查 UDP 端口 51820 是否打开
在服务器上安装tshark网络流量分析器。 Tshark 是 Wireshark 的命令行版本。
sudo apt install tshark
如果系统询问您“<strong>非超级用户是否能够捕获数据包?</strong>”,请回答<strong>是</strong>。安装完成后,运行以下命令将您的用户帐户添加到 wireshark 组中,以便您可以捕获数据包。
sudo adduser your-username wireshark
然后,启动 tshark 在 UDP 端口 51820 上捕获数据包。将 ens3 替换为您的主网络接口。
tshark -i ens3 -f "udp port 51820"
如果 WireGuard 客户端能够连接到服务器的 UDP 端口 51820,那么您将看到 tshark 捕获的数据包,如下所示。可以看到,客户端开始发起握手,服务器发回握手响应。一旦建立连接,客户端就会发送保活数据包。
Capturing on 'ens3'
** (tshark:902085) 02:47:41.865227 [Main MESSAGE] -- Capture started.
** (tshark:902085) 02:47:41.866056 [Main MESSAGE] -- File: "/tmp/wireshark_eth0JVEWT1.pcapng"
1 105.092578905 11.22.33.44 → 12.34.56.78 WireGuard 190 Handshake Initiation, sender=0x3F1A04AB
2 110.464628716 12.34.56.78 → 11.22.33.44 WireGuard 134 Handshake Response, sender=0x34ED7471, receiver=0xD4B23800
3 110.509517074 11.22.33.44 → 12.34.56.78 WireGuard 74 Keepalive, receiver=0x34ED7471, counter=0
如果 WireGuard 客户端无法连接到服务器的 UDP 端口 51820,那么您将只能看到握手启动数据包。没有握手响应。
Capturing on 'ens3' ** (tshark:902085) 02:47:41.865227 [Main MESSAGE] -- Capture started. ** (tshark:902085) 02:47:41.866056 [Main MESSAGE] -- File: "/tmp/wireshark_eth0JVEWT1.pcapng" 1 105.092578905 11.22.33.44 → 12.34.56.78 WireGuard 190 Handshake Initiation, sender=0x3F1A04AB 2 149.670118573 11.22.33.44 → 12.34.56.78 WireGuard 190 Handshake Initiation, sender=0x7D584974 3 152.575188680 11.22.33.44 → 12.34.56.78 WireGuard 190 Handshake Initiation, sender=0x8D2407B9 4 153.706876729 12.34.56.78 → 11.22.33.44 WireGuard 190 Handshake Initiation, sender=0x47690027 5 154.789959772 11.22.33.44 → 12.34.56.78 WireGuard 190 Handshake Initiation, sender=0x993232FC 6 157.956576772 11.22.33.44 → 12.34.56.78 WireGuard 190 Handshake Initiation, sender=0x06AD433B 7 159.082825929 12.34.56.78 → 11.22.33.44 WireGuard 190 Handshake Initiation, sender=0x8C089E1
Ping 测试
您可以从 VPN 服务器向 VPN 客户端执行 ping 操作 (ping 10.10.10.2) 以查看隧道是否正常工作。如果您在 ping 中看到以下错误消息,
ping: sendmsg: Required key not available
可能是 AllowedIPs 参数错误,例如拼写错误。
如果 ping 错误消息是
ping: sendmsg: Destination address required
可能是您的配置文件中的私钥/公钥错误。
无法浏览互联网
如果 VPN 隧道已成功建立,但客户端公共 IP 地址没有更改,那是因为 UFW 配置文件中的伪装或转发规则不起作用。我曾经在/etc/ufw/before.rules文件中出现了拼写错误,导致我的电脑无法浏览互联网。
请注意,我不建议在 WireGuard 配置文件的 [Interface] 部分中使用 SaveConfig=true。 SaveConfig 告诉 WireGuard 在关闭时保存运行时配置。因此,如果您在配置文件中添加额外的[Peer],然后重新启动 WireGuard,您新添加的配置将被覆盖。
在 Linux 内核中启用调试日志记录
如果您使用 Linux 内核 5.6+,则可以使用以下命令启用 WireGuard 的调试日志记录。
sudo su - echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control
然后您可以使用以下命令查看调试日志
sudo dmesg -wH
或者
sudo journalctl -kf
重新启动
如果您的 VPN 仍然无法工作,请尝试重新启动 VPN 服务器。
sudo systemctl restart
然后停止 VPN 客户端。
sudo systemctl stop
并在VPN客户端上升级软件包。
sudo apt update
sudo apt upgrade
接下来,重新启动 VPN 客户端。
sudo shutdown -r now
sudo systemctl start
添加其他 VPN 客户端
WireGuard 旨在将一个 IP 地址与一个 VPN 客户端相关联。要添加更多 VPN 客户端,您需要为每个客户端创建唯一的私钥/公钥对,然后将每个 VPN 客户端的公钥添加到服务器的配置文件 (/etc/wireguard/wg0.conf)像这样:
[Interface] Address = 10.10.10.1/24 PrivateKey = UIFH+XXjJ0g0uAZJ6vPqsbb/o68SYVQdmYJpy/FlGFA= ListenPort = 51820 [Peer] PublicKey = 75VNV7HqFh+3QIT5OHZkcjWfbjx8tc6Ck62gZJT/KRA= AllowedIPs = 10.10.10.2/32 [Peer] PublicKey = YYh4/1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8= AllowedIPs = 10.10.10.3/32 [Peer] PublicKey = EVstHZc6QamzPgefDGPLFEjGyedJk6SZbCJttpzcvC8= AllowedIPs = 10.10.10.4/32
每个 VPN 客户端都有一个静态专用 IP 地址(10.10.10.2、10.10.10.3、10.10.10.4 等)。重新启动 WireGuard 服务器以使更改生效。
sudo systemctl restart [email
然后照常在每个 VPN 客户端上添加 WireGuard 配置。
在 iOS/Andorid 上配置 VPN 客户端
由于我有 iPhone,我将向您展示如何在 iOS 上配置 WireGuard 客户端。从应用商店安装 <strong>WireGuard</strong> 应用。然后打开此应用程序并单击<strong>添加隧道</strong>按钮。
您有 3 种方法来创建新的 WireGuard 隧道。
从文件或存档创建
从二维码创建
从头开始创建
选择二维码方法,因为它更容易。在服务器上运行以下命令,为 iOS 客户端生成 WireGuard 公钥/私钥。
wg genkey | sudo tee /etc/wireguard/ios_private.key | wg pubkey | sudo tee /etc/wireguard/ios_public.key
接下来,为 iOS 客户端创建 WireGuard 配置文件。
sudo nano /etc/wireguard/ios.conf
添加以下行。
[Interface] Address = 10.10.10.3/24 DNS = 10.10.10.1 PrivateKey = mNiZvB+sASN/+ZiJkMyan1ZZOzCXkrjYPlbg7rZJ7Fc= [Peer] PublicKey = OMaXX7XD+wEYWfYyFcZZBN4vFSC16A1e8t80ONiJKWY= AllowedIPs = 0.0.0.0/0 Endpoint = 12.34.56.78:51820 PersistentKeepalive = 25
在哪里 :
<strong>地址</strong>:指定iOS客户端的私有IP地址。
<strong>DNS</strong>:指定 10.10.10.1(VPN 服务器)作为 DNS 服务器。您还可以指定多个 DNS 服务器以实现冗余,如下所示:DNS=10.10.10.1,8.8.8.8。请注意,iOS 应用不支持 DNS=10.10.10.1 8.8.8.8 语法。
<strong>PrivateKey</strong>:iOS客户端的私钥,可以在/etc/wireguard/ios_private.key文件中找到。
<strong>PublicKey</strong>:服务器的公钥,可以在服务器上的 /etc/wireguard/server_public.key 文件中找到。
<strong>AllowedIPs</strong>:0.0.0.0/0 代表整个互联网,这意味着所有到互联网的流量都应该通过 VPN 路由。
<strong>端点</strong>:VPN服务器的公网IP地址和端口号。将 12.34.56.78 替换为服务器的真实公共 IP 地址。
<strong>持久保持活动</strong>:每 25 秒向对等方发送一个经过身份验证的空数据包,以保持连接处于活动状态。如果未启用 PersistentKeepalive,VPN 服务器可能无法 ping VPN 客户端。
保存并关闭文件。然后在 WireGuard VPN 服务器上运行以下命令,从 iOS 配置文件生成二维码。
sudo apt install qrencode
sudo cat /etc/wireguard/ios.conf | qrencode -t ansiutf8
接下来,从iOS WireGuard应用程序扫描二维码,因此/etc/wireguard/ios.conf文件中的内容将被导入到WireGuard iOS客户端。
在 iOS 客户端上添加隧道后,我们还需要在 WireGaurd 服务器配置文件中添加 [peer]。
sudo nano /etc/wireguard/wg0.conf
像这样:
[Interface] Address = 10.10.10.1/24 PrivateKey = UIFH+XXjJ0g0uAZJ6vPqsbb/o68SYVQdmYJpy/FlGFA= ListenPort = 51820 [Peer] PublicKey = 75VNV7HqFh+3QIT5OHZkcjWfbjx8tc6Ck62gZJT/KRA= AllowedIPs = 10.10.10.2/32 [Peer] # iOS client PublicKey = YYh4/1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8= AllowedIPs = 10.10.10.3/32
保存并关闭文件。然后重新启动 WireGuard VPN 服务器。
sudo systemctl restart [email
现在您可以从 iOS 应用程序建立 WireGuard VPN 连接。
配置Windows客户端
下载适用于 Windows 的 WireGuard 安装程序。
安装完成后,启动 WireGuard 程序。您需要右键单击左侧边栏来<strong>创建一个新的空隧道</strong>。它将自动为 Windows 客户端创建公钥/私钥。
<a href="https://cn.linux-terminal.com/common-images/wireguard-vpn-server-debian/windows-add-new-wireguard-tunnel.png"><img src="https://cn.linux-terminal.com/common-images/wireguard-vpn-server-debian/windows-add-new-wireguard-tunnel.png" /></a>
现在您需要添加其他信息。
<span class="hljs-section">[Interface]</span>
<span class="hljs-attr">PrivateKey</span> = mNiZvB+sASN/+ZiJkMyan1ZZOzCXkrjYPlbg7rZJ7Fc=
<span class="hljs-attr">Address</span> = <span class="hljs-number">10.10</span>.<span class="hljs-number">10.4</span>/<span class="hljs-number">24</span>
<span class="hljs-attr">DNS</span> = <span class="hljs-number">10.10</span>.<span class="hljs-number">10.1</span>
<span class="hljs-section">[Peer]</span>
<span class="hljs-comment"># VPN server</span>
<span class="hljs-attr">PublicKey</span> = OMaXX7XD+wEYWfYyFcZZBN4vFSC16A1e8t80ONiJKWY=
<span class="hljs-attr">AllowedIPs</span> = <span class="hljs-number">0.0</span>.<span class="hljs-number">0.0</span>/<span class="hljs-number">0</span>
<span class="hljs-attr">Endpoint</span> = <span class="hljs-number">12.34</span>.<span class="hljs-number">56.78</span>:<span class="hljs-number">51820</span>
<span class="hljs-attr">PersistentKeepalive</span> = <span class="hljs-number">25</span>
在哪里 :
<strong>地址</strong>:指定Windows客户端的私有IP地址。
<strong>DNS</strong>:指定 10.10.10.1(VPN 服务器)作为 DNS 服务器。您还可以指定多个 DNS 服务器以实现冗余,如下所示:DNS=10.10.10.1,8.8.8.8。请注意,Windows 应用不支持 DNS=10.10.10.1 8.8.8.8 语法。
<strong>PrivateKey</strong>:Windows 客户端的私钥,自动创建。
<strong>PublicKey</strong>:服务器的公钥,可以在服务器上的 /etc/wireguard/server_public.key 文件中找到。
<strong>AllowedIPs</strong>:0.0.0.0/0 代表整个互联网,这意味着所有到互联网的流量都应该通过 VPN 路由。
<strong>端点</strong>:VPN服务器的公网IP地址和端口号。将 12.34.56.78 替换为服务器的真实公共 IP 地址。
<strong>持久保持活动</strong>:每 25 秒向对等方发送一个经过身份验证的空数据包,以保持连接处于活动状态。如果未启用 PersistentKeepalive,VPN 服务器可能无法 ping VPN 客户端。
<strong>提示</strong>:在 Windows 上,您可以使用 <a href="https://cn.a-d.site/?cat=powershell" target="_blank" rel="noopener">PowerShell</a> 程序通过 SSH 访问 Linux 服务器。
<a href="https://cn.linux-terminal.com/common-images/wireguard-vpn-server-debian/wireguard-windows-configuration.png"><img src="https://cn.linux-terminal.com/common-images/wireguard-vpn-server-debian/wireguard-windows-configuration.png" /></a>
保存配置。
在 Windows 客户端上添加隧道后,我们还需要在 WireGaurd 服务器配置文件中添加 [peer]。
sudo nano /etc/wireguard/wg0.conf
像这样:
[Interface]
Address = 10.10.10.1/24
PrivateKey = UIFH+XXjJ0g0uAZJ6vPqsbb/o68SYVQdmYJpy/FlGFA=
ListenPort = 51820
[Peer]
PublicKey = 75VNV7HqFh+3QIT5OHZkcjWfbjx8tc6Ck62gZJT/KRA=
AllowedIPs = 10.10.10.2/32
[Peer]
# iOS client
PublicKey = YYh4/1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8=
AllowedIPs = 10.10.10.3/32
[Peer]
# Windows client PublicKey = wJpwC/gCWXZTGa5lQReKowRvymaaEUav0N1qeK74HlQ=
AllowedIPs = 10.10.10.4/32
保存并关闭文件。然后重新启动 WireGuard VPN 服务器。
sudo systemctl restart [email
现在您可以在 Windows 上建立 WireGuard VPN 连接。
策略路由、分割隧道和 VPN Kill Switch
现在,我将向您展示如何将<strong>策略路由</strong>、<strong>分割隧道</strong>和<strong>VPN Kill Switch</strong>与 WireGuard VPN 结合使用。 <strong>注意</strong>,不建议将它们一起使用。如果您使用策略路由,则不应启用分割隧道或 VPN 终止开关,反之亦然。
策略路由
默认情况下,VPN 客户端上的所有流量都将通过 VPN 服务器路由。有时,您可能只想根据传输层协议和目标端口路由特定类型的流量。这称为策略路由。
策略路由是在客户端计算机上配置的,我们需要停止 WireGuard 客户端进程。
sudo systemctl stop [email
然后编辑客户端配置文件。
sudo nano /etc/wireguard/wg-client0.conf
例如,如果您在[interface]部分添加以下3行,则WireGuard将创建一个名为“1234”的路由表,并将ip规则添加到路由表中。在此示例中,仅当使用 TCP 作为传输层协议且目标端口为 25(即客户端计算机发送电子邮件时)时,流量才会通过 VPN 服务器路由。
Table = 1234 PostUp = ip rule add ipproto tcp dport 25 table 1234 PreDown = ip rule delete ipproto tcp dport 25 table 1234
<a href="https://cn.linux-terminal.com/common-images/wireguard-vpn-server-debian/wireguard-vpn-policy-routing-debian.png"><img src="https://cn.linux-terminal.com/common-images/wireguard-vpn-server-debian/wireguard-vpn-policy-routing-debian.png" /></a>
保存并关闭文件。然后再次启动 WireGuard 客户端。
sudo systemctl start
分割隧道
默认情况下,VPN 客户端上的所有流量都将通过 VPN 服务器路由。以下是启用分割隧道的方法,这样只有到 10.10.10.0/24 IP 范围的流量才会通过 WireGuard VPN 进行隧道传输。当您想要为多个云服务器构建专用网络时,这非常有用,因为 VPN 客户端将在云服务器上运行,如果您使用完整的 VPN 隧道,那么您可能会失去与云服务器的连接。
编辑客户端配置文件。
sudo nano /etc/wireguard/wg-client0.conf
改变
AllowedIPs = 0.0.0.0/0
到
sudo systemctl restart
因此,仅当目标地址位于 10.10.10.0/24 IP 范围内时,流量才会通过 VPN 路由。保存并关闭文件。然后重新启动 WireGuard 客户端。
sudo systemctl restart [email
VPN 终止开关
默认情况下,当 VPN 连接中断时,您的计算机可以通过正常网关访问 Internet。您可能需要启用终止开关功能,该功能可防止未加密的数据包通过非 WireGuard 接口流动。
停止 WireGuard 客户端进程。
sudo systemctl stop [email
编辑客户端配置文件。
sudo nano /etc/wireguard/wg-client0.conf
在 [interface] 部分添加以下两行。
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
像这样:
[Interface]
Address = 10.10.10.2/24
DNS = 10.10.10.1
PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
[Peer]
PublicKey = kQvxOJI5Km4S1c7WXu2UZFpB8mHGuf3Gz8mmgTIF2U0=
AllowedIPs = 0.0.0.0/0
Endpoint = 12.34.56.78:51820
PersistentKeepalive = 25
保存并关闭文件。然后启动 WireGuard 客户端。
sudo systemctl start
在 Debian 10 上安装 Linux 内核 5.x
Debian 10 上当前的 Linux 内核版本是 4.19。在步骤 1 中,我们在 Debian 10 上添加了向后移植存储库。在撰写本文时,<strong>向后移植存储库</strong>包括 Linux 内核 5.10。您可能知道,从 5.4 版本开始,wireguard 模块就包含在 Linux 内核中。如果我们在Debian 10上安装Linux内核5.10,则系统升级Linux内核时不需要构建wireguard模块。事实上,我的Debian 10服务器曾经在使用wireguard-dkms构建wireguard模块时遇到问题。
请注意,当您阅读本文时,Debian 10 向后移植存储库可能已删除内核 5.10 并包含内核 5.11。只需在以下命令中将 5.8 替换为 5.9 即可。
要在Debian 10云服务器上安装Linux内核5.8,请运行以下命令。
sudo apt install linux-image-5.10.0-0.bpo.7-cloud-amd64 linux-headers-5.10.0-0.bpo.7-cloud-amd64
要在 Debian 10 PC 上安装 Linux 内核 5.8,请运行以下命令。
sudo apt install linux-image-5.10.0-0.bpo.7-amd64 linux-headers-5.10.0-0.bpo.7-amd64
然后重新启动您的 Debian 10 机器。
sudo shutdown -r now
检查您的 Linux 内核版本。
uname -r
样本输出
5.10.0-0.bpo.7-cloud-amd64
虽然我们不再需要 wireguard-dkms 软件包,但它是 wireguard 软件包的依赖项,因此我们无法将其从系统中删除。升级 wireguard 软件包时,您可能会看到以下错误。
Error! The dkms.conf for this module includes a BUILD_EXCLUSIVE directive which does not match this kernel/arch. This indicates that it should not be built
这表明 wireguard-dkms 正在尝试将 wireguard 模块构建到 Linux 内核中,但 Linux 5.10 包含原生 wireguard 模块,因此构建操作被阻止,您可以忽略此错误。
引用自:https://cn.linux-terminal.com/?p=3296