WireGuard 是一种现代的 VPN (虚拟私人网络) 协议,旨在提供比传统 VPN 解决方案更高的安全性、速度和简便性。它使用了最新的加密技术,设计上追求最小化,易于配置且性能优异。WireGuard 的设计目标是比目前流行的 VPN 协议,如 OpenVPN 和 IPSec,更快、更简单、更轻量级,同时提供强大的安全性能。
- 简洁高效:WireGuard 代码基非常精简,大约只有 OpenVPN 的 1/10,这使得它易于审计和验证安全性。
- 高级加密:采用了最先进的加密技术,包括 Curve25519、ChaCha20、Poly1305、BLAKE2s 等,确保了数据传输的安全。
- 快速且可靠:WireGuard 旨在提供高性能,减少延迟,提高连接的稳定性,使其成为处理高速网络连接的理想选择。
- 易于配置:配置过程简单直观,相比其他 VPN 解决方案,WireGuard 的配置文件更加简洁明了。
- 跨平台支持:支持包括 Linux、Windows、macOS、BSD、iOS 和 Android 在内的多个平台。
WireGuard 工作在网络层,可以看作是一种安全的 IP 隧道技术。它在客户端和服务器之间建立一个虚拟的网络接口,通过这个接口,数据包在发送前会被加密,并在接收时解密,从而实现两端之间的安全通信。
WireGuard 的设计充分考虑了安全性,采用了无状态协议,意味着不会记录任何关于连接状态的信息,这有助于减少潜在的安全漏洞。同时,它也支持最新的加密算法,以确保通信过程的安全。
WireGuard 适用于多种网络环境和场景,包括但不限于:
- 个人隐私保护:在公共 Wi-Fi 环境下保护网络通信,防止数据泄露。
- 企业远程工作:为远程工作者提供安全的访问企业内部网络资源的能力。
- 跨地域网络连接:连接分布在不同地区的网络资源,实现网络的互联互通。
WireGuard安装
WireGuard 支持多种操作系统平台,下面是在一些主流平台上安装 WireGuard 的指南:
对于大多数 Linux 发行版,WireGuard 可以直接通过官方的包管理器安装。例如,在基于 Debian(如 Ubuntu)和基于 RPM 的发行版(如 Fedora)上的安装命令如下:
-
Debian/Ubuntu:
sudo apt update sudo apt install wireguard
-
Fedora:
sudo dnf install wireguard-tools
-
Arch Linux:
sudo pacman -S wireguard-tools
在 Windows 上,WireGuard 提供了一个简单的安装程序,您可以从官方网站下载。
- 访问 WireGuard 官网 下载页面。
- 下载适用于 Windows 的安装程序。
- 运行下载的安装程序并按照指示完成安装。
在 macOS 上,WireGuard 可以通过 Homebrew 安装,或者下载官方提供的 macOS 客户端。
-
使用 Homebrew 安装:
brew install wireguard-tools
-
下载安装:
- 访问 WireGuard 官网下载页面。
- 下载适用于 macOS 的客户端。
- 打开下载的
.dmg
文件,将 WireGuard 应用拖到应用程序文件夹中。
在 iOS 设备上,您可以直接从 App Store 安装 WireGuard 应用程序。
- 打开 App Store。
- 搜索 “WireGuard” 并找到 WireGuard VPN 应用。
- 点击获取或下载,然后按照屏幕上的指示安装。
在 Android 设备上,WireGuard 可以通过 Google Play Store 或 F-Droid 安装。
-
Google Play Store:
- 打开 Google Play Store 应用。
- 搜索 “WireGuard” 并选择 WireGuard VPN 应用。
- 点击安装。
-
F-Droid:
- 在支持 F-Droid 的设备上添加 F-Droid 仓库。
- 搜索 WireGuard 并安装。
手动配置 WireGuard
- 生成密钥对:为每个设备生成公钥和私钥。
- 生成命令:
wg genkey | tee privatekey | wg pubkey > publickey
- 生成命令:
- 服务器配置:
- 创建
/etc/wireguard/wg0.conf
配置文件。 - 配置内容包括服务器私钥、监听端口、客户端公钥等。
- 创建
- 客户端配置:
- 创建客户端配置文件,通常命名为
wg0.conf
。 - 配置包括客户端私钥、服务器公钥、VPN IP 地址、DNS 等。
- 创建客户端配置文件,通常命名为
- 启动 WireGuard 服务:
- 启动命令:
sudo wg-quick up wg0
- 设置自动启动:
sudo systemctl enable wg-quick@wg0
- 启动命令:
配置文件说明
[Interface]
Address = 10.0.0.2/24
PrivateKey = <客户端私钥>
[Peer]
PublicKey = <服务器公钥>
AllowedIPs = 0.0.0.0/0
Endpoint = <服务器的IP地址或域名>:51820
WireGuard Easy
WireGuard Easy (wg-easy) 是一个简化 WireGuard VPN 配置和管理的工具,提供了一个用户友好的 web 界面。它使得创建和管理 WireGuard VPN 服务器和客户端配置变得更加容易和直观。以下是关于如何使用 wg-easy 的基本指导。
wg-easy 可以作为 Docker 容器运行,这使得安装过程非常简单。首先,确保您的系统上已经安装了 Docker。然后,可以使用以下命令来运行 wg-easy 的 Docker 容器:
docker run -d \ --name=wg-easy \ --cap-add=NET_ADMIN \ --cap-add=SYS_MODULE \ -e WG_HOST=my-vpn.example.com \ -e PASSWORD='your_password' \ -p 51820:51820/udp \ -p 51821:51821/tcp \ -v /path/to/wg-easy/data:/etc/wireguard \ --restart=unless-stopped \ weejewel/wg-easy
--name=wg-easy
设置容器的名称为wg-easy
。--cap-add=NET_ADMIN
和--cap-add=SYS_MODULE
为容器添加必要的权限以管理网络接口和加载内核模块。-e WG_HOST=my-vpn.example.com
设置您的 WireGuard 服务器的公共域名或IP地址。-e PASSWORD='your_password'
设置进入 wg-easy 管理界面的密码。-p 51820:51820/udp
映射 WireGuard 的默认端口。-p 51821:51821/tcp
映射 wg-easy 管理界面的端口。-v /path/to/wg-easy/data:/etc/wireguard
将 WireGuard 的配置文件目录映射到宿主机上,以便持久化数据。weejewel/wg-easy
是 wg-easy 的 Docker 镜像。
安装并运行 wg-easy 后,您可以通过访问 http://your-server-ip:51821
来打开 wg-easy 的 web 界面。首次访问时,系统会提示您输入上述命令中设置的密码。
在 wg-easy 的 web 界面中,您可以:
- 查看服务器信息:包括公钥、监听端口等。
- 添加客户端:通过简单的表单输入客户端名称,自动生成配置文件。
- 管理客户端:查看客户端的详细信息,下载客户端配置文件,或删除不再需要的客户端。
- 修改服务器配置:调整一些基本设置,如服务器的监听端口、DNS 服务器等。
wg-easy 旨在简化 WireGuard VPN 的部署和管理,使得即使是没有太多网络知识的用户也能轻松设置 VPN。通过其直观的 UI,用户可以快速配置和管理 VPN,无需直接编辑配置文件或使用命令行工具。
WireGuard EASY 配置参数说明
以下是通过设置环境变量 (-e KEY="VALUE"
) 配置的选项:
- PORT:Web UI 的 TCP 端口,默认为
51821
。 - WEBUI_HOST:Web UI 绑定的 IP 地址,默认为
0.0.0.0
。 - PASSWORD:设置后,登录 Web UI 时需要密码。
- WG_HOST:VPN 服务器的公共主机名。
- WG_DEVICE:WireGuard 流量应通过的以太网设备,默认为
eth0
。 - WG_PORT:VPN 服务器的公共 UDP 端口,默认为
51820
(Docker 容器内始终监听51820
)。 - WG_MTU:客户端将使用的 MTU,默认服务器使用 WireGuard 默认 MTU。
- WG_PERSISTENT_KEEPALIVE:保持“连接”开放的秒数,默认为
0
(不保持)。 - WG_DEFAULT_ADDRESS:客户端 IP 地址范围,默认为
10.8.0.x
。 - WG_DEFAULT_DNS:客户端将使用的 DNS 服务器,默认为
1.1.1.1
。 - WG_ALLOWED_IPS:客户端将使用的允许 IP,默认为
0.0.0.0/0, ::/0
(路由所有流量)。 - WG_PRE_UP、WG_POST_UP、WG_PRE_DOWN、WG_POST_DOWN:分别在接口启动前后和关闭前后执行的命令。
WireGuard 全局配置选项
-
[Interface]
部分:定义了关于 VPN 接口本身的设置。PrivateKey
:接口的私钥,用于 WireGuard 加密。必须保密。Address
:分配给此接口的 IP 地址。可以是 IPv4 或 IPv6 地址,也可以同时指定多个地址。ListenPort
:(可选)WireGuard 侦听的端口。如果未指定,将随机选择端口。DNS
:(可选)通过 VPN 连接时使用的 DNS 服务器地址。可以指定多个 DNS 服务器,用逗号分隔。MTU
:(可选)指定接口的最大传输单元(MTU)大小。如果未指定,WireGuard 会尝试自动确定最佳值。Table
:(可选)指定路由表 ID,用于配置路由规则。特殊值off
可以禁止自动添加路由。
-
[Peer]
部分:定义了与此接口连接的对等方(即远程设备)的设置。PublicKey
:对等方的公钥。用于 WireGuard 加密的公开部分。PresharedKey
:(可选)一个预共享密钥,用于增加连接的安全性。必须在双方配置中匹配。AllowedIPs
:定义了哪些 IP 地址应该通过这个特定的对等方路由。这可以用于分流。Endpoint
:对等方的公网地址和端口,格式为IP:port
。PersistentKeepalive
:(可选)发送保活数据包的间隔(秒)。用于保持 NAT 映射,对于经常变动的网络环境很有用。ExcludePrivateIPs
:(可选,较新版本的 WireGuard 特性)如果设置为true
,则不会通过 VPN 路由私有(本地)IP 地址。
-
PostUp
和PostDown
脚本:这些是在接口启动(wg-quick up
)或关闭(wg-quick down
)时执行的 shell 命令。它们可以用于配置防火墙规则、设置路由等。- 例如,
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
会在接口启动时设置 NAT 和转发规则。 PostDown
通常包含相应的命令来清除或撤销PostUp
中设置的规则。
- 例如,