树莓派-搭建wireguard服务

news2024/11/16 9:28:19

一、简介

官网:https://www.wireguard.com/

WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN. WireGuard is designed as a general purpose VPN for running on embedded interfaces and super computers alike, fit for many different circumstances. Initially released for the Linux kernel, it is now cross-platform (Windows, macOS, BSD, iOS, Android) and widely deployable. It is currently under heavy development, but already it might be regarded as the most secure, easiest to use, and simplest VPN solution in the industry.
WireGuard是一个非常简单但利用最先进的加密技术快速和现代的VPN。它的目标是比IPsec更快、更简单、更精简和更有用,同时避免大量令人头痛的问题。它打算比OpenVPN性能更好。WireGuard被设计为一种通用的VPN,可以在嵌入式接口和超级计算机上运行,适合许多不同的情况。它最初是为Linux内核发布的,现在是跨平台的(Windows, macOS, BSD, iOS, Android),并且可以广泛部署。它目前正在大力开发,但它可能已经被认为是业界最安全、最容易使用和最简单的VPN解决方案。

内网穿透(frp)和虚拟专用网(wireguard):

  • 内网穿透(frp):需要公网IP,每个端设备需要基于公网IP和特定端口进行访问;
  • 虚拟专用网(wireguard):需要公网IP,每个端设备会被分配一个虚拟网IP,不同设备之间可以直接基于虚拟网IP进行访问。

二、服务器端部署

部署环境:阿里云(Ubuntu20.04)

1、安装wireguard

sudo apt install wireguard

2、修改系统配置

  • 开启IPV4流量转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

3、创建密钥对

Wireguard网络中每一个接入设备都一个对应密钥对(私钥由各端自己保留,公钥需要添加到服务端配置文件中)。

wg genkey | tee server.key | wg pubkey > server.key.pub
wg genkey | tee client_01.key | wg pubkey > client_01.key.pub
wg genkey | tee client_02.key | wg pubkey > client_02.key.pub
wg genkey | tee client_xx.key | wg pubkey > client_xx.key.pub

注:密钥对可以使用服务器创建再分配,也可以各个设备端使用相同的方法生成。

4、创建配置文件

创建配置文件:

touch /etc/wireguard/wg0.conf

修改配置文件:

  • [Interface]: 主要为服务端的配置
    • PrivateKey :服务端的私钥,客户端需要使用对应的公钥实现通信。(从安全角度该私钥需要严格保密)
    • Address:服务端分配的虚拟网的地址。
    • PostUp/PostDown:配置网络数据包进出设备及转发的控制,使用Linux iptables进行配置,需要注意根据实际环境修改命令中的物理网卡名(eth0)和虚拟网卡名(wg0)。
    • ListenPort:Wireguard服务端监听UDP端口,一般默认为9000。
    • MTU:最大传输单元MTU,是指网络能够传输的最大数据包大小,默认为1420。
  • [Peer]: 客户端部分的配置,每个Peer对应一个客户端设备
    • PublicKey:客户端设备的公钥
    • AllowedIPs :允许接入网络的客户端IP

配置文件示例:

[Interface]
PrivateKey = KB16EseuTq7Ax1zeuEob5PctLm/v3w7N+BoD28eAOks=
Address = 10.0.8.1/24

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

ListenPort = 9000
MTU = 1420

[Peer]
PublicKey = cAHcJbh4Pl3CNeZ5/eZRP5RslpeiOCzgfFcKwkM0eUw=
AllowedIPs = 10.0.8.10/32

[Peer]
PublicKey = gOqWWD7dFEn2GoTfOYthvZgWX08Eoc8B1sVgUmBQUWo=
AllowedIPs = 10.0.8.11/32

[Peer]
PublicKey = 8LWZxQ4quXQ16jGS6vnv+uvqXN87altNCtsugrc9ons=
AllowedIPs = 10.0.8.12/32

5、服务管理

安装wireguard后,会创建wg-quick@.service文件,我们可以通过systemd对wireguard功能进行管理,服务名:wg-quick@<eth_name>, 以虚拟网卡wg0为例,对应的操作命令为:

