WireGuard配置:快速搭建安全VPN的步骤 – wiki大全


WireGuard 配置:快速搭建安全 VPN 的步骤

引言

在当今数字化的世界中,网络安全和隐私保护变得前所未有的重要。虚拟私人网络(VPN)是实现这一目标的关键工具之一。在众多 VPN 协议中,WireGuard 以其卓越的性能、极简的设计和强大的安全性脱颖而出。它比 OpenVPN 或 IPsec 等传统 VPN 解决方案更轻量、更快,且更易于配置和维护。本文将详细指导您如何快速搭建一个基于 WireGuard 的安全 VPN。

1. 前提条件

在开始配置之前,请确保您具备以下条件:

  • 一台 Linux 服务器:推荐使用 Ubuntu 或 Debian 发行版作为您的 WireGuard 服务器。
  • Root 访问权限:您需要具有服务器的管理员(root)权限来安装软件和修改系统配置。
  • 基础 Linux 命令行操作知识:熟悉基本的 Linux 命令将有助于您完成设置。
  • 服务器公网 IP 地址:您的服务器需要一个可从公共互联网访问的 IP 地址。

2. 服务器端配置

本节将引导您在 Linux 服务器上配置 WireGuard。

2.1 安装 WireGuard

首先,在您的 Linux 服务器上更新系统并安装 WireGuard。

bash
sudo apt update
sudo apt upgrade -y
sudo apt install wireguard

2.2 生成服务器密钥对

WireGuard 使用非对称加密进行认证。您需要为服务器生成一对公钥和私钥。私钥必须严格保密,而公钥将分享给客户端。

“`bash

生成私钥并保存到文件

wg genkey | sudo tee /etc/wireguard/privatekey

设置私钥文件权限,仅root用户可读写

sudo chmod go= /etc/wireguard/privatekey

从私钥生成公钥并保存到文件

sudo cat /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
“`

您可以通过 sudo cat /etc/wireguard/privatekeysudo cat /etc/wireguard/publickey 命令查看生成的密钥。

2.3 配置 WireGuard 服务器文件

创建一个 WireGuard 配置文件,通常命名为 wg0.conf,并放置在 /etc/wireguard/ 目录下。

bash
sudo nano /etc/wireguard/wg0.conf

将以下内容粘贴到文件中,并根据您的实际情况进行修改:

ini
[Interface]
PrivateKey = <服务器私钥> # 替换为 /etc/wireguard/privatekey 的内容
Address = 10.0.0.1/24 # VPN 网络的服务器 IP 地址,可以自定义,此例中服务器为 10.0.0.1
ListenPort = 51820 # WireGuard 监听端口,默认是 51820,您可以更改
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
SaveConfig = true # 允许 wg-quick 保存配置更改

配置说明:

  • PrivateKey:将此处的占位符替换为您在 2.2 步中生成的服务器私钥内容。
  • Address:这是 WireGuard VPN 内部网络的 IP 地址范围。10.0.0.1/24 表示服务器将使用 10.0.0.1 作为其在 VPN 内部网络的 IP,客户端将从 10.0.0.2 开始分配 IP。
  • ListenPort:WireGuard 监听的 UDP 端口。
  • PostUpPostDown:这些是用于在 WireGuard 接口启动和关闭时执行的命令。它们配置了 NAT (网络地址转换) 和 IP 转发规则,以便客户端可以通过此服务器访问互联网。请将 eth0 替换为您的服务器实际连接到互联网的网卡接口名称(例如 ens3, enp0s3 等,您可以使用 ip a 命令查看)。
  • SaveConfig = true:此选项允许 wg-quick 命令在添加新的对等点时自动更新 wg0.conf 文件。

2.4 启用 IP 转发

为了让 VPN 客户端能够通过服务器访问互联网,您需要在服务器上启用 IP 转发。

编辑 /etc/sysctl.conf 文件:

bash
sudo nano /etc/sysctl.conf

找到并取消注释(或添加)以下行:

net.ipv4.ip_forward=1

保存并关闭文件,然后执行以下命令使更改立即生效:

bash
sudo sysctl -p

2.5 启动 WireGuard 服务

现在,您可以启动 WireGuard 接口并设置它在系统启动时自动运行。

bash
sudo wg-quick up wg0 # 启动 wg0 接口
sudo systemctl enable wg-quick@wg0 # 设置开机自启

您可以使用 sudo wg 命令来检查 WireGuard 接口的状态和已连接的对等点。

2.6 配置防火墙

如果您的服务器上运行了防火墙(如 UFW 或 firewalld),您需要允许 WireGuard 监听端口的 UDP 流量通过。

使用 UFW (Uncomplicated Firewall):

bash
sudo ufw allow 51820/udp # 允许 WireGuard 端口(如果您的端口是 51820)
sudo ufw enable # 如果 UFW 未启用,请启用它

使用 firewalld:

bash
sudo firewall-cmd --add-port=51820/udp --permanent
sudo firewall-cmd --reload

