debian/ubuntu/windows配置wiregurad内网服务器(包含掉线自启动)

avatar
作者
筋斗云
阅读量:2

文章目录

前言

本文主要用来讲解如何配置wireguard服务器、客户端及掉线自启动的全套流程。

WireGuard 是一种轻量级的虚拟专用网协议,旨在提供快速、安全、简单的网络连接。它是由 Jason Donenfeld 在 2015 年发明的,并于 2018 年正式发布。

WireGuard 与其他常见的协议相比,有许多优点,如更小的代码库、更快的速度、更低的系统资源消耗、更简单的架构和更安全的加密方式。它通常用于个人电脑、服务器、移动设备等,可以帮助用户保护其在线隐私、提高网络安全性、解除网络限制等。

WireGuard 使用了自己的加密协议,使用了高效的数据包格式和高效的握手机制,可以提高网络速度和效率。它还使用了新型的密钥管理方式,可以更快地完成握手和通信。

总的来说,WireGuard 是一种非常优秀的协议,它提供了快速、安全、简单的网络连接,可以帮助用户保护其在线隐私、提高网络安全性、解除网络限制等。

IPsec 和 Open微皮恩等大多数其他解决方案是几十年前开发的。安全研究人员和内核开发人员 Jason Donenfeld 意识到它们速度慢且难以正确配置和管理。

这让他创建了一个新的开源 微皮恩协议和解决方案,它更加快速、安全、易于部署和管理。

WireGuard 最初是为 Linux 开发的,但现在可用于 Windows、macOS、BSD、iOS 和 Android。它仍在活跃开发中。

除了可以跨平台之外,WireGuard 的最大优点之一就是易于部署。配置和部署 WireGuard 就像配置和使用 SSH 一样容易。

一、服务器配置

安装wireguard软件

sudo apt update && sudo apt install wireguard 

目前 WireGuard 已经被合并到 Linux 5.6 内核中了,如果你的内核版本 >= 5.6,就可以用上原生的 WireGuard 了,只需要安装 wireguard-tools 即可,内核版本<5.6,可能需要首先更新内核,否则可能会报错:Unable to access interface: Protocol not supported

生成私钥公钥

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

生成的密钥保存在/etc/wireguard/privatekey-wg0/etc/wireguard/publickey-wg0

配置服务器参数

#创建,编辑配置文件 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  #服务器端生成的私钥 

使用/etc/wireguard/privatekey-wg0中的值替换SERVER_PRIVATE_KEY

使用如下命令获取网卡名称,替换eth0

ip -o -4 route show to default | awk '{print $5}'

如果希望这个客户端只能访问内网,则设置如下,丢弃所有非10.100.1.0网段的请求

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 

这里附上博主搜索到两篇对于iptables整理的比较好的文章,一并附上

CSDN - Linux iptables 防火墙软件命令详解
CSDN - iptables学习笔记

如果想要配置多个端口服务,可生成如/etc/wireguard/privatekey-wg1/etc/wireguard/publickey-wg1的密钥,增加wg1.conf后按照原流程即可。

配置服务器sysctl参数

如果要正常使用wg0的转发,需要启用电脑的ip转发,使用你喜欢的编辑器打开文件/etc/sysctl.conf

添加或者取消注释行net.ipv4.ip_forward=1

使用sudo sysctl -p 应用修改

启动、停止服务端

#启动服务端 $ 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  ## 输出如下 [#] wg showconf wg0 [#] ip link delete dev wg0 [#] iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE 

校验服务端状态:

sudo wg ## 输出 interface: wg0   public key: ********************   private key: (hidden)   listening port: 51800 

二、用户端配置

安装wireguard软件

软件官方下载连接:www.wireguard.com

请添加图片描述

由于greatwall的存在,可以关注微信公众号:机器人梦想家下载。

请添加图片描述

windows 64位安装 *amd64.msi

windows 32位安装 *x86.msi

windows arm安装 *arm64.msi

安卓安装 *.apk

ubuntu或debian使用命令安装sudo apt-get install wireguard

生成私钥公钥

使用wiregurad的工具wg genkeywg pubkey生成公钥和私钥并保存在/etc/wireguard/目录。windows会自动生成,记下来即可。

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