# 启动服务
sudo systemctl start wg-quick@wg0
# 停止服务
sudo systemctl stop wg-quick@wg0
# 重启服务
sudo systemctl restart wg-quick@wg0
# 查看状态
sudo systemctl status wg-quick@wg0

# 使能自启动
sudo systemctl enable wg-quick@wg0
# 关闭自启动
sudo systemctl disable wg-quick@wg0

三、树莓派端部署

1、安装wireguard

sudo apt install wireguard

2、创建配置文件

创建配置文件:

touch /etc/wireguard/wg0.conf

配置文件示例:

[Interface]
PrivateKey = 0CxPRLJiY26DLS2+Rtu8JooBeLdKnY+VkrkvhiTRC3s=
Address = 10.0.8.13/24

[Peer]
PublicKey = WLAVpXsK5+BMYwfqbY/Bt7G14psHJE6TwMkXoZ7tJEo=
AllowedIPs = 10.0.8.0/24
Endpoint = 100.200.200.200:9000
PersistentKeepalive = 60

3、启动服务

# 启动服务
sudo systemctl start wg-quick@wg0
# 停止服务
sudo systemctl stop wg-quick@wg0
# 重启服务
sudo systemctl restart wg-quick@wg0
# 查看状态
sudo systemctl status wg-quick@wg0

# 使能自启动
sudo systemctl enable wg-quick@wg0
# 关闭自启动
sudo systemctl disable wg-quick@wg0

四、Windows/Android端部署

Wireguard处理Linux支持外,也开发了Windows/Android等设备端的应用,支持这类系统设备使用UI界面的方式配置连接到Wireguard网络。下载链接:https://www.wireguard.com/install/

配置项与Linux设备一致,Windows端支持“新建隧道->从文件导入隧道”的方式直接导入.conf文件建立隧道(连接)。
在这里插入图片描述

移动端除了导入文件的方式外,也可以使用**“qrencode -t ansiutf8 <client_config>.conf”**创建二维码后扫描添加。
在这里插入图片描述

五、测试

  • 服务端状态查看
    客户端设备连接前执行“sudo wg”:
interface: wg0
  public key: iPU3HCbreBTMrpox+Ku6WU5xf5Rb3lEc9O9knGpNHVM=
  private key: (hidden)
  listening port: 9000

peer: DkqRdBMW9m6VvlfXEacRVajA3NLujXVtV9OvSEZo4RU=
  allowed ips: 10.0.8.10/32

peer: IOoa6sdwBMgno9rYMvsVZxbgvCfbfN/XEUBKw6Irjlg=
  allowed ips: 10.0.8.11/32

peer: 1Oruos/kMsVoy7lrf7SIy/2cVTNcH5VWJaccYpKtZz0=
  allowed ips: 10.0.8.12/32

peer: Qss20/1vcwm1Ir71vGxXsAq02l+zk1h4heBwpviq5Co=
  allowed ips: 10.0.8.13/32

客户端设备连接后执行“sudo wg”:

interface: wg0
  public key: iPU3HCbreBTMrpox+Ku6WU5xf5Rb3lEc9O9knGpNHVM=
  private key: (hidden)
  listening port: 9000

peer: Qss20/1vcwm1Ir71vGxXsAq02l+zk1h4heBwpviq5Co=
  endpoint: 222.70.222.174:50867
  allowed ips: 10.0.8.13/32
  latest handshake: 14 seconds ago
  transfer: 180 B received, 92 B sent

peer: DkqRdBMW9m6VvlfXEacRVajA3NLujXVtV9OvSEZo4RU=
  allowed ips: 10.0.8.10/32

peer: x/uU+r9+Z9WFgMYJBVyzi8swUUf6kOW1f9bYi7kv/A0=
  allowed ips: 10.0.8.11/32

peer: 1Oruos/kMsVoy7lrf7SIy/2cVTNcH5VWJaccYpKtZz0=
  allowed ips: 10.0.8.12/32
  • 检查设备间通信
