Administrator
Administrator
发布于 2024-12-14 / 15 阅读
0
0

debian/ubuntu/windows配置wiregurad内网服务器

使用 WireGuard 搭建服务端与客户端的完整流程

本文将详细讲解如何在 Linux 环境下配置 WireGuard 服务端与客户端,并实现掉线自动重启的机制。本文适用于有一定 Linux 基础的用户。

什么是 WireGuard?

WireGuard 是一种轻量级、高性能的 VPN 协议,由 Jason Donenfeld 于 2015 年发明,并于 2018 年正式发布。其设计目标是提供快速、安全且简单的虚拟专用网络连接。

相比传统的 VPN 协议(如 IPsec 和 OpenVPN),WireGuard 具有以下优点:

  • 更小的代码库:代码量更少,便于审计和维护。
  • 更高的速度:采用高效的加密与传输机制,性能出众。
  • 更低的资源消耗:对系统资源占用更少。
  • 更简单的架构:配置与部署流程简化,使用体验类似于配置 SSH。
  • 更安全的加密方式:基于现代加密原语,安全性更高。

WireGuard 最初在 Linux 平台上开发,如今也可用于 Windows、macOS、BSD、iOS 和 Android 等多种平台。易于跨平台部署,是其重要特性之一。

WireGuard 背景

传统的 VPN 协议(如 IPsec、OpenVPN)大多在几十年前开发,随着安全需求的提升和软硬件的发展,它们在速度、配置复杂度和安全性方面显得不足。Jason Donenfeld 在此背景下开发出 WireGuard,使其成为更快速、安全且易于部署和管理的开源 VPN 协议。

自 Linux 内核 5.6 开始,WireGuard 已被合并进内核主线,这进一步提升了其性能与易用性。


部署流程概览

  1. 服务器端配置:安装 WireGuard、生成密钥对、配置服务端 wg0.conf、启用 IP 转发、启动服务。
  2. 客户端配置:安装 WireGuard、生成密钥对、配置客户端 wg0.conf、启动客户端并验证连接。
  3. 添加/删除客户端:通过 wg 命令在服务器侧添加或移除客户端。
  4. 掉线自启动:通过定时任务 (crontab) 和脚本检测连接状态,并在掉线时自动重启客户端服务。

以下为详细步骤。


一、服务器端配置

1. 安装 WireGuard

如果你的内核版本 >= 5.6,那么内核原生支持 WireGuard,只需安装相关工具:

sudo apt update && sudo apt install wireguard

对于较早版本内核,需要先升级内核或者使用 wireguard-dkms、wireguard-tools 来实现兼容。如果出现以下错误:

Unable to access interface: Protocol not supported

请更新内核或安装相应的 backports 版本(后文有 Debian backports 的解决方案)。

2. 生成密钥对

在服务器上执行:

wg genkey | sudo tee /etc/wireguard/privatekey-wg0 | wg pubkey | sudo tee /etc/wireguard/publickey-wg0

生成的私钥和公钥分别保存在 /etc/wireguard/privatekey-wg0/etc/wireguard/publickey-wg0 文件中。

3. 配置服务器参数

创建并编辑服务器端配置文件:

sudo touch /etc/wireguard/wg0.conf
sudo nano /etc/wireguard/wg0.conf

粘贴如下内容(根据实际情况修改):

[Interface]
Address = 10.100.1.1/24
SaveConfig = true
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -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
ListenPort = 51800
PrivateKey = SERVER_PRIVATE_KEY

其中:

  • SERVER_PRIVATE_KEY 替换为 /etc/wireguard/privatekey-wg0 文件中的内容。
  • eth0 替换为你的实际出口网卡名称,可以用如下命令获取默认路由网卡名:
    ip -o -4 route show to default | awk '{print $5}'
    

如果希望客户端仅访问内网(10.100.1.0/24),可以修改 PostUp/PostDown,如下:

PostUp = iptables -A FORWARD -p all -i wg0 ! -d 10.100.1.0/24 -j DROP
PostDown = iptables -D FORWARD -p all -i wg0 ! -d 10.100.1.0/24 -j DROP

如果要在同一台服务器上配置多个 WG 实例,可增加 wg1.conf 并生成对应的私钥公钥文件,然后按照同样的流程配置。

iptables 参考

如果不熟悉 iptables,可参考以下资料:

(请在网上搜索对应资料的详细链接)

4. 配置服务器 IP 转发

编辑 /etc/sysctl.conf 文件:

sudo nano /etc/sysctl.conf

确保有如下行,并取消注释:

net.ipv4.ip_forward=1

然后执行:

sudo sysctl -p

使修改生效。

5. 启动/停止服务器端

启动服务端:

sudo wg-quick up wg0

如果成功会有类似输出:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.100.1.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

停止服务端:

sudo wg-quick down wg0

检查当前服务器状态:

sudo wg

输出示例:

interface: wg0
  public key: ********************
  private key: (hidden)
  listening port: 51800

二、客户端配置

