如何在 Debian 10 上设置 WireGuard VPN

2023-11-11

WireGuard 是一种通用 VPN(虚拟专用网络),采用最先进的加密技术。与其他流行的 VPN 解决方案(例如 IPsec 和)相比OpenVPN , 线卫通常速度更快、更容易配置并且占用空间更小。它是跨平台的,几乎可以在任何地方运行,包括 Linux、Windows、Android 和 macOS。

Wireguard 是一种点对点 VPN;它不使用客户端-服务器模型。根据配置,对等方可以充当传统服务器或客户端。它的工作原理是在每个对等设备上创建一个充当隧道的网络接口。对等点通过交换和验证公钥来相互验证,模仿 SSH 模型。公钥与隧道中允许的 IP 地址列表进行映射。 VPN 流量封装在 UDP 中。

本文介绍如何在 Debian 10 上安装和配置 WireGuard 来充当 VPN 服务器。我们还将向您展示如何在 Linux、Windows 和 macOS 上将 WireGuard 配置为客户端。客户端的流量将通过 Debian 10 服务器路由。

此设置可用于防御中间人攻击、匿名上网、绕过地理限制内容或允许在家工作的同事安全地连接到公司网络。

先决条件#

要遵循本指南,您需要一台安装了 Debian 10 的计算机。您还需要 root 或 [sudo 访问权限](https://linuxize.com/post/how-to-create-a-sudo-user-on-debian/ 来安装软件包并对系统进行更改。

设置 WireGuard 服务器#

我们首先在 Debian 计算机上安装 WireGuard 软件包,并将其设置为服务器。我们还将配置系统以通过它路由客户端的流量。

在 Debian 10 上安装 WireGuard#

WireGuard 可从 Debian 向后移植存储库获取。要将存储库添加到您的系统,请运行:

echo 'deb http://ftp.debian.org/debian buster-backports main' | sudo tee /etc/apt/sources.list.d/buster-backports.list

启用存储库后,更新 apt 缓存并安装 WireGuard 模块和工具:

sudo apt updatesudo apt install wireguard
WireGuard 作为内核模块运行。

配置 WireGuard#

您可以使用以下命令配置和管理 WireGuard 接口wg and wg-quick命令行工具。

WireGuard VPN 网络中的每个设备都需要拥有私钥和公钥。运行以下命令生成密钥对:

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

文件生成在/etc/wireguard目录。使用cat or less命令来查看文件的内容。私钥不应与任何人共享,并应始终保持安全。

Wireguard 还支持预共享密钥,这增加了额外的对称密钥加密层。此密钥是可选的,并且对于每个对等点对必须是唯一的。

下一步是配置将路由 VPN 流量的隧道设备。

可以使用以下命令从命令行设置该设备ip and wg命令,或手动创建配置文件。我们将使用文本编辑器创建配置。

打开编辑器并创建一个名为的新文件wg0.conf包含以下内容:

sudo nano /etc/wireguard/wg0.conf
/etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE

您可以为接口命名任何您想要的名称。但是建议使用类似的东西wg0 or wgvpn0.

界面部分的设置含义如下:

  • 地址 - 以逗号分隔的 v4 或 v6 IP 地址列表wg0界面。您可以选择为专用网络保留的 IP 地址范围(10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16)。

  • ListenPort - 监听端口。

  • PrivateKey - 由私钥生成wg genkey命令。 (要查看文件类型的内容:sudo cat /etc/wireguard/privatekey)

  • SaveConfig - 当设置为 true 时,关闭时将接口的当前状态保存到配置文件中。

  • PostUp - 在启动界面之前执行的命令或脚本。在此示例中,我们使用 iptables 来启用伪装。这允许流量离开服务器,从而使 VPN 客户端能够访问互联网。

    确保更换ens3 after -A POSTROUTING以匹配您的公共网络接口的名称。您可以轻松找到该接口:

    ip -o -4 route show to default | awk '{print $5}'
  • PostDown - 在关闭接口之前执行的命令或脚本。一旦接口关闭,iptables 规则将被删除。

The wg0.conf and privatekey普通用户不应该读取文件。使用chmod将文件权限设置为600:

sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}

完成后,带上wg0使用配置文件中指定的属性启动接口:

sudo wg-quick up wg0

输出将如下所示:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

要检查接口状态和配置,请运行:

sudo wg show wg0
interface: wg0
  public key: +Vpyku+gjVJuXGR/OXXt6cmBKPdc06Qnm3hpRhMBtxs=
  private key: (hidden)
  listening port: 51820

