介绍
wireguard 是一款现代、轻量、高性能的VPN协议,设计目标是代替传统的IPsec、OpenVPN等方案,其核心优势"简单、高效、安全"。
- 代码量小:仅约4000行代码。
- UDP高效传输:使用udp协议,延迟低、速度快,尤其适合流媒体、游戏等实时性要求高的场景。
- 现代加密算法:默认采用Curve25519(秘钥交换)、ChaCha20-Poly1305(数据加密与认证)、BLAKE2s(哈希)等抗量子计算的加密算法,安全性经过密码学社区广泛验证。
- "无状态"设计:不维护复杂的会话状态,节点间通过"公钥-IP映射"直接通信,切换网络时隧道不中断。
- 跨平台支持:原生集成于Linux内核(5.6+版本内置),同时支持windows、macOs、ios,、Android、FreeBSD等系统, 部署门槛低。
通过wireguard 可以远程访问内网,跨区域组网,云服务器代理。
服务端
通过docker安装wireguard,简单迅速。
安装docker、docker-compose
bash
#先确保系统已更新并安装必要的依赖包
sudo dnf update -y
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2
#添加 Docker 的官方 yum 源:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#从官方仓库安装 Docker
sudo dnf install -y docker-ce docker-ce-cli containerd.io
#安装完成后,启动 Docker 并设置开机自启:
sudo systemctl start docker
sudo systemctl enable docker
#使用 curl 下载最新版本的 Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
#创建软链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
#验证安装
docker-compose --version
#docker-compose 启动命令
docker-compose up -d # 启动容器
docker-compose down # 停止容器
docker-compose.yml
bash
#进入local目录下
cd /usr/local/
#新增docker-compose目录
mkdir docker-compose/
cd docker-compose/
#新增docker-compose.yml文件
docker-compose.yml
ini
version: "3.8"
services:
wireguard:
image: linuxserver/wireguard
container_name: wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=0
- PGID=0
- TZ=Asia/Shanghai
- SERVERURL=auto
- SERVERPORT=51820
- PEERS=1
- PEERDNS=auto
- INTERNAL_SUBNET=10.13.13.0/24
- ALLOWEDIPS=10.13.13.2/32
- PERSISTENTKEEPALIVE_PEERS=
- LOG_CONFS=true
volumes:
- ./config:/config #挂载你的配置目录
- /lib/modules:/lib/modules #建议直接挂载宿主机的 /lib/modules,这样容器能访问宿主机的内核模块。
ports:
- "51820:51820/udp"
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv4.ip_forward=1 #开启 IP 转发
restart: unless-stopped
注意事项
-
服务器物理网卡和wireguard虚拟网卡的网段要分开,否则会导致路由冲突,VPN流量无法正常转发
-
wireguard服务端和客户端的虚拟网段要在同一个专用网段内,且每个节点必须唯一,不能重复。例如:
- 服务端:10.13.13.1/24
- 客户端1:10.13.13.2/24
- 客户端2:10.13.13.3/24
-
wireguard服务端 wg0.conf 配置文件中:AllowedIPs 填写客户端虚拟网段
检查防火墙、添加开放端口
css
#51820端口UDP放行。
firewall-cmd --zone=public --add-port=51820/udp --permanent
firewall-cmd --reload
#查看端口是否放行
firewall-cmd --list-all
firewall-cmd --zone=public --list-ports
启动docker
bash
#启动容器
docker-compose up -d
容器加载iptables相关内核模块
perl
#在宿主机执行(不是容器内):
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
#在宿主机执行:如果没有输出,说明内核没有加载相关模块。
lsmod | grep iptable
开启IP转发
IP转发是linux系统的"路由功能",允许流量从一个网络接口(如wg0)转发到另一个接口(如eth0公网网卡)
bash
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl net.ipv4.ip_forward
- 若返回
net.ipv4.ip_forward = 1
,表示 IPv4 转发已开启(正确状态)。 - 若返回
net.ipv4.ip_forward = 0
,表示未开启(需要配置)。
添加NAT规则
服务器通过NAT规则将原源IP改为服务器的公网IP
bash
#查看NAT规则,查看主网卡信息
ip addr
如果的主网卡是ehs9f0, 内网地址是 192.168.1.240/24,WireGuard 的 NAT 转发规则(MASQUERADE)就应该作用在这个网卡上。
css
#修改/config/wg_confs/wg0.conf文件的 [Interface] 段落里的PostUp、PostDown
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ehs9f0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ehs9f0 -j MASQUERADE
访问流程
客户端通过隧道IP发送访问目标网站的请求,请求到达wireguard服务器wg0接口,IP转发请求转发到连接公网的物理网卡接口eth0, 经NAT规则处理后到达目标网站。
重启docker
bash
#启动容器
docker-compose up -d
#查看容器日志
docker logs wireguard
出现以下输出便是成功了
css
**** Activating tunnel /config/wg_confs/wg0.conf ****
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.13.13.1 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] ip -4 route add 10.10.10.2/32 dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE
**** All tunnels are now active ****
[ls.io-init] done.
进入容器
bash
#进入容器
docker exec -it wireguard bash
#在容器内执行,以下输出说明filter表存在了
iptables -L

客户端
windows下载地址
官方下载页面:www.wireguard.com/install/ 直接下载地址:download.wireguard.com/windows-cli...
连接
安装之后选择导入配置peer1.cnf进行连接,这个配置文件可以用wireguard 服务下的配置文件,挂载的配配置目录/config/peer1/下
客户端的AllowedIPs 配置成 0.0.0.0/0,这样全流量可以走WireGuard,公网IP为服务器的IP

可能遇到的问题
- 如果连接不上,需要查看端口是否放行,wireguard是否正常运行
- 如果连接上了,无法访问外网,查看IP转发和NAT规则是否正确和生效
- 如果连接上了,公网IP不是服务端的IP,查看客户端配置AllowedIPs 有没有配置成 0.0.0.0/0