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

文章目录

  • 前言
  • 一、服务器配置
    • 安装wireguard软件
    • 生成私钥公钥
    • 配置服务器参数
    • 配置服务器sysctl参数
    • 启动、停止服务端
  • 二、用户端配置
    • 安装wireguard软件
    • 生成私钥公钥
    • 配置客户端参数
    • 启动、停止客户端
    • 配置服务开机启动
  • 三、服务器添加、删除客户
  • 四、配置掉线自启动
    • 配置掉线自启动脚本
    • 配置定时程序
    • 配置脚本sudo免密执行权限
  • 结尾

前言

本文主要用来讲解如何配置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 | wg pubkey | sudo tee /etc/wireguard/publickey

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

配置服务器参数

#创建,编辑配置文件
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 wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51800
PrivateKey = SERVER_PRIVATE_KEY  #服务器端生成的私钥

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

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

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

配置服务器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 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

结尾

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/124592.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【不正经操作】百度深度学习框架paddlepaddle本地运行-Python环境配置笔记

百度深度学习框架PaddlePaddle 百度深度学习框架PaddlePaddle是一个支持深度学习和机器学习的开源框架。它由百度公司于2016年开发并发布&#xff0c;现在已经成为中国最受欢迎的深度学习框架之一&#xff0c;并且在国际上也获得了不少关注。 特点与功能 易于使用 PaddlePa…

二分查找(二分法)

核心代码&#xff08;循环&#xff09;; int f -1;while(left<right){mid(leftright)/2;if(a[mid]key){fmid;break;}if(key<a[mid]) rmid-1;if(key>a[mid]) lmid1;}if(f-1) cout<<"没找到";else cout <<f<<endl;核心代码(递归): int bins…

Unity之NetCode多人网络游戏联机对战教程(6)--NetworkTransform组件

文章目录 前言NetworkTransform是什么玩家移动脚本NetworkTransform字段讲解Synchronizing ("Syncing")ThresholdsLocal spaceInterpolationSlerp PositionUse Quaternion SynchronizationUse Quaternion CompressionUse Half Float PrecisionAuthority modesServer …

0基础学习VR全景平台篇第118篇:利用动作录制器功能避免重复操作 - PS教程

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 嗨&#xff0c;大家好。欢迎收看蛙色VR系列教程之PS利用动作记录器节约补地时间。 大家拍摄在补地的时候&#xff0c;利用插件选择输入输出选项的时候&#xff0c;每次重复操作…

Transformer的最简洁pytorch实现

目录 前言 1. 数据预处理 2. 模型参数 3. Positional Encoding 4. Pad Mask 5. Subsequence Mask 6. ScaledDotProductAttention 7. MultiHeadAttention 8. FeedForward Networks 9. Encoder Layer 10. Encoder 11. Decoder Layer 12. Decoder 13. Transformer 1…

什么是 HwameiStor?

HwameiStor 是一款 Kubernetes 原生的容器附加存储 (CAS) 解决方案&#xff0c;将 HDD、SSD 和 NVMe 磁盘形成本地存储资源池进行统一管理&#xff0c; 使用 CSI 架构提供分布式的本地数据卷服务&#xff0c;为有状态的云原生应用或组件提供数据持久化能力。 具体的功能特性如下…

GoLong的学习之路(二十)进阶,语法之反射(reflect包)

这个是为了接上之前的语法篇的。按照我的学习计划&#xff0c;这里此时应该有一个小项目来做一个统合。但是吧&#xff0c;突然觉得&#xff0c;似乎也没必要。能学go的大部分肯定都是有其他语言的基础的。 接下来说反射 文章目录 反射介绍reflect包TypeOftype name和type kin…

基于springboot的二次元商品销售网站的设计与开发

大家好我是玥沐春风&#xff0c;今天分享一个基于springboot的二次元商品销售网站的设计与开发&#xff0c;项目源码以及部署相关请联系我&#xff0c;文末附上联系信息 。 开发工具及技术 2.3.1 Spring Boot框架 SpringBoot是一个全新的开源的轻量级框架。简化了Spring应用的…

一张数学地图带你尽览数学分支

我们在学校学习的数学可能也只是数学领域的冰山一角&#xff0c;作为庞大而多样的学科&#xff0c;我今天将通过一张数学地图带你尽览数学分支。 本数学地图对应的视频讲解地址如下&#xff1a; https://www.youtube.com/watch?vOmJ-4B-mS-Y 另外&#xff0c;由于图片较大&a…