您还可以使用以下命令验证接口状态ip a show wg0:

ip a show wg0
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 10.0.0.1/24 scope global wg0
       valid_lft forever preferred_lft forever

WireGuard 可以使用 Systemd 进行管理。要在启动时启用 WireGuard 界面,请运行以下命令:

sudo systemctl enable wg-quick@wg0

服务器网络和防火墙配置#

必须启用 IP 转发才能使 NAT 工作。打开/etc/sysctl.conf文件并添加或取消注释以下行:

sudo nano /etc/sysctl.conf
/etc/sysctl.conf
net.ipv4.ip_forward=1

保存文件并应用更改:

sudo sysctl -p
net.ipv4.ip_forward = 1

如果您使用 UFW 来管理您的firewall您需要在端口上打开 UDP 流量51820:

sudo ufw allow 51820/udp

就是这样。充当服务器的 Debian 对等体已设置完毕。

Linux 和 macOS 客户端设置#

所有受支持平台的安装说明可在以下位置找到:https://wireguard.com/install/。在 Linux 系统上,您可以使用分发包管理器安装该包,在 macOS 上,可以使用brew.

安装后,请按照以下步骤配置客户端设备。

设置 Linux 和 macOS 客户端的过程与设置服务器的过程几乎相同。首先,生成公钥和私钥:

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

创建文件wg0.conf并添加以下内容:

sudo nano /etc/wireguard/wg0.conf
/etc/wireguard/wg0.conf
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24