3. 客户端配置

每个连接到 WireGuard VPN 的客户端都需要自己的密钥对和一个配置文件。

3.1 生成客户端密钥对

您可以在服务器上或直接在客户端设备上为每个客户端生成唯一的密钥对。

“`bash

例如,为第一个客户端生成密钥对

wg genkey | tee client1_privatekey | wg pubkey | tee client1_publickey
“`

请为每个客户端重复此步骤,确保每个客户端都有自己唯一的私钥和公钥。

3.2 创建客户端配置文件

为每个客户端创建一个配置文件,例如 client1.conf。此文件将包含客户端的配置信息以及连接到服务器所需的信息。

“`ini
[Interface]
PrivateKey = <客户端私钥> # 替换为 client1_privatekey 的内容
Address = 10.0.0.2/32 # 为客户端分配一个唯一的 IP 地址,例如 10.0.0.2, 10.0.0.3 等
DNS = 8.8.8.8 # 可选,设置 DNS 服务器,例如 Google DNS

[Peer]
PublicKey = <服务器公钥> # 替换为服务器的 publickey 内容
Endpoint = <服务器公网IP或域名>:51820 # 替换为您的服务器公网 IP 地址或域名和 WireGuard 端口
AllowedIPs = 0.0.0.0/0 # 允许所有流量通过 VPN
PersistentKeepalive = 25 # 可选,保持连接活跃,防止 NAT 超时
“`

配置说明:

  • PrivateKey:替换为您为该客户端生成的私钥。
  • Address:为该客户端分配一个在 10.0.0.0/24 范围内的唯一 IP 地址,例如 10.0.0.2/32。注意这里是 /32,表示单个 IP。
  • DNS:您可以设置一个 DNS 服务器,例如 Google Public DNS (8.8.8.8) 或 Cloudflare DNS (1.1.1.1)。
  • PublicKey:替换为服务器的公钥。
  • Endpoint:替换为您的 WireGuard 服务器的公网 IP 地址或域名,以及 WireGuard 监听端口。
  • AllowedIPs = 0.0.0.0/0:表示所有客户端流量都将通过 WireGuard 隧道。如果您只想通过 VPN 访问特定的内部网络,可以将其更改为该网络的 IP 范围(例如 10.0.0.0/24)。
  • PersistentKeepalive:可选,用于在客户端位于 NAT 后方时,定期发送心跳包以保持连接活跃。

3.3 将客户端添加到服务器配置

要让服务器识别并允许客户端连接,您需要将每个客户端的公钥和分配的 VPN IP 添加到服务器的 wg0.conf 文件中。

编辑服务器的 /etc/wireguard/wg0.conf 文件:

bash
sudo nano /etc/wireguard/wg0.conf

在文件末尾添加一个 [Peer] 部分,用于每个客户端。例如,为 client1 添加:

ini
[Peer]
PublicKey = <客户端1公钥> # 替换为 client1_publickey 的内容
AllowedIPs = 10.0.0.2/32 # 替换为客户端1的 IP 地址

为每个客户端重复此 [Peer] 部分,确保 PublicKeyAllowedIPs 是唯一的。

保存并关闭文件。然后,您需要重启 WireGuard 服务以应用更改:

bash
sudo wg-quick down wg0
sudo wg-quick up wg0

或者,您可以使用 wg set 命令动态添加对等点,而无需重启服务(适用于 SaveConfig = true):

bash
sudo wg set wg0 peer <客户端公钥> allowed-ips 10.0.0.2/32

3.4 客户端安装与连接

将生成的客户端配置文件(例如 client1.conf)安全地传输到相应的客户端设备。

  • Windows/macOS:
    • 从 WireGuard 官方网站 (wireguard.com/install/) 下载并安装适用于您操作系统的 WireGuard 应用程序。
    • 打开应用程序,通常会有一个“导入隧道文件”或“添加隧道”的选项。选择您的 .conf 文件,然后激活隧道。
  • Android/iOS:
    • 从各自的应用商店(Google Play Store 或 Apple App Store)下载 WireGuard 应用程序。
    • 应用程序通常支持通过扫描配置文件中的二维码或导入文件来添加隧道。您可以使用 qrencode -t ansiutf8 < client1.conf 命令在服务器上生成二维码(需要先安装 qrencodesudo apt install qrencode)。

4. 验证连接

在客户端设备上激活 WireGuard 隧道后,您可以进行以下验证:

  • 检查公网 IP:访问像 ip.cnwhatismyip.com 这样的网站,检查您的公网 IP 地址是否已变为 WireGuard 服务器的 IP 地址。
  • Ping 测试:从客户端尝试 ping VPN 内部网络的服务器 IP 地址(例如 ping 10.0.0.1)。如果成功,表示客户端与服务器之间的 VPN 隧道已建立。

恭喜!您已经成功搭建并配置了基于 WireGuard 的安全 VPN。现在您可以享受安全、快速的网络连接了。

滚动至顶部