芸科技_服务器 网络设备 技术方案及pc 显卡等
2026-05-30 23:25:16

wireguard组网

本教程将介绍如何使用wireguard进行点对点组网连接

0.简介

WireGuard 首先是一个“协议”,我们日常使用的是实现该协议的“程序”。

  • 作为“协议”:它是一套定义好的规则和标准,规定了网络数据如何被加密、封装和传输。比如,它规定了使用先进的 Noise 协议框架进行身份验证,使用 Curve25519 进行密钥交换,使用 ChaCha20Poly1305 进行数据加密等。

  • 作为“程序”:在 Ubuntu 上安装的,是 WireGuard 协议的具体软件实现。它包括一个负责实际加密解密工作的内核模块wireguard.ko),以及我们用来配置和管理它的用户空间命令行工具(如 wgwg-quick)。

  • 极致精简与高效:WireGuard 的代码量极少,核心部分仅约 4000 行代码。这意味着代码逻辑清晰,更容易进行安全审计,潜在漏洞和攻击面也更小。同时,轻量级的代码也让它的运行效率极高。

  • 现代密码学,无冗余:它没有历史包袱,只选用经过时间考验的最先进的现代密码学套件,抛弃了所有过时的、不安全的旧算法,确保了安全性的同时避免了臃肿。

  • 原生集成于 Linux 内核:自 Linux 5.6 版本起,WireGuard 就被正式收录进 Linux 内核,Ubuntu 22.04/24.04 等现代 Linux 发行版都开箱即用,无需额外编译驱动,性能更好、更稳定。

  • 部署与运维极简:它的配置非常简单,通过一个简短的文本文件(wg0.conf)就能完成。同时,由于基于密钥对进行身份验证,使得网络扩展非常方便。

WireGuard 的流行,是因为极简和现代的方式,解决了传统 VPN 复杂、臃肿和低效的痛点。是当前网络世界里前沿、优雅的解决方案之一。

wireguard的虚拟网卡,比如默认的虚拟网卡默认名称wg0,连接着一条加密的点对点隧道,只有两个端点,所以不需要网关,直接用AllowedIPs指定路由。(点对点,所以不需要指路人 网关)

1.安装

以下为ubuntu24.04安装wireguard并配置

以下配置基于服务端有公网ip,客户端没有公网ip

注意:wireguard的通信协议使用UDP,因此ikuai端口转发请求给wireguard的机器必须选择UDP

sudo -i 						# 进入管理员模式
sudo apt install wireguard -y				# 下载wireguard
wg --version						# 查看版本

cd /etc/wireguard				
wg genkey | tee privatekey | wg pubkey > publickey	# 生成公钥和私钥
cat /etc/wireguard/privatekey				# 查看私钥
cat /etc/wireguard/publickey				# 查看公钥

vim /etc/wireguard/wg0.conf				# 在两个wg都创建配置文件

2.配置

[Interface]                     #服务端A
PrivateKey = 
Address = 10.0.9.1/24
ListenPort = 51820
PostUp = sysctl -w net.ipv4.ip_forward=1	#临时开启内核数据包转发,否则流量进来出不去
[Peer]
PublicKey = 
#wg会自动为设置的allowedIPs创建路由,来自配置的ip的数据包都将由wireguard进行处理。
AllowedIPs = 10.0.9.2/32, 192.168.248.0/24	

[Interface]		            #客户端B
PrivateKey = 
Address = 10.0.9.2/24
PostUp = sysctl -w net.ipv4.ip_forward=1
[Peer]
PublicKey = 
#注意:b的allowedIPs里的网段不要与endpoint冲突,否则就会回环,请求会在wg间一直转圈
AllowedIPs = 10.0.9.1/24
Endpoint = 192.168.150.38:51820	#服务端的ip与端口,服务端ikuai需要映射端口到下面linux
PersistentKeepalive = 10

3.命令

sudo wg-quick up wg0				# 开启隧道wg0
sudo wg-quick down wg0				# 关闭wg0
sudo wg show					# 展示wg状态
sudo systemctl enable wg-quick@wg0	    # 将隧道wg0设置为开机自启	

4.防火墙设置

sudo ufw allow ssh				# 允许ssh远程连接ei
sudo ufw allow 51820/udp		    # 放行 WireGuard 端口 (UDP)
sudo vim /etc/default/ufw		    # 将输入输c转发设置为ACCEPT
sudo ufw route allow in on wg0	        # 允许来自隧道网卡wg0的流量
sudo ufw route allow out on wg0         # 允许发往隧道网卡wg0的流量
sudo ufw enable					# 开启防火墙
sudo vim /etc/ufw/before.rules	        # 持久化 nat规则
	:POSTROUTING ACCEPT [0:0]
	-A POSTROUTING -s 10.0.9.0/24 -j MASQUERADE
sudo ufw reload					# 重启ufw

5.定时任务

由于B端是主动连接方,如果A断电重启,A的公网ip变化,B端有可能还在使用原来的ip去连接,导致隧道不通

因此如下在B端创建定时任务,每分钟检测一次隧道是否连通,否则直接关闭重启隧道,这样就会使用新的ip去连接

1.创建定时任务文件

sudo vim /etc/wireguard/check_wg_reconnect.sh
2.写入定时任务代码
TARGET_IP="10.0.9.1"				# A 端 WireGuard 的隧道内部 IP
						# 尝试 Ping 对端 3 次,每次超时 2 秒
 if ! ping -c 3 -W 2 $TARGET_IP > /dev/null 2>&1; then
    echo "$(date): Ping $TARGET_IP 失败,正在重新解析域名并重启 $WG_INTERFACE..." >> /etc/wireguard/reconnect.log
	sudo wg-quick down wg0			# 关闭wg
	sudo wg-quick up wg0			# 开启wg
fi
3.添加定时任务
sudo crontab -e							#进入root的crontab
* * * * * /bin/bash /etc/wireguard/check_wg_reconnect.sh	#添加到crontab文件,每分钟执行一次
4.查看定时任务日志与系统时间
cat /etc/wireguard/reconnect.log	# 查看定时任务日志
timedatectl status			# 查看当前时间


上一篇:没有了
下一篇:没有了