1. 安装 WireGuard 客户端

各平台安装方式略有不同,可访问官网获取安装包:

WireGuard 官方网站

在 Linux 下:

sudo apt update && sudo apt install wireguard

2. 生成客户端密钥对

Linux 客户端上运行:

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

Windows 客户端可在 GUI 程序中直接生成,记录下私钥、公钥即可。

3. 配置客户端参数

创建并编辑客户端配置文件:

sudo touch /etc/wireguard/wg0.conf
sudo nano /etc/wireguard/wg0.conf

粘贴如下内容,并根据实际情况修改:

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY   # 客户端私钥
Address = 10.100.1.2/32           # 为本机分配的IP,与服务端同网段

[Peer]
PublicKey = SERVER_PUBLIC_KEY     # 服务器公钥
Endpoint = SERVER_IP_ADDRESS:51800 # 服务器的公网IP和侦听端口
AllowedIPs = 10.100.1.0/24        # 通过 WireGuard 的流量范围。若设为0.0.0.0/0则所有流量都走WG
PersistentKeepalive = 120         # 每120秒发送一次心跳包防止NAT下线
  • CLIENT_PRIVATE_KEY:替换为客户端私钥文件中内容。
  • SERVER_PUBLIC_KEY:替换为服务端 /etc/wireguard/publickey-wg0 文件中的公钥。
  • SERVER_IP_ADDRESS:替换为服务端的公网 IP 地址。

如果有多台客户端,请确保为每台客户端分配不同的 Address(例如 10.100.1.3、10.100.1.4 等)。

4. 启动/停止客户端

启动客户端:

sudo wg-quick up wg0

成功启动后可通过 ping 10.100.1.1 测试能否访问服务端。

停止客户端:

sudo wg-quick down wg0

5. 配置开机自动启动

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

检查服务状态:

sudo systemctl status wg-quick@wg0

三、服务器添加/删除客户端

在服务器端添加客户端公钥和对应的 IP:

sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.100.1.2/32

删除客户端:

sudo wg set wg0 peer CLIENT_PUBLIC_KEY remove

查看当前客户端连接情况:

sudo wg

输出示例:

interface: wg0
  public key: ***********************
  private key: (hidden)
  listening port: 51800
peer: ***********************
  endpoint: *.*.*.*:36875
  allowed ips: 10.100.1.2/32
  latest handshake: 10 seconds ago
  transfer: 392 B received, 184 B sent

四、掉线自启动配置(客户端侧)

下面的步骤主要用于客户端,定期检测到服务器的连通性,如果不通则自动重启客户端。

1. 新建检测脚本

touch /home/dev/Documents/pingwireguard.sh
chmod +x /home/dev/Documents/pingwireguard.sh
vim /home/dev/Documents/pingwireguard.sh

脚本内容(根据实际情况修改 IP):

#!/bin/sh
if ! ping -c 3 10.100.1.1 > /dev/null 2>&1 ; then
    echo "$(date) The network is down! Restarting wg0..."
    sudo systemctl restart wg-quick@wg0.service
else
    echo "$(date) WireGuard network is alive."
fi

2. 配置定时任务 (crontab)

crontab -e

增加以下行,每10分钟检查一次连接情况:

*/10 * * * * /home/dev/Documents/pingwireguard.sh >> /home/dev/Documents/crontab.log 2>&1

3. 配置 sudo 免密执行

如果检测脚本运行用户为 dev,则编辑 sudoers 文件:

sudo visudo

在文件中添加:

%dev ALL=(ALL:ALL) NOPASSWD:/bin/systemctl restart wg-quick@wg0.service

如果用户无 sudo 权限,请同时为其增加 sudo 权限:

dev     ALL=(ALL:ALL) ALL
%dev    ALL=(ALL:ALL) NOPASSWD:/bin/systemctl restart wg-quick@wg0.service

4. 检查定时任务执行情况

sudo tail -f /var/log/syslog | grep CRON

若输出中出现运行记录,说明 crontab 已触发脚本。也可查看 crontab.log 日志文件。


附:Debian10 安装与报错解决方案

在 Debian 10 环境下,若安装后执行 wg-quick up wg0 出现:

RTNETLINK answers: Operation not supported
Unable to access interface: Protocol not supported

请添加 Backports 源并重新安装:

echo "deb http://deb.debian.org/debian buster-backports main" | sudo tee /etc/apt/sources.list.d/buster-backports.list

根据你的实际版本替换 buster 字段。

然后执行:

sudo apt update
sudo apt -t buster-backports install wireguard wireguard-tools wireguard-dkms linux-headers-$(uname -r)

安装完成后再启动 wg-quick up wg0 即可正常运行。


总结

以上内容详细介绍了从安装 WireGuard、配置服务端与客户端、启用 IP 转发、实现客户端定时检测掉线自动重启等完整流程。通过该指南,你可以轻松搭建稳定的 WireGuard VPN 环境,并在掉线时自动恢复连接。


评论