本教程将向您展示如何在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美元基于KVM的高性能VPS世界各地的9个数据中心,包括美国、加拿大、英国、德国、荷兰、香港和ISRALL。
按照下面链接的教程在Kamatera创建Linux VPS服务器。
如何在Kamatera上创建Linux VPS服务器
一旦VPS运行Debian,请按照以下说明操作。
本教程假设VPN服务器和VPN客户端都运行Debian操作系统。
步骤1:在Debian服务器和桌面上安装WireGuard
登录Debian服务器。WireGuard包含在Debian 11存储库中,因此您可以运行以下命令来安装它。
sudo-apt-update sudo-apt-install-wireguard-wireguard-tools-linux-headers-$
Debian 10用户需要使用以下命令添加backport存储库。
回声“黛布”http://deb.debian.org/debianbuster backports main“| sudo tee/etc/apt/sources.list.d/buster-backports.list
然后安装钢丝护板。
sudo apt更新sudo apt-t buster backport安装wireguard wireguard工具wireguard dkms linux头文件-$
使用相同的命令在本地Debian计算机上安装WireGuard。请注意,您还需要在客户端上安装openresolv包来配置DNS服务器。
sudo apt安装openresolv
第2步:生成公钥/私钥对
服务器
在Debian服务器上运行以下命令以创建公钥/私钥对,该密钥对将保存在/etc/wireguard/目录下。
wg genkey | sudo tee/etc/wireguard/server|u private。key | wg pubkey | sudo tee/etc/wireguard/server_public。钥匙
客户
运行以下命令在本地Debian计算机上创建公钥/私钥对。
wg genkey | sudo tee/etc/wireguard/client|u private。key | wg pubkey | sudo tee/etc/wireguard/client_public。钥匙
步骤3:创建WireGuard配置文件
服务器
使用Nano等命令行文本编辑器在Debian服务器上创建WireGuard配置文件。wg0将是网络接口名称。
sudo nano/etc/wireguard/wg0。形态
复制以下文本并将其粘贴到配置文件中。您需要使用自己的服务器私钥和客户端公钥。
[Interface]Address=10.10.10.1/24 ListenPort=51820 PrivateKey=cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc=[Peer]PublicKey=AYQJf6HbkQ0X0Xyt+CTMFUJE3RFWBUC46LKGTWZZ4=AllowedIPs=10.10.2/32
哪里:
地址:指定VPN服务器的专用IP地址。这里我使用的是10.10.10.0/24网络范围,所以它不会与您的家庭网络范围冲突。。10.10.10.1是VPN服务器的专用IP地址。PrivateKey:VPN服务器的私钥,可在/etc/wireguard/server_private中找到。服务器上的密钥文件。ListenPort:WireGuard VPN服务器将在默认的UDP端口51820上侦听。公钥:VPN客户端的公钥,可以在/etc/wireguard/client_public中找到。客户端计算机上的密钥文件。AllowedIP:VPN客户端允许使用的IP地址。在本例中,客户端只能在VPN隧道内使用10.10.10.2 IP地址。
保存并关闭文件。
更改文件权限模式,以便只有root用户可以读取文件。
sudo chmod 600/etc/wireguard/-R
客户
使用命令行文本编辑器在本地Debian计算机上创建WireGuard配置文件。wg-client0将是网络接口名称。
sudo nano/etc/wireguard/wg-client0。形态
复制以下文本并将其粘贴到配置文件中。您需要使用自己的客户端私钥和服务器公钥。
[Interface]Address=10.10.10.2/24 DNS=10.10.10.1 PrivateKey=cOFA+x5UvHF+a3xJ6enLatG+Doe3I5PhmgKKKKUYxi=[Peer]PublicKey=KQVxOji5KM4S1C7WXU2UZFPB8MhGZ8MgTIF2U0=AllowDips=0.0.0.0.0/0端点=12.34.56.78:51820持久保持有效=25
哪里:
地址:指定VPN客户端的专用IP地址。DNS:指定10.10.10.1作为DNS服务器。它将通过resolvconf命令进行配置。您还可以为冗余指定多个DNS服务器,如下所示:DNS=10.10.10.1 8.8.8.8PrivateKey:客户端的私钥,可以在/etc/wireguard/client_private中找到。客户端计算机上的密钥文件。公钥:服务器的公钥,可以在/etc/wireguard/server_public中找到。服务器上的密钥文件。AllowedIPs:0.0.0.0/0代表整个互联网,这意味着所有到互联网的流量都应该通过VPN路由。端点:VPN服务器的公共IP地址和端口号。将12.34.56.78替换为服务器的真实公共IP地址。PersistentKeepalive:每25秒向对等方发送一个经过身份验证的空数据包,以保持连接有效。如果未启用PersistentKeepalive,VPN服务器可能无法ping VPN客户端。
保存并关闭文件。
更改文件模式,以便只有root用户可以读取文件。
sudo chmod 600/etc/wireguard/-R
步骤4:在服务器上启用IP转发
为了让VPN服务器在VPN客户端和Internet之间路由数据包,我们需要启用IP转发。编辑sysctl。conf文件。
sudo nano/etc/sysctl。形态
在该文件末尾添加以下行。
网ipv4。ip_forward=1
保存并关闭文件。然后使用下面的命令应用更改。p选项将从/etc/sysctl加载sysctl设置。conf文件。此命令将在系统重新启动时保留所做的更改。
sudo sysctl-p
步骤5:在服务器上配置IP伪装
我们需要在服务器防火墙中设置IP伪装,以便服务器成为VPN客户端的虚拟路由器。我将使用UFW,它是iptables防火墙的前端。在Debian上安装UFW时使用:
sudo apt安装ufw
首先,需要允许SSH通信。
sudo ufw允许22/tcp
接下来,找到服务器主网络接口的名称。
ip地址
正如你所看到的,在我的Debian服务器上它的名字是ens3。
要配置IP伪装,我们必须在UFW配置文件中添加iptables命令。
sudo nano/etc/ufw/before。规则
默认情况下,过滤器表有一些规则。在该文件末尾添加以下行。将ens3替换为您自己的网络接口名称。
#NAT表格规则*NAT:POSTROUTING ACCEPT[0:0]-一个POSTROUTING-o ens3-j伪装#用“提交”行结束每个表格,否则这些规则将不会被提交处理
在Nano文本编辑器中,按Ctrl+W,然后按Ctrl+V,可以转到文件的末尾。
以上几行将在nat表的后路由链的末尾附加条规则。它将把你的虚拟专用网络与互联网连接起来。同时也会对外界隐藏你的人际网络。所以互联网只能看到VPN服务器的IP,却看不到VPN客户端的IP,就像你的家庭路由器隐藏了你的私人家庭网络一样。
默认情况下,UFW禁止数据包转发。我们可以允许为我们的专用网络转发。在该文件中找到ufw BEFORT forward链,并添加以下3行,如果源IP或目标IP在10.10.10.0/24范围内,这3行将接受数据包转发。
#允许受信任网络的转发-转发前的ufw-s 10.10.10.0/24-j接受-转发前的ufw-d 10.10.10.0/24-j接受
保存并关闭文件。然后启用UFW。
sudo ufw启用
如果以前启用过UFW,那么可以使用systemctl重新启动UFW。
sudo systemctl重启ufw
现在,如果使用以下命令列出NAT表的后路由链中的规则:
sudo iptables-t nat-L后路由
你可以看到化装规则。
步骤6:在服务器上安装DNS解析程序
由于我们将VPN服务器指定为客户端的DNS服务器,因此需要在VPN服务器上运行DNS解析器。我们可以安装bind9 DNS服务器。
sudo apt安装bind9
一旦安装,BIND将自动启动。您可以通过以下方式检查其状态:
systemctl状态绑定9
样本输出:
● 命名的。服务-绑定域名服务器已加载:已加载活动:自Sun 2020-05-17 08:11:26 UTC起活动;37秒前的文档:man:named主PID:13820任务:5内存:14.3M CGroup:/system。切片/命名。服务└─13820/usr/sbin/named-f-u-bind
如果没有运行,请从以下内容开始:
sudo systemctl start bind9
编辑绑定DNS服务器的配置文件。
sudo nano/etc/bind/named。形态选项
添加以下行以允许VPN客户端发送递归DNS查询。
允许递归{127.0.0.1;10.10.10.0/24;};保存并关闭文件。重新启动BIND9以使更改生效。
sudo systemctl重启bind9
然后,您需要运行以下命令以允许VPN客户端连接到端口53。
sudo ufw插件1允许从10.10.10.0/24进入