PING 10.0.8.13 (10.0.8.13) 56(84) bytes of data.
64 bytes from 10.0.8.13: icmp_seq=1 ttl=64 time=116 ms
64 bytes from 10.0.8.13: icmp_seq=2 ttl=64 time=11.9 ms
64 bytes from 10.0.8.13: icmp_seq=3 ttl=64 time=11.5 ms
64 bytes from 10.0.8.13: icmp_seq=4 ttl=64 time=10.1 ms
64 bytes from 10.0.8.13: icmp_seq=5 ttl=64 time=11.2 ms
64 bytes from 10.0.8.13: icmp_seq=6 ttl=64 time=15.1 ms
64 bytes from 10.0.8.13: icmp_seq=7 ttl=64 time=10.2 ms
64 bytes from 10.0.8.13: icmp_seq=8 ttl=64 time=10.8 ms
64 bytes from 10.0.8.13: icmp_seq=9 ttl=64 time=10.8 ms

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot原理分析 | 安全框架:Shiro

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Shiro Shiro是一个安全框架&#xff0c;用于认证、授权和管理应用程序的安全性。它提供了一组易于使用的API和工具&#xff0c;可以帮助您轻松地添加安全性到您的应用…

apple pencil到底值不值得买?好用的iPad电容笔

随着ipad平板型号版本的不断更新&#xff0c;其的功能越来越多&#xff0c;现在它的性能已经可以和笔记本电脑相媲美了。而现在&#xff0c;随着技术的进步&#xff0c;IPAD已经不再是单纯的娱乐&#xff0c;而是一种功能强大的学习、绘画、工作等等。要增加生产效率&#xff0…

按键消抖(有/无状态机)

一&#xff0c;理论概念 按键抖动 按键抖动&#xff1a;按键抖动通常的按键所用开关为机械弹性开关&#xff0c;当机械触点断开、闭合时&#xff0c;由于机械触点的弹性作用&#xff0c;一个按键开关在闭合时不会马上稳定地接通&#xff0c;在断开时也不会一下子断开。因而在闭…

<MyBatis>MyBatis把空字符串转换成了0的问题处理方案

先看问题: Postman入参: MyBatis采用map循环插入: // Mapper接口层void addPar(Param(value "question") Map<String, Object> paramMap);<!-- 新增&#xff1a;参数 --><insert id"addPar" parameterType"map">INSERT IGNO…

高忆管理:集合竞价可以卖股票吗?

集合竞价是证券买卖所开盘前的一种买卖方式&#xff0c;其意图是为了在买卖所开盘之前构成有用的商场价格。因为商场处于初始状况&#xff0c;买卖量较小&#xff0c;因而集合竞价价格或许与买卖日中的实践买卖价格有所不同。那么&#xff0c;集合竞价是否能够卖股票呢&#xf…

Python3,1行代码,批量把图片转换成PDF文档,女神终于同意跟我吃夜宵了。

批量图片转换成PDF文档 1、引言2、代码示例2.1 安装2.2 单张转换2.3 批量转换 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 求助&#xff0c;求助。 小鱼&#xff1a;有啥事&#xff0c;这大惊小怪的。 小屌丝&#xff1a;我女神跟我说&#xff0c; 如果我把她的照片…

Spark 5:Spark Core 内核调度

DAG Spark的核心是根据RDD来实现的&#xff0c;Spark Scheduler则为Spark核心实现的重要一环&#xff0c;其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据&#xff0c;根据RDD的依赖关系构建DAG&#xff0c;基于DAG划分Stage&#xff0c;将每个…

跨境电商ERP源码选型指南,如何找到最适合你的?

在跨境电商行业&#xff0c;一个高效的ERP系统是保证业务顺利进行和管理的关键。选择适合自己的跨境电商ERP源码至关重要。本指南将帮助你了解如何找到最适合你的跨境电商ERP源码。 跨境电商ERP源码的重要性 跨境电商ERP源码在现代电商营运中起着至关重要的作用。它提供了一套…