[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0

界面部分的设置与设置服务器时的含义相同:

  • 地址 - 以逗号分隔的 v4 或 v6 IP 地址列表wg0界面。
  • PrivateKey - 要查看客户端计算机上文件的内容,请运行:sudo cat /etc/wireguard/privatekey

对等部分包含以下字段:

  • PublicKey - 您想要连接的对等方的公钥。 (服务器的内容/etc/wireguard/publickey file).
  • 端点 - 您要连接的对等点的 IP 或主机名,后跟冒号,然后是远程对等点侦听的端口号。
  • AllowedIPs - 以逗号分隔的 v4 或 v6 IP 地址列表,允许对等方的传入流量以及该对等方的传出流量定向到该地址。我们使用 0.0.0.0/0 是因为我们正在路由流量并希望服务器对等方发送具有任何源 IP 的数据包。

如果您需要配置其他客户端,只需使用不同的私有 IP 地址重复相同的步骤即可。

Windows 客户端设置#

从以下位置下载并安装 Windows msi 软件包WireGuard 网站 .

安装后,打开 WireGuard 应用程序并单击“添加隧道”->“添加空隧道...”,如下图所示:

公钥对将自动创建并显示在屏幕上。

输入隧道名称并编辑配置,如下所示:

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24


[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0

在接口部分中,添加新行来定义客户端隧道地址。

在对等部分中,添加以下字段:

  • PublicKey - Debian 服务器的公钥 (/etc/wireguard/publickey file).
  • 端点 - Debian 服务器的 IP 地址,后跟冒号和 WireGuard 端口 (51820)。
  • 允许的IP - 0.0.0.0/0

完成后,单击“保存”按钮。

将客户端对等点添加到服务器#

最后一步是将客户端的公钥和 IP 地址添加到服务器。为此,请在 Debian 服务器上运行以下命令:

sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2

确保更改CLIENT_PUBLIC_KEY使用您在客户端计算机上生成的公钥(sudo cat /etc/wireguard/publickey)并调整客户端IP地址(如果不同)。 Windows 用户可以从 WireGuard 应用程序复制公钥。

完成后,返回客户端计算机并打开隧道界面。

Linux 和 macOS 客户端#

运行以下命令打开界面:

sudo wg-quick up wg0

现在您应该连接到 Debian 服务器,并且来自客户端计算机的流量应该通过它进行路由。您可以通过以下方式检查连接:

sudo wg
interface: wg0
  public key: gFeK6A16ncnT1FG6fJhOCMPMeY4hZa97cZCNWis7cSo=
  private key: (hidden)
  listening port: 53527
  fwmark: 0xca6c

peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
  endpoint: XXX.XXX.XXX.XXX:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 53 seconds ago
  transfer: 3.23 KiB received, 3.50 KiB sent

您还可以打开浏览器,输入“what is my ip”,您应该会看到您的 Debian 服务器 IP 地址。

要停止隧道挖掘,请关闭wg0界面:

sudo wg-quick down wg0

Windows客户端#

如果您在 Windows 上安装了 WireGuard,请单击“激活”按钮。一旦对等点连接,隧道状态将更改为 Active:

结论#

我们已经向您展示了如何在 Debian 10 上安装 WireGuard 并将其配置为 VPN 服务器。此设置允许您通过保持流量数据的私密性来匿名上网。

如果您遇到任何问题,请随时发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Debian 10 上设置 WireGuard VPN 的相关文章

  • 如何在 Jboss 7.1 中配置简单身份验证

    我正在从事由以下人员编写的项目纯jsps 脚本 不使用任何框架 jboss版本 jboss as 7 1 0 Final 我现在正在尝试在其上添加简单的身份验证 因此 当用户尝试浏览 jsp 时 比如说 http localhost myC
  • JSON 响应周围的注释块

    我注意到一些 Web 应用程序返回 AJAX 响应 并在注释块中嵌入 JSON 数据 例如 这是一个示例响应 firstName John lastName Smith address streetAddress 21 2nd Street
  • .NET 声明式安全性:为什么 SecurityAction.Deny 无法使用?

    我已经搞乱了大约一天半的时间 现在正在筛选 NET Reflector 和 MSDN 文档 但无法弄清楚任何事情 在 NET 框架中 您可以通过标记如下方法来要求当前的委托人属于一个能够执行方法的角色 PrincipalPermission
  • Bash 中的 Shellshock 漏洞背后的行为是有记录的还是有意为之?

    最近的一个漏洞 CVE 2014 6271 http web nvd nist gov view vuln detail vulnId CVE 2014 6271 如何Bash http en wikipedia org wiki Bash
  • 鉴于我的代码是开源的并且我在服务器上运行,并且我接受近乎原始的代码,那么对我来说最糟糕的情况是什么?

    我正在研究几个案例 在这些案例中 接受近乎原始的代码会容易得多 所以 如果你不能使用 lambda 你能对表达式做的最糟糕的事情是什么 以及如何做 如果不能使用 import 那么对执行的代码最糟糕的情况是什么 如何使用 不能使用 X 扫描
  • openssl_crypt 中初始化向量的使用

    我看了一下this https stackoverflow com questions 1391132 two way encryption in php问题 并想为自己做 当我运行这段代码时 直接取自这个答案 https stackove
  • 如何在 C# 中创建 PKCS12 .p12 文件?

    这可能是一个n00b问题 但我在这方面确实没有任何经验 我需要创建一个包含 X509 证书和私钥的 p12 捆绑包 我当前有两个对象 X509Certificate2 和包含关键信息的 RSAParameters 对象 如何将它们合并到 p
  • 如何列出静态链接的 python 版本中可用的所有 openssl 密码?

    在python 2 7 8到2 7 9升级中 ssl模块从使用更改为 DEFAULT CIPHERS DEFAULT aNULL eNULL LOW EXPORT SSLv2 to DEFAULT CIPHERS ECDH AESGCM D
  • 如何检测CSRF漏洞[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定一个网站 如何检测潜在的 CSRF 漏洞 提前致谢 这是一个CSRF https www owasp org index php
  • JavaScript 中的安全数据

    我必须为 Web 测试创建生成器 使用 HTML 和 JavaScript 测试必须离线和在线进行 正确答案和分数评估必须是生成的测试的一部分 最终用户的分数仅发送到服务器 无法在服务器上进行评估 并且服务器对问题一无所知 它只保存最终分数
  • AES 在汇编中的实现 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 大家好 我正在尝试构建一个代码来演示
  • 警告:您的 git 版本是 1.9.3。存在严重的安全漏洞

    我在部署到 Heroku 期间收到有关 git 1 9 3 严重安全漏洞的警告 我尝试通过 homebrew 更新 git 但发现 git 最初并不是通过 homebrew 安装的 然后我通过自制程序安装了它 brew update bre
  • 如何为移动应用程序创建无密码登录

    我有兴趣在移动应用程序和 API 之间构建某种无密码登录 假设我可以控制两者 动机是必须登录对用户来说非常烦人并且存在安全风险 例如 用户将重复使用现有密码 我希望用户能够立即开始使用该应用程序 我想知道是否有一些可行的技术 例如 在移动设
  • 为什么将 MySQL 凭据放在 www 目录之外? [复制]

    这个问题在这里已经有答案了 可能的重复 将核心类放在 Web 根目录之上 好还是坏主意 https stackoverflow com questions 3648739 putting core classes above the web
  • 客户端登录 - 如何在客户端安全地存储凭据?

    许多 API 都提供通过用户 密码组合远程访问其数据的功能 我想知道存储这些值的最佳方式是什么 高度安全的方式 即使 100 是不可能的 以便直接连接它们而无需每次都询问这些值 我推荐以下三种方法之一 使用身份验证令牌完全避免存储密码 在此
  • 受信任的 1.5 小程序可以执行系统命令吗?

    如果是的话 这个能力有什么限制吗 具体来说 我需要以 Mac OSX 为目标 我以前用过这个在 Windows 系统上启动东西 但从未在 Mac 上尝试过 public void launchScript String args Strin
  • PHP - hash_pbkdf2 函数

    我正在尝试使用此 php 函数执行一个函数来哈希密码 http be php net manual en function hash pbkdf2 php http be php net manual en function hash pb
  • 从 iOS 应用程序内的 Junos Pulse 获取用户凭据

    我正在通过 Junos Pulse 在 iPad 中建立 VPN 连接 以进入我组织的 Intranet 谁能告诉我是否有任何 iOS api 或 SDK 可用于获取在 iOS 应用程序内的 Junos pulse 中输入的用户凭据 Jun
  • 在哪里可以找到并安装 pygame 的依赖项?

    我对 Linux 比较陌生 正在尝试安装 python 的 pygame 开发环境 当我运行 setup py 时 它说我需要安装以下依赖项 我找到并安装了其中之一 SDL 然而 其他人则更加难以捉摸 Hunting dependencie
  • Rails 安全:完全避免大规模分配

    我倾向于不需要批量分配 http guides rubyonrails org security html mass assignment我的生产代码中的功能 在我的测试代码中 我经常使用它 但在这些情况下我do想要设置任意列 因此 如果在

随机推荐

  • 如何在 Ubuntu 22.04 上安装 Linux、Nginx、MySQL 和 PHP(LEMP Stack)

    Linux操作系统是非常流行且广泛使用的服务器操作系统 它为世界上大多数网站提供支持 包括雅虎 谷歌和 Facebook 等一些最著名的网站 逻辑首字母缩略词 LAMP 通常用来指自由和开源软件的混合物 这些软件经常一起使用来创建可以处理动
  • 如何统治科技世界?

    谷歌 Facebook 苹果和微软等科技巨头正在真正统治世界 他们不仅在商业和技术领域做出了贡献 而且还大力投资于社会责任项目 当他们从车库或大学宿舍起步时 是什么让他们成为科技界的巨头 他们的成功有很多因素 但所有这些科技巨头都有一些共同
  • 如何在 Debian 11/10 上安装 Tomcat 10

    Apache Tomcat 是一个开源 Web 服务器 带有用于发布基于 Java 的 Web 应用程序的 Servlet 容器 Tomcat 是由 Apache 软件基金会支持下的开放开发者社区开发和维护的 截至目前 Tomcat 10
  • 掌握 Bash 中的数字比较:综合指南

    Bash 是 Linux 和 Unix 系统中流行的命令行 shell 允许用户通过运行脚本或执行命令来有效地执行各种任务 编写 Bash 脚本的一个关键方面是能够根据变量值或命令输出做出决策 一项常见的决策任务是比较数值 本文提供了掌握
  • 如何并排放置两个 Div 元素

    在 Web 开发中 定位 HTML 元素的方法有无数种 一种常见的布局要求是并排放置两个 div 元素 这种布局在网页设计中经常使用 特别是当需要将内容水平分成不同的部分时 有多种方法可以实现此布局 包括使用 float flexbox 和
  • 如何在 RHEL 和 CentOS Stream 9 上安装 PHP 8.2-7.4

    PHP 是一种流行的脚本语言 用于开发动态 Web 应用程序 它是一种开源编程语言 可以轻松安装在包括 CentOS 9 在内的各种操作系统上 在本文中 我们将引导您完成在 CentOS 9 上安装 PHP 的步骤 在开始之前 请确保您拥有
  • Linux 中使用 GPG 密钥对的文件加密

    GPG 基本文件加密不需要公钥 私钥 但为了使加密文件更安全 您可以使用 RSA DSA 算法 这些算法生成公钥和私钥来加密文件 本文将帮助您在 Linux 中使用 GPG 密钥对完成以下三项文件加密任务 创建密钥对 为同一用户帐户本地加密
  • 了解基本的 Git 工作流程:添加、提交、推送

    在软件开发领域 版本控制至关重要 在各种可用的版本控制系统中 Git 因其稳健性 灵活性和分布式架构而成为行业标准 在本文中 我们将重点介绍基本 Git 工作流程的基本步骤 添加 提交和推送 了解 Git 在深入研究 Git 工作流程的复杂
  • 10 个适合旧电脑的最佳轻量级 Linux 发行版

    随着计算机的老化 其性能不可避免地会下降 操作系统的响应速度也会降低 对于想要继续使用旧硬件但受到可用资源限制的用户来说 这可能会令人沮丧 幸运的是 Linux 提供了各种针对旧计算机进行优化的轻量级发行版 使它们能够更流畅 更高效地运行
  • 如何在 CentOS/RHEL 7 和 Fedora 上安装 Python 3.9

    Python 是一种非常流行 用途广泛且易于学习的编程语言 广泛应用于从 Web 开发和数据分析到人工智能和机器学习的各个行业和应用程序 Python 3 9 是该语言的最新版本之一 提供了改进的性能和许多新功能 在本教程中 我们将指导您完
  • 如何在 Linux 上的 VirtualBox 中从 USB 驱动器启动

    使用 USB 启动物理机要容易得多 但 VirtualBox 不提供直接选择从 USB 启动的方法 因此 如果您有可启动 USB 驱动器 那么本文将帮助您了解如何使用可启动 USB 创建 VirtualBox 虚拟机 对于这个例子 我已经创
  • 如何在 Debian 9 Stretch 上安装 PHP(7.4、7.3 和 5.6)

    PHP 7 4 是可在 Debian 9 Stretch Linux 计算机上安装的最新版本 Ubuntu 用户可以访问我们的教程在 Ubuntu 上安装 PHP 7 本教程适用于 Debian 9 Stretch 用户在其系统上安装 PH
  • 如何在Linux终端上访问远程邮箱

    Linux 系统有大量的图形电子邮件客户端 您可以轻松安装它们以通过 POP IMAP 协议访问远程系统的邮箱 对于没有GUI界面的Linux服务器版本可以使用命令行邮件客户端访问远程邮箱 本教程将帮助您在Linux终端上使用POP IMA
  • Bash – 如何获取未来的日期和时间

    Linuxdate命令显示系统的当前日期和时间 在编写 shell 脚本时 我意识到有时我们需要查找未来的日期 例如 10 天 2 个月或 1 年之后的日期等 date 命令提供了一个选项来显示未来的日期 如所述 d date STRING
  • Magento 2 代码库和数据库备份脚本

    本教程将帮助您使用 shell 脚本自动执行 Magento2 代码库和数据库备份过程 该脚本将按计划的时间间隔执行自动备份 该脚本还能够根据配置删除较旧的备份 设置Magerun2 您需要在系统上下载并配置 Magerun2 脚本 wge
  • 如何使用 Mysqlcheck 检查和修复 MySQL 表

    数据库管理系统是现代软件应用程序无缝运行不可或缺的一部分 MySQL 是世界上使用最广泛的关系数据库管理系统之一 随着数据库的增长和发展 确保其中表的完整性 性能和运行状况至关重要 这就是 Mysqlcheck 发挥作用的地方 1 Mysq
  • 如何在 Ubuntu 20.04 上使用 VSFTPD 设置 FTP 服务器

    本文介绍如何在 Ubuntu 20 04 上安装和配置 FTP 服务器 用于在设备之间共享文件 FTP 文件传输协议 是一种标准网络协议 用于在远程网络之间传输文件 有多种可用于 Linux 的开源 FTP 服务器 最知名和最广泛使用的是P
  • 如何在 Ubuntu 20.04 上添加交换空间

    交换空间是磁盘上的空间 当物理 RAM 内存已满时使用 当 Linux 系统耗尽 RAM 时 非活动页面将从 RAM 移至交换空间 交换空间可以采用专用交换分区或交换文件的形式 通常 在虚拟机上运行 Ubuntu 时 不存在交换分区 唯一的
  • 如何在 Debian 9 上安装和配置 Redmine

    Redmine 是一款免费的开源项目管理和问题跟踪应用程序 它是跨平台和跨数据库的 构建在 Ruby on Rails 框架之上 Redmine包括对多个项目 wiki 问题跟踪系统 论坛 日历 电子邮件通知等的支持 在本教程中 我们将向您
  • 如何在 Debian 10 上设置 WireGuard VPN

    WireGuard 是一种通用 VPN 虚拟专用网络 采用最先进的加密技术 与其他流行的 VPN 解决方案 例如 IPsec 和 相比OpenVPN 线卫通常速度更快 更容易配置并且占用空间更小 它是跨平台的 几乎可以在任何地方运行 包括