配置客户端参数

#创建,编辑配置文件 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	#这里是限制只有10.100.1 网段的请求走WireGuard,不影响其它应用上网,设为0.0.0.0/0则是所有请求均走WireGuard PersistentKeepalive = 120	#握手时间,每隔120s ping一次客户端 

替换其中的CLIENT_PRIVATE_KEYSERVER_PUBLIC_KEYSERVER_IP_ADDRESS,按照自己本地生成的配置

多台client注意修改Address为不同的ip地址。

启动、停止客户端

#启动客户端 $ 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  ## 输出如下 [#] wg showconf wg0 [#] ip link delete dev wg0 [#] iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE 

配置服务开机启动

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

可以通过下边指令检查服务运行状态:

sudo systemctl status wg-quick@wg0 

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

# 添加客户端 sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.100.1.2  #删除客户端 sudo wg set wg0 peer CLIENT_PUBLIC_KEY remove 

可以通过在服务器端运行sudo wg查看client状态

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 

四、配置掉线自启动

配置掉线自启动脚本

掉线自启动一般只需要配置客户端

新建脚本,用于检测是否掉线

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

粘贴如下:

#!/bin/sh if ! ping -c 3 10.100.1.1 > /dev/null 2>&1 ;then echo `date` " The network is down! Now try restarting wg0!\n"  sudo systemctl restart wg-quick@wg0.service else echo `date` "Wireguard network is alive.\n" fi 

配置定时程序

这里使用crontab定时呼叫校验脚本

$ crontab -e 

每隔10min执行一遍校验网络是否通畅,增加条如下:

*/10 * * * *  /home/dev/Documents/pingwireguard.sh  

配置脚本sudo免密执行权限

sudo visudo ## 增加如下,dev是你本地运行crontab的用户名 %dev ALL=(ALL:ALL) NOPASSWD :/bin/systemctl restart wg-quick@wg0.service 

请注意用户是否有执行root的权限,若没有同时增加如下这句

sudo visudo  # # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults        env_reset Defaults        mail_badpass Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"  # Host alias specification  # User alias specification  # Cmnd alias specification  # User privilege specification root    ALL=(ALL:ALL) ALL ## 为你的用户增加sudo权限, 注意dev修改为你本地运行crontab的用户 dev     ALL=(ALL:ALL) ALL  # Allow members of group sudo to execute any command %sudo   ALL=(ALL:ALL) ALL ## 增加如下, 注意dev修改为你本地运行crontab的用户名 %dev ALL=(ALL:ALL) NOPASSWD :/bin/systemctl restart wg-quick@wg0.service  # See sudoers(5) for more information on "@include" directives:  @includedir /etc/sudoers.d admin ALL=(ALL)  NOPASSWD:ALL 

判断crontab是否执行

# 判断之前运行情况 sudo tail -f /var/log/syslog | grep CRON # ==========OUT PUT========== # Nov 17 16:25:01 debian11 CRON[5863]: (dev) CMD (/home/dev/Documents/pingwireguard.sh >> /home/dev/Documents/crontab.log 2>&1)  # 输出运行过程到日志 */10 * * * *  /home/dev/Documents/pingwireguard.sh >> /home/dev/Documents/crontab.log 2>&1 

Debian10 Wirguard通过apt安装报错及解决

报错

正常安装后运行报错如下:

$ sudo wg-quick up wg0  #================== OUT PUT ======================== [#] ip link add wg0 type wireguard RTNETLINK answers: Operation not supported Unable to access interface: Protocol not supported [#] ip link delete dev wg0 Cannot find device "wg0" 

解决

需要安装Debian Backports(在支持的Debian稳定版本上提供了具有新功能的新软件包)1,安装方式如下:

Add Backports to sources.list

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) 

等安装完成后就可以成功运行了。

结尾

至此结束所有的配置,本文参考大量的博客进行汇总,最终得到一套比较简单能够配置的方法可以应用于工程实际情况,希望能对大家起到一些帮助。


  1. Set Up Your Own WireGuard VPN Server on Debian 11 & Debian 10 - LinuxBabe↩︎

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!