本文最后更新于:2024-11-18T14:20:10+08:00
WireGuard ®是一种极其简单但快速的现代 VPN,它使用最先进的加密技术。它旨在比 IPsec更快、更简单、更精简和更有用,同时避免令人头疼的问题。它旨在比 OpenVPN 具有更高的性能。
官网地址:https://www.wireguard.com/ docker源码:https://github.com/linuxserver/docker-wireguard
介绍 WireGuard是一种开源的VPN(虚拟专用网络)协议,它旨在提供更快速、更安全和更简单的VPN连接。WireGuard利用现代加密协议,如ChaCha20和Curve25519,以保护数据传输的隐私和安全性。与其他VPN协议相比,WireGuard具有更少的代码和更少的复杂性,这使得它易于部署和使用。WireGuard已经被广泛使用并受到了积极的评价。
搭建WireGuard服务器 搭建WireGuard服务器的步骤如下:
选择服务器操作系统:WireGuard可以在各种操作系统上运行,包括Linux、Windows、macOS、FreeBSD等。您可以选择自己熟悉的操作系统,但是在本文中,我们将使用Linux服务器作为示例。
安装WireGuard:您可以按照WireGuard官方文档中提供的安装指南,在您选择的操作系统上安装WireGuard。
生成公钥和私钥:在您的服务器上生成一个私钥和一个公钥,您可以使用wg命令来完成此操作。例如,输入以下命令生成一个新的私钥和公钥:
wg genkey | tee privatekey | wg pubkey > publickey
这将生成一个名为privatekey的文件,其中包含私钥,以及一个名为publickey的文件,其中包含公钥。
配置WireGuard:您需要创建一个配置文件来配置WireGuard,以指定VPN客户端将使用的IP地址、端口和密钥等信息。您可以使用wg-quick工具来创建并启动WireGuard配置。例如,您可以创建一个名为wg0.conf的文件,并添加以下内容:
[Interface]
PrivateKey = <your server private key>
Address = 10.0.0.1/24
ListenPort = 51820
[Peer]
PublicKey = <your client public key>
AllowedIPs = 10.0.0.2/32
其中,<your server private key>
是您在步骤3中生成的私钥,10.0.0.1/24
是服务器的IP地址,51820
是服务器监听的端口号,<your client public key>
是客户端的公钥,10.0.0.2/32
是客户端的IP地址。
启动WireGuard:您可以使用以下命令来启动WireGuard:
sudo wg-quick up wg0
这将启动WireGuard服务并加载您在配置文件中指定的配置。您可以使用以下命令来验证是否成功启动:
如果一切正常,您应该能够看到WireGuard服务器的配置信息。
客户端连接:现在您可以在客户端上安装WireGuard,并将客户端公钥添加到服务器的配置文件中。客户端应该使用您在配置文件中指定的IP地址和端口号连接到服务器。
使用Docker搭建服务器环境 如果您想使用Docker来搭建WireGuard服务器环境,可以按照以下步骤操作:
安装Docker和Docker Compose:您需要先在您的服务器上安装Docker和Docker Compose。您可以按照Docker官方文档提供的安装指南在您选择的操作系统上安装。
创建Docker Compose文件:您可以创建一个名为docker-compose.yml的文件,并添加以下内容:
version: '3'
services:
wireguard:
image: linuxserver/wireguard
container_name: wireguard
cap_add:
- NET_ADMIN
environment:
- PUID=<your user id>
- PGID=<your group id>
- TZ=<your timezone>
volumes:
- /path/to/config:/config
ports:
- 51820:51820/udp
restart: always
其中,<your user id>
是您的用户ID,<your group id>
是您的用户组ID,<your timezone>
是您的时区,/path/to/config
是您的配置文件目录,51820
是WireGuard使用的端口号。
创建配置文件:在您的配置文件目录中创建一个名为wg0.conf的文件,并添加以下内容:
[Interface]
PrivateKey = <your server private key>
Address = 10.0.0.1/24
ListenPort = 51820
[Peer]
PublicKey = <your client public key>
AllowedIPs = 10.0.0.2/32
其中,<your server private key>
是您在步骤3中生成的私钥,10.0.0.1/24
是服务器的IP地址,51820
是服务器监听的端口号,<your client public key>
是客户端的公钥,10.0.0.2/32
是客户端的IP地址。
启动容器:您可以使用以下命令启动容器:
docker-compose up -d
这将启动WireGuard容器并加载您在配置文件中指定的配置。
客户端连接:现在您可以在客户端上安装WireGuard,并将客户端公钥添加到服务器的配置文件中。客户端应该使用您在配置文件中指定的IP地址和端口号连接到服务器。
配置Windows客户端 要在Windows上配置WireGuard客户端以连接到您的Docker搭建的WireGuard服务器,您可以按照以下步骤进行操作:
在Windows上安装WireGuard客户端:您可以从WireGuard官方网站下载和安装Windows版的WireGuard客户端。
生成客户端密钥对:您需要在客户端上生成一个密钥对,以便连接到服务器。您可以使用WireGuard客户端生成一个新的密钥对。
向服务器添加客户端公钥:将客户端的公钥添加到服务器的配置文件中,这样服务器就能够识别并允许客户端连接。您可以将客户端的公钥复制到服务器配置文件的[Peer]部分中,并设置允许的IP地址(例如,AllowedIPs = 10.0.0.2/32
)。
配置WireGuard客户端:打开WireGuard客户端,并点击“添加配置文件”。在新窗口中,选择“从文件加载”并导入您在步骤3中生成的客户端私钥和服务器配置文件。然后,点击“添加隧道”并连接到服务器。
测试连接:完成以上步骤后,您应该能够连接到服务器。您可以测试连接是否成功,例如,使用ping命令测试是否能够访问服务器上的资源。
以上是在Windows上配置WireGuard客户端以连接到Docker搭建的WireGuard服务器的基本步骤。
配置Linux客户端 要在Linux上配置WireGuard客户端以连接到您的Docker搭建的WireGuard服务器,您可以按照以下步骤进行操作:
在Linux上安装WireGuard客户端:您可以在Linux上安装WireGuard客户端。具体的安装方法因Linux发行版而异,您可以在WireGuard官方文档中找到相关说明。
生成客户端密钥对:您需要在客户端上生成一个密钥对,以便连接到服务器。您可以使用WireGuard客户端生成一个新的密钥对。
向服务器添加客户端公钥:将客户端的公钥添加到服务器的配置文件中,这样服务器就能够识别并允许客户端连接。您可以将客户端的公钥复制到服务器配置文件的[Peer]部分中,并设置允许的IP地址(例如,AllowedIPs = 10.0.0.2/32
)。
配置WireGuard客户端:您可以在Linux上通过命令行配置WireGuard客户端。您需要创建一个名为wg0.conf
的配置文件,并添加以下内容:
[Interface]
PrivateKey = <your client private key>
Address = 10.0.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = <your server public key>
Endpoint = <your server IP address>:51820
AllowedIPs = 0.0.0.0/0
其中,<your client private key>
是您在步骤2中生成的私钥,10.0.0.2/24
是客户端的IP地址,1.1.1.1
是您希望使用的DNS服务器,<your server public key>
是服务器的公钥,<your server IP address>
是服务器的IP地址,51820
是服务器监听的端口号。
启动WireGuard客户端:使用以下命令启动WireGuard客户端:
sudo wg-quick up wg0
这将启动WireGuard客户端并加载您在配置文件中指定的配置。
测试连接:完成以上步骤后,您应该能够连接到服务器。您可以测试连接是否成功,例如,使用ping命令测试是否能够访问服务器上的资源。
以上是在Linux上配置WireGuard客户端以连接到Docker搭建的WireGuard服务器的基本步骤。
WireGuard可用配置项 WireGuard是一种快速且现代的VPN协议,它提供了各种配置选项来优化连接和安全性。以下是一些常用的WireGuard配置选项:
[Interface]:指定本地网络接口的设置,包括私钥、地址、DNS服务器和MTU等。
PrivateKey:本地网络接口的私钥。
Address:本地网络接口的IP地址,可以是单个地址或CIDR块。
DNS:指定DNS服务器的IP地址。
MTU:设置网络接口的最大传输单元。
[Peer]:指定连接到的对等端的设置,包括公钥、IP地址、端点和允许IP地址等。
PublicKey:对等端的公钥。
Endpoint:对等端的IP地址和端口号,用于建立连接。
AllowedIPs:指定可以通过VPN访问的IP地址范围,可以是单个地址或CIDR块。
[Interface]或[Peer]的PreUp、PostUp、PreDown和PostDown:指定在启动或停止WireGuard接口时执行的脚本。
PreUp:在启动WireGuard接口之前执行的脚本。
PostUp:在启动WireGuard接口之后执行的脚本。
PreDown:在停止WireGuard接口之前执行的脚本。
PostDown:在停止WireGuard接口之后执行的脚本。
PersistentKeepalive:指定在网络空闲时发送keepalive消息以避免连接中断。
PersistentKeepalive:设置keepalive消息发送的时间间隔(以秒为单位)。
ListenPort:指定WireGuard服务监听的端口号。
ListenPort:设置WireGuard服务监听的端口号。
PeerDNS:指定是否将DNS查询路由到远程VPN服务器。
PeerDNS:设置是否将DNS查询路由到远程VPN服务器。
以上是一些常用的WireGuard配置选项。
示例使用 以下是一个基本的WireGuard配置文件示例,包括[Interface]和[Peer]配置段:
[Interface]
PrivateKey = [Private Key]
Address = 10.0.0.1/24
ListenPort = 51820
DNS = 8.8.8.8
[Peer]
PublicKey = [Public Key]
AllowedIPs = 10.0.0.2/32
Endpoint = [Remote Server IP]:51820
PersistentKeepalive = 25
请将上述配置文件保存为名为wg0.conf
的文件,并将其中的私钥、公钥和远程服务器IP地址替换为您自己的值。
此示例配置文件包含一个[Interface]段和一个[Peer]段。[Interface]定义了本地WireGuard接口的设置,包括私钥、IP地址、监听端口和DNS服务器。[Peer]定义了要连接的远程对等端的设置,包括公钥、允许IP地址、端点和持久keepalive设置。
要在Linux系统上使用此配置文件,可以执行以下命令启动WireGuard接口:
sudo wg-quick up wg0
要停止接口,请使用以下命令:
sudo wg-quick down wg0
请注意,这只是一个基本示例,您可以根据自己的需求调整配置文件中的各个选项。
注:如需开启自启服务可使用如下指令:
sudo systemctl enable wg-quick@wg0 --now
快捷方式 服务端:
#!/bin/bash
#!/bin/bash
# 检查操作系统
OS=$(uname -s)
# 检查WireGuard是否已安装
if [ "$OS" = "Linux" ]; then
if ! command -v wg >/dev/null; then
echo "正在安装WireGuard..."
# 根据不同的Linux发行版使用相应的包管理器进行安装
if command -v apt-get >/dev/null; then
sudo apt-get update
sudo apt-get install -y wireguard resolvconf
sudo modprobe wireguard
elif command -v dnf >/dev/null; then
sudo dnf install -y wireguard-tools
elif command -v yum >/dev/null; then
sudo yum install -y elrepo-release epel-release
sudo yum install -y kmod-wireguard wireguard-tools
sudo modprobe wireguard
else
echo "无法自动安装WireGuard,请手动安装。"
exit 1
fi
fi
elif [ "$OS" = "Darwin" ]; then
if ! command -v wg >/dev/null; then
echo "正在安装WireGuard..."
brew install wireguard-tools
fi
else
echo "不支持的操作系统。"
exit 1
fi
# 启用IP转发
echo "启用IP转发..."
# 检查是否已经设置IP转发
ip_forward=$(cat /proc/sys/net/ipv4/ip_forward)
if [ "$ip_forward" -eq 1 ]; then
echo "IP转发已经启用,无需进行设置。"
fi
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
echo "IP转发已成功启用。"
echo "WireGuard已安装,清除原有配置并重新生成新配置..."
# 停止WireGuard服务
sudo wg-quick down wg0
# 移除WireGuard配置文件
sudo rm /etc/wireguard/wg0.conf
# 清除WireGuard相关的iptables规则
# sudo iptables -D FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# sudo iptables -D FORWARD -i wg0 -o eth0 -j ACCEPT
# sudo iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT
# sudo iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# 重新生成WireGuard配置文件
echo "请输入服务器的IP地址:"
read -r server_ip
echo "请输入服务器的监听端口:"
read -r server_port
sudo mkdir -p /etc/wireguard
sudo chmod 700 /etc/wireguard
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
server_privatekey=$(sudo cat /etc/wireguard/privatekey)
server_publickey=$(sudo cat /etc/wireguard/publickey)
wg_config="/etc/wireguard/wg0.conf"
echo "[Interface]" | sudo tee "$wg_config"
echo "Address = 10.13.13.1/24" | sudo tee -a "$wg_config"
echo "ListenPort = $server_port" | sudo tee -a "$wg_config"
echo "PrivateKey = $server_privatekey" | sudo tee -a "$wg_config"
echo "" | sudo tee -a "$wg_config"
echo "WireGuard服务端配置文件已创建:$wg_config"
# 重新生成WireGuard配置文件
echo "请输入生成的客户端数量:"
read -r client_count
for ((i=1; i<=client_count; i++)); do
wg genkey | sudo tee /etc/wireguard/privatekey$i | wg pubkey | sudo tee /etc/wireguard/publickey$i
client_privatekey=$(sudo cat /etc/wireguard/privatekey$i)
echo "[Peer]" | sudo tee -a "$wg_config"
echo "PublicKey = $(sudo cat /etc/wireguard/publickey$i)" | sudo tee -a "$wg_config"
echo "AllowedIPs = 10.13.13.$((i+1))/32" | sudo tee -a "$wg_config"
client_config="/root/wireguard-clients/client$i.conf"
sudo mkdir -p "$(dirname "$client_config")"
sudo chmod 700 "$(dirname "$client_config")"
echo "[Interface]" | sudo tee "$client_config"
echo "PrivateKey = $client_privatekey" | sudo tee -a "$client_config"
echo "Address = 10.13.13.$((i+1))/24" | sudo tee -a "$client_config"
echo "DNS = 10.13.13.1" | sudo tee -a "$client_config"
echo "" | sudo tee -a "$client_config"
echo "[Peer]" | sudo tee -a "$client_config"
echo "PublicKey = $server_publickey" | sudo tee -a "$client_config"
echo "Endpoint = $server_ip:$server_port" | sudo tee -a "$client_config"
echo "AllowedIPs = 10.13.13.0/24" | sudo tee -a "$client_config"
echo "PersistentKeepalive = 25" | sudo tee -a "$client_config"
echo "" | sudo tee -a "$client_config"
echo "客户端$i的配置文件已创建:$client_config"
done
# 启动WireGuard服务
sudo systemctl enable --now wg-quick@wg0
echo "WireGuard已配置完毕"
exit 0
客户端:
#!/bin/bash
# 检查操作系统
OS=$(uname -s)
# 检查WireGuard是否已安装
if [ "$OS" = "Linux" ]; then
if ! command -v wg >/dev/null; then
echo "正在安装WireGuard..."
# 根据不同的Linux发行版使用相应的包管理器进行安装
if command -v apt-get >/dev/null; then
sudo apt-get update
sudo apt-get install -y wireguard resolvconf
elif command -v yum >/dev/null; then
sudo yum install -y wireguard-tools resolvconf
elif command -v pacman >/dev/null; then
sudo pacman -S --noconfirm wireguard-tools openresolv
elif command -v dnf >/dev/null; then
sudo dnf install -y wireguard-tools resolvconf
else
echo "无法自动安装WireGuard,请手动安装。"
exit 1
fi
fi
elif [ "$OS" = "Darwin" ]; then
if ! command -v wg >/dev/null; then
echo "正在安装WireGuard..."
brew install wireguard-tools
fi
else
echo "不支持的操作系统。"
exit 1
fi
# 检查WireGuard配置文件是否已存在
if [ -f /etc/wireguard/wg0.conf ]; then
echo "已存在WireGuard配置文件。"
read -p "是否替换现有配置?(y/n): " replace_config
if [ "$replace_config" != "y" ]; then
echo "使用现有配置文件。"
exit 0
fi
fi
# 用户编辑WireGuard配置文件
echo "请在vi或vim中编辑WireGuard配置文件。"
read -p "按Enter键继续..." enter_key
if command -v vi >/dev/null; then
sudo vi /etc/wireguard/wg0.conf
elif command -v vim >/dev/null; then
sudo vim /etc/wireguard/wg0.conf
else
echo "未找到合适的编辑工具,请手动编辑 /etc/wireguard/wg0.conf 并保存。"
fi
# 启动WireGuard服务
sudo systemctl start wg-quick@wg0
# 设置开机自启
sudo systemctl enable wg-quick@wg0
echo "WireGuard客户端已成功配置并连接。"
exit 0