音频开发-小程序和H5

微信录音 1、引入sdk 2、录音操作 浏览器录音 参考文献&#xff1a;前端H5实现调用麦克风&#xff0c;录音功能_h5 录音_Darker丨峰神的博客-CSDN博客 function record() { window.navigator.mediaDevices.getUserMedia({ audio: { sampleRate: 44100, // 采样率 channelCount…

游戏APP开发:创新设计的秘诀

在游戏 APP开发中&#xff0c;创新设计是游戏开发公司的一大追求&#xff0c;为了可以为用户带来更好的游戏体验&#xff0c;这就需要对游戏 APP开发进行创新设计。那么&#xff0c;游戏 APP开发中的创新设计是什么呢&#xff1f;接下来&#xff0c;我们就一起来看看吧。 想要…

一起学算法(递推篇)

前言&#xff1a;递推最通俗的理解就是数列&#xff0c;递推和数列的关系就好比算法和数据结构的关系&#xff0c;数列有点像数据结构中的顺序表&#xff0c;而递推就是一个循环或者迭代的过程的枚举过程 1.斐波那契数列 斐波那契数形成的序列称为斐波那契数列&#xff0c;该…

【Java|golang】143. 重排链表---快慢指针

给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 …

python中有哪些异常,怎么处理

目录 python报的错误怎么处理 1. 使用 try-except 语句块 2. 使用 finally 语句块 3. 主动引发异常 python中有哪些异常 不知道是什么异常时怎么操作 总结 python报的错误怎么处理 在Python中&#xff0c;当程序执行时遇到错误&#xff0c;Python会抛出异常。要处理Pyt…

孩子近视有必要用全光谱灯吗?全光谱led灯推荐

当然&#xff0c;有必要!全光谱LED灯的光源分布更加均匀&#xff0c;使空间更加美观舒适&#xff0c;而普通灯的光源分布可能会在一定范围内分布不均匀。全光谱它的使用寿命长达20-30万小时&#xff0c;而普通灯的使用寿命仅为1000-2000小时&#xff0c;因此在长期使用上&#…

list模拟

之前模拟了string,vector&#xff0c;再到现在的list&#xff0c;list的迭代器封装最让我影响深刻。本次模拟的list是双向带头节点的循环链表&#xff0c;该结构虽然看起来比较复杂&#xff0c;但是却非常有利于我们做删除节点的操作&#xff0c;结构图如下。 由于其节点结构特…

收发存和进销存有什么区别?

一、什么是收发存和进销存 1、收发存 收发存是供应链管理中的关键概念&#xff0c;用于描述企业在供应链中的物流和库存管理过程。 收发存代表了企业在采购、生产和销售过程中的物流活动和库存水平。 收&#xff08;Receiving&#xff09; 企业接收供应商送达的物料或产品…

归并排序算法

归并排序 算法说明与实现代码&#xff1a; 归并排序&#xff08;Merge Sort&#xff09;: 归并排序是一种分治算法&#xff0c;它将列表分成两个子列表&#xff0c;分别进行排序&#xff0c;然后将排序好的子列表合并成一个有序列表。 package mainimport "fmt"fu…

手机商城免费搭建之java商城 开源java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框…

微信小程序代码优化3个小技巧

抽取重复样式 样式复用 我们会发现很多时候在开发的过程中会存在多个页面中都用到了同样的样式&#xff0c;那么其实之前有提到过&#xff0c;公用样式可以放在app.wxss里面这样就可以直接复用。 如&#xff1a;flex布局的纵向排列&#xff0c;定义在app.wxss里面 .flex-co…

win10安装cygwin

参考 Cygwin简介及其下载安装卸载_cygwin是什么软件_徐晓康的博客的博客-CSDN博客https://blog.csdn.net/weixin_42837669/article/details/114381405这个文章写的非常好&#xff0c;不过现在如果想安装多个包的话&#xff0c;采用gui的方式可以不行了&#xff0c;我采用的方式…