React进阶之路(一)-- JSX基础、组件基础

文章目录 React介绍React开发环境搭建项目目录说明以及相关调整 JSX基础JSX介绍JSX中使用js表达式JSX列表渲染JSX条件渲染JSX样式处理JSX注意事项 组件基础组件的概念函数组件类组件事件绑定如何绑定事件获取事件对象传递额外参数 组件状态状态不可变表单处理受控表单组件非受控…

Triples of Cows

题目传送门 引 模拟赛 T 4 T4 T4 , 变换挺妙的, 而且感觉转换后问题就迎刃而解了 解法 强行模拟拆点重连边显然不行,会让图的边数达到 n 2 n^2 n2 级别的 —————————————————————————————————————————————————— 考虑转…

python爬虫怎么翻页 ?

首先&#xff0c;你需要安装相关的库。在你的命令行窗口中&#xff0c;输入以下命令来安装所需的库&#xff1a; pip install requests beautifulsoup4然后&#xff0c;你可以使用以下代码来爬取网页内容并翻页&#xff1a; package mainimport ("fmt""net/htt…

米软科技 | 推进医院智慧管理分级评估体系建立、提升评级

国家卫生健康委办公厅于2021年3月15日发布了“关于印发医院智慧管理分级评估标准体系&#xff08;试行&#xff09;的通知”&#xff08;国卫办医函〔2021〕86 号&#xff09;&#xff0c;该评估体系用于指导医疗机构科学、规范开展智慧医院建设&#xff0c;提升医院管理精细化…

[黑马程序员Pandas教程]——Pandas缺失值处理

目录&#xff1a; 学习目标空值和缺失值查看缺失值 加载数据并通过info函数初步查看缺失值情况df.isnull().sum()空值数量统计Missingno库对缺失值的情况进行可视化探查 安装missingno库missingno.bar(df)缺失值数量可视化missingno.matrix(df)缺失值位置的可视化missingno.he…

【23-24 秋学期】NNDL 作业7 基于CNN的XO识别

一、用自己的语言解释以下概念 局部感知、权值共享池化&#xff08;子采样、降采样、汇聚&#xff09;。会带来那些好处和坏处&#xff1f;全卷积网络&#xff08;课上讲的这个概念不准确&#xff0c;同学们查资料纠正一下&#xff09;低级特征、中级特征、高级特征多通道。N输…

Java提高与实践

IO流 IO流概述 文件字节输入流&#xff1a;每次读取一个字节 package fileStream;import java.io.*;public class HelloFileInputStream {public static void main(String[] args) throws IOException {//创建文件字节输入流 管道&#xff0c;与源文件接通//写法一//InputStr…

getid3 获取视频时长

1、首先&#xff0c;我们需要先下载一份PHP类—getid3https://codeload.github.com/JamesHeinrich/getID3/zip/master 2.我在laravel6.0 中使用 需要在composer.json 自动加载 否则系统访问不到 在命令行 执行 composer dump-autoload $getID3 new \getID3();//视频文件需要放…

『 C++类与对象 』多继承与虚继承

文章目录 ⌨️多继承的概念语法 &#x1f5b1;️ ⌨️棱形继承⌨️虚继承虚继承是如何解决数据冗余和二义性的(不谈虚表概念)?&#x1f5b1;️ ⌨️多继承的概念 多继承指的是一个派生类是由多个基类继承而来的; 而在生活当中也有类似的例子:番茄既可以是水果,也可以是蔬菜;…

内核移植笔记 Cortex-M移植

常用寄存器 PRIMASK寄存器 为1位宽的中断屏蔽寄存器。在置位时&#xff0c;它会阻止不可屏蔽中断&#xff08;NMI&#xff09;和HardFault异常之外的所有异常&#xff08;包括中断&#xff09;。 实际上&#xff0c;它是将当前异常优先级提升为0&#xff0c;这也是可编程异常/…

K8S知识点(五)

&#xff08;1&#xff09;资源管理介绍 Pod控制器的作用&#xff0c;就是为了最终产生各种各样的Pod&#xff0c;Pod里面运行容器&#xff0c;容器里面运行程序 程序需要数据持久化&#xff0c;可以用数据存储卷来存储 Pod想要让外部访问需要通过Service代理&#xff0c;外部…