第7步:打开防火墙中的WireGuard端口
运行以下命令打开服务器上的UDP端口51820。
sudo ufw允许51820/udp
第8步:启动WireGuard
服务器
在服务器上运行以下命令以启动WireGuard。
sudo wg quick up/etc/wireguard/wg0。形态
要阻止它,快跑
sudo wg quick down/etc/wireguard/wg0。形态
您还可以使用systemd服务启动WireGuard。
sudo systemctl start[电子邮件和#160;受保护]
在系统启动时启用自动启动。
sudo systemctl启用[电子邮件和#160;受保护]
使用以下命令检查其状态。其状态应为活动。
systemctl状态[电子邮件和#160;受保护]
现在WireGuard服务器已准备好接受客户端连接。
客户
启动铁丝网。
sudo systemctl start[电子邮件和#160;受保护]
在系统启动时启用自动启动。
sudo systemctl启用[电子邮件和#160;受保护]
检查其状态:
systemctl状态[电子邮件和#160;受保护]
现在进入这个网站:file/tupian/20220729/pppresudo su-回声模块wireguard+p>/sys/kernel/debug/dynamic_debug/control
然后可以使用查看调试日志
sudo-dmesg-wH
或
sudo journalctl-kf
重新启动
如果VPN仍然无法工作,请尝试重新启动VPN服务器。
sudo systemctl重启[电子邮件和#160;受保护]
然后停止VPN客户端。
sudo systemctl stop[电子邮件和#160;受保护]
并升级VPN客户端上的软件包。
sudo-apt更新;sudo-apt升级
接下来,重新启动VPN客户端。
sudo shutdown-r now sudo systemctl start[电子邮件和#160;受保护]
添加其他VPN客户端
WireGuard设计用于将一个IP地址与一个VPN客户端相关联。要添加更多VPN客户端,需要为每个客户端创建唯一的私钥/公钥对,然后在服务器的配置文件中添加每个VPN客户端的公钥,如下所示:
参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考[pepepepe[pepepepepepepepepe公共钥匙]公共钥匙[[pepepepepepe[[pepepepe[[pepepepe[[pepe[[pepe[[pepe[pepepepepe[pe[pe[pepepe[pe[pe[pepe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pe[pepe[pe[pe[pe[pe[pepe[pepe4/32
每个VPN客户端将有一个静态专用IP地址。重新启动WireGuard服务器,使更改生效。
sudo systemctl重启[电子邮件和#160;受保护]
然后像往常一样在每个VPN客户端上添加WireGuard配置。
策略路由、拆分隧道和;VPN终止开关
现在,我将向您展示如何在WireGuard VPN中使用策略路由、拆分隧道和VPN终止开关。请注意,不建议将它们相互结合使用。如果使用策略路由,则不应启用拆分隧道或VPN kill switch,反之亦然。
策略路由
默认情况下,VPN客户端上的所有流量都将通过VPN服务器路由。有时,您可能只希望根据传输层协议和目标端口路由特定类型的流量。这就是所谓的策略路由。
在客户端计算机上配置了策略路由,我们需要停止WireGuard客户端进程。
sudo systemctl stop[电子邮件和#160;受保护]
然后编辑客户端配置文件。
sudo nano/etc/wireguard/wg-client0。形态
例如,如果在[interface]部分添加以下3行,WireGuard将创建一个名为“1234”的路由表,并将ip规则添加到路由表中。在本例中,只有当TCP用作传输层协议且目标端口为25时,即当客户端计算机发送电子邮件时,流量才会通过VPN服务器路由。
Table=1234 POSTOP=ip规则添加ipproto tcp dport 25 Table 1234 PreDown=ip规则删除ipproto tcp dport 25 Table 1234
保存并关闭文件。然后再次启动WireGuard客户端。
sudo systemctl start[电子邮件和#160;受保护]
隧道分离
默认情况下,VPN客户端上的所有流量都将通过VPN服务器路由。下面介绍如何启用拆分隧道,这样只有到10.10.10.0/24 IP范围的流量才会通过WireGuard VPN进行隧道传输。当您想要为多个云服务器构建专用网络时,这非常有用,因为VPN客户端将在云服务器上运行,如果使用完整的VPN隧道,则可能会失去与云服务器的连接。
编辑客户端配置文件。
sudo nano/etc/wireguard/wg-client0。形态
改变
AllowedIPs=0.0.0.0/0
到
AllowedIPs=10.10.10.0/24
因此,只有当目标地址在10.10.10.0/24 IP范围内时,流量才会通过VPN路由。保存并关闭文件。然后重启WireGuard客户端。
sudo systemctl重启[电子邮件和#160;受保护]
VPN终止开关
默认情况下,当VPN连接中断时,您的计算机可以通过普通网关访问Internet。您可能希望启用kill switch功能,它可以防止未加密的数据包通过非WireGuard接口流动。
停止WireGuard客户端进程。
sudo systemctl stop[电子邮件和#160;受保护]
编辑客户端配置文件。
sudo nano/etc/wireguard/wg-client0。形态
在[interface]部分添加以下两行。
postp=iptables-I输出-我是马克--马克$-m addrtype--dst类型LOCAL-j REJECT PreDown=iptables-D输出-我是马克--马克$-m addrtype--dst类型本地-j拒绝
这样地:
[Interface]Address=10.10.10.2/24 DNS=10.10.10.1 PrivateKey=cOFA+x5UvHF+a3xJ6enLatG+Doe3I5Phmgkrmkuyxi=postp=iptables-I输出-我是马克--马克$-m addrtype--dst类型LOCAL-j REJECT PreDown=iptables-D输出-我是马克--马克$-m addrtype--dst类型本地-j拒绝[Peer]公钥=KQVxOji5KM4S1C7WXU2UZFPB8MHGZ8MMGTIF2U0=AllowedIPs=0.0.0.0/0端点=12.34.56.78:51820持久性保留=25
保存并关闭文件。然后启动WireGuard客户端。
sudo systemctl start[电子邮件和#160;受保护]
安装Linux内核5。Debian 10上的x
Debian 10上当前的Linux内核版本是4.19。在步骤1中,我们在Debian 10上添加了backport存储库。在撰写本文时,backport存储库包括Linux内核5.10。您可能知道wireguard模块从5.4版开始包含在Linux内核中。如果我们在Debian 10上安装Linux内核5.10,当系统升级Linux内核时,我们不需要构建wireguard模块。事实上,我的Debian 10服务器曾经在使用wireguard dkms构建wireguard模块时遇到问题。
请注意,在阅读本文时,Debian 10 backport存储库可能已经删除了内核5.10,并包含了内核5.11。只需在以下命令中用5.9重新安装5.8。
要在Debian 10云服务器上安装Linux内核5.8,请运行以下命令。
sudo apt安装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安装linux-image-5.10.0-0。bpo。7-amd64 linux-headers-5.10.0-0。bpo。7-amd64
然后重新启动Debian 10设备。
sudo关机-现在关机
检查你的Linux内核版本。
内核版本
样本输出
5.10.0-0.bpo。7-cloud-amd64
虽然我们不再需要wireguard dkms包,但它是wireguard包的一个依赖项,因此我们无法将其从系统中删除。升级wireguard软件包时,您可能会看到以下错误。

错误dkms。此模块的conf包含一个BUILD_EXCLUSIVE指令,该指令与此内核/arch不匹配。这表明它不应该建造
这表明wireguard dkms正试图将wireguard模块构建到Linux内核中,但Linux 5.10包含一个本机wireguard模块,因此构建操作被阻止,您可以忽略此错误。
收尾
就这样!我希望本教程能帮助您在Debian上安装和配置WireGuard。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门
除非注明,否则均为MMCloud原创文章,转载必须以链接形式标明本文链接。


