ToB企服应用市场:ToB评测及商务社交产业平台

标题: WireGuard 组网教程:快速构建安全高效的私密网络并实现内网穿透 [打印本页]

作者: 笑看天下无敌手    时间: 2024-7-27 10:24
标题: WireGuard 组网教程:快速构建安全高效的私密网络并实现内网穿透
文章目录


1 引言

1.1 什么是WireGuard


官方先容如下:
   WireGuard ® 是一款极其简单但快速且现代的 VPN,接纳最先进的加密技术。它的目标是比 IPsec
更快、更简单、更精简、更有用,同时制止令人头疼的问题。它的性能远高于 OpenVPN。
  WireGuard 被设计为通用 VPN,可在嵌入式接口和超等计算机上运行,适合很多差异的情况。它最初针对 Linux
内核发布,现在已跨平台(Windows、macOS、BSD、iOS、Android)且可广泛部署。它目前正在大力开发中,但它可能已被视为业内最安全、最易于使用且最简单的
VPN 办理方案。
  我们可以用一句话概括它:
WGuard是一款可以组建假造私家局域网(VPN)的软件,允许用户通过公共网络(如互联网)安全地传输数据,同时保持数据的秘密性和完备性。
WireGuard有如下上风

1.2 WireGuard可以用来做什么

WireGuard支持多种平台,包括电脑、智能手机和路由器。这一特性使其成为构建假造私有网络(VPN)的抱负选择,能在这些设备上实现安全毗连。无论是用于远程工作、掩护数据隐私,还是绕过地理限制,WireGuard都能提供稳固且安全的网络毗连。
   内网穿透,即NAT(Network Address
Translator)穿透,是指计算机在内网(局域网)内使用私有IP地址,在毗连外网(互联网)时使用全局IP地址的技术
。该技术被广泛使用在有多台主机但只通过一个公有IP地址访问的私有网络中。
  举个例子:比如我在实验室设置了一个服务器 Server
A,当我在实验室的时候,就可以通过自己的条记本使用SSH毗连【因为我和服务器处于一个局域网
】,当我回宿舍以后,就没有办法直接使用SSH毗连了【因为我和服务器不在一个局域网
】,这个时候就需要进行NAT穿透,让我在宿舍也可以使用SSH毗连Server A。
    通过Wireguard可以将广域网上的主机毗连起来,形成一个局域网。只需要有一台具有固定公网IP的服务器,就可以将其作为我们搭建的局域网的中心节点,让其他的主机(不论是否有公网IP,不论是否在NAT内),都通过这个中心节点和彼此相连。由此就构建了一个中心辐射型的局域网,实现了内网穿透等功能。
   WireGuard还可用于Docker容器之间的通讯。在Docker环境中,容器之间的网络通讯是一个紧张的问题。WireGuard通过提供一种安全的通讯方式,能够在差异容器之间建立一个加密的网络毗连,从而保障数据的安全传输。这对于需要在差异容器间安全共享数据的应用尤为紧张。
1.3 WireGuard原理

[WireGuard源码地址](https://git.zx2c4.com/wireguard-
linux/tree/drivers/net/wireguard)
WireGuard 是一种在第 3 层(网络层)运行的安全网络隧道,与传统的 VPN 办理方案(如 IPsec 和
OpenVPN)相比,它的设计更安全、性能更高且更易于使用。它是作为 Linux 内核假造网络接口实现的,基于安全隧道的基本原理:将peer的公钥与隧道源
IP 地址关联。
相关术语:
   
  毗连到VPN 并为自己注册一个VPN子网地址(如 192.0.2.3)的主机。还可以通过使用逗号分隔的 CIDR 指定子网范围,为其自身地址以外的 IP
地址选择路由。
  
  一个公网可达的peer,可以将流量中继到 NAT 背面的其他peer。Bounce Server
并不是特殊的节点,它和其他peer一样,唯一的区别是它有公网 IP,并且开启了内核级别的 IP 转发,可以将 威屁恩 的流量转发到其他客户端。
  
  一组私有 IP,例如 192.0.2.1-255 或 192.168.1.1/24,一样寻常在 NAT 背面,例如办公室局域网或家庭网络。
  
  CIDR,即无类域间路由(Classless Inter-Domain Routing),是一种用于对IP地址进行灵活表现和分配的尺度。
  
  子网的私有 IP 地址由路由器提供,通过公网无法直接访问私有子网设备,需要通过 NAT 做网络地址转换。路由器会跟踪发出的毗连,并将相应转发到精确的内部
IP。
  
  节点的公网 IP 地址:端口,例如 123.124.125.126:1234,大概直接使用域名
some.domain.tld。如果peer节点不在同一子网中,那么节点的公开端点必须使用公网 IP 地址。
  
  单个节点的 WireGuard 私钥,生成方法是:wg genkey > example.key。
  
  单个节点的 WireGuard 公钥,生成方式为:wg pubkey < example.key > example.key.pub。
  
  域名服务器,用于将域名解析为 VPN 客户端的 IP,不让 DNS哀求走漏到 VPN 之外。
  重要功能和原理如下
   WireGuard 通过添加一个(或多个)网络接口来工作,例如 eth0 或 wlan0 ,称为 wg0 (或 wg1 、 wg2
、 wg3 等)。然后可以使用 ifconfig(8) 或 ip-address(8) 正常设置该网络接口,并使用 route(8) 或
ip-route(8) 添加和删除其路由,以及全部平常网络实用程序都是云云。接口的特定 WireGuard 方面使用 wg(8)
工具进行设置。该接口充当隧道接口。
  WireGuard 将隧道 IP 地址与公钥和远程端点相关联。当接口向peer发送数据包时,它会执行以下操纵:
      当接口收到数据包时,会发生以下情况:
      WireGuard 的核心是一个称为加密密钥路由的概念,它的工作原理是将公钥与隧道内允许的隧道 IP
地址列表相关联。每个网络接口都有一个私钥和一个peer点列表。每个peer都有一个公钥。公钥短小且简单,由peer用来相互验证。它们可以通过任何带外方法传递以在设置文件中使用,类似于将
SSH 公钥发送给朋友以访问 shell 服务器的方式。
  1.4 WireGuard安装

wireGuard官方安装教程
2 WireGuard组网实现内网穿透

2.1 前提条件

2.2 网络拓扑布局

![在这里插入图片形貌](https://img-
blog.csdnimg.cn/309f459892a54899b3b53d4006fc4b27.png#pic_center)
2.3 详细步骤

2.3.1 中继服务器设置

   wg genkey | tee server_privatekey | wg pubkey > server_publickey
  执行以上两条命令后,会在执行命令的当前文件夹主动生成2个文件:
  ![在这里插入图片形貌](https://img-
blog.csdnimg.cn/09cb8d9dbf0f42e1a8088e90f8805785.png#pic_center)
  
   sudo sysctl net.ipv4.ip_forward
  如果体现1则阐明已开启,否则则未开启。
  1. >     echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
  2. echo "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.conf
  3. sysctl -p /etc/sysctl.conf
复制代码

   我们可以通过ip addr命令查察到wg0网卡的状态
  ![在这里插入图片形貌](https://img-
blog.csdnimg.cn/c3daf3f5442a4627a44fb38f43c580f5.png#pic_center)
    可以看到网卡wg0 接口是已启用的,具有 IPv4 地址 192.168.71.1
  输入wg命令则可以看到设置信息,设置文件通常在/etc/wireguard/目录中
  ![在这里插入图片形貌](https://img-
blog.csdnimg.cn/5bcb8e8648f941fcad3f8ac45c7b7fe6.png#pic_center)
  有想继承尝试这种方式的可以看一下官方教程

   我们在/etc/wireguard目录中创建wg0.conf并编写设置,设置项请看2.4 设置项阐明
  1. >     [Interface]
  2. # 本机密钥
  3. PrivateKey = KIDTljv66CgVYBNlrSD13Au6qfUdIcFJkTBkuErhTEk=
  4. # 本机地址
  5. Address = 192.168.71.1/24
  6. # 监听端口
  7. ListenPort = 51820
  8. [Peer]
  9. # 对端的publickey
  10. PublicKey = iWy57DmR6wVXcVzMDOa2WyywO0WT5JRAGYIlh0v/nW8=
  11. # 对端地址
  12. AllowedIPs = 192.168.71.2/24
复制代码

2.3.2 其他peer

我这里只枚举MacOS的操纵方式(其他都同理,就是要设置私钥和公钥)
![在这里插入图片形貌](https://img-
blog.csdnimg.cn/3a68ea45a3c24f849bdd57f3c6f24aa0.png#pic_center)
操纵完之后,它会给出密钥对,我们只需要添加好其他信息即可。
![在这里插入图片形貌](https://img-
blog.csdnimg.cn/4deaa43478974f0fb045c14cb3cbba78.png#pic_center)
设置文件如下:
  1. [Interface]
  2. # 本机密钥
  3. PrivateKey = kDUqWzkbaB1EU5C2ADoId1TXtZF89xxn0VV45EcjFHs=
  4. # 本机地址
  5. Address = 192.168.71.2/24
  6. [Peer]
  7. # 对端公钥,即公网服务器公钥
  8. PublicKey = bEm1p736FQySfKlTTUCeHmiwTmna5umZWOWLGWqioSk=
  9. # 允许此对等方的传入流量并指定传出流量的目标。
  10. AllowedIPs = 192.168.71.0/24
  11. # 公网IP+监听端口号
  12. Endpoint = 1.1.1.1:51820
  13. PersistentKeepalive = 25
复制代码
2.3.3 测试

MacOS端:
![image-20231115221940900](https://img-
blog.csdnimg.cn/img_convert/b17dd7eae49612c99a9d7ae3390b9a25.png)
服务器Ping 主机:
![image-20231115222015045](https://img-
blog.csdnimg.cn/img_convert/81e4b4f2024e261779f4b01ebe7d1ef8.png)
2.4 WireGuard设置文件阐明


下面是一个简单的设置文件示例:
  1. [Interface]
  2. PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
  3. ListenPort = 51820
  4. [Peer]
  5. PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
  6. Endpoint = 192.95.5.67:1234
  7. AllowedIPs = 10.192.122.3/32, 10.192.124.1/24
  8. [Peer]
  9. PublicKey = TrMvSoP4jYQlY6RIzBgbssQqY3vxI2Pi+y71lOWWXX0=
  10. Endpoint = [2607:5300:60:6b0::c05f:543]:2468
  11. AllowedIPs = 10.192.122.4/32, 192.168.0.0/16
  12. [Peer]
  13. PublicKey = gN65BkIKy1eCE9pP1wdc8ROUtkHLF2PfAqYdyYBz6EA=
  14. Endpoint = test.wireguard.com:18981
  15. AllowedIPs = 10.10.10.230/32
复制代码
3 WireGuard工具

3.1 wg-easy

github地址
这是一个用于管理 WireGuard 设置的 Web 用户界面。使用它之前我们得先安装docker和docker-compose。这里我给出docker- compose.yml设置文件示例。另有很多设置项可在堆栈中找到,灵活设置VPN
  1. version: '3'
  2. services:
  3.   wg-easy:
  4.     image: weejewel/wg-easy
  5.     container_name: wg-easy
  6.     environment:
  7.       - WG_HOST=YOUR_SERVER_IP # 公网IP
  8.       - PASSWORD=YOUR_ADMIN_PASSWORD # Web UI登录密码
  9.       - WG_PORT=51820 # 监听端口
  10.       - WG_PERSISTENT_KEEPALIVE=25 # 保持“连接”打开的值(以秒为单位)
  11.       - WG_DEFAULT_ADDRESS=192.168.71.0 # 客户端 IP 地址范围
  12.       - WG_ALLOWED_IPS=192.168.71.0/24 # 客户端将使用的允许 IP
  13.     volumes:
  14.       - ~/.wg-easy:/etc/wireguard
  15.     ports:
  16.       - 51820:51820/udp
  17.       - 51821:51821/tcp
  18.     cap_add:
  19.       - NET_ADMIN
  20.       - SYS_MODULE
  21.     sysctls:
  22.       - net.ipv4.conf.all.src_valid_mark=1
  23.       - net.ipv4.ip_forward=1
  24.     restart: unless-stopped
复制代码
通过docker compose up -d部署好后,我们进入Web界面即可添加Client。![在这里插入图片形貌](https://img-
blog.csdnimg.cn/221f67f259654885a7371fcf64aca96a.png#pic_center)
这里,我们只需要将这三个设置文件分给对应的Client的即可完成网络搭建,特殊方便!
3.2 wg-gen-web

wg-gen-web
跟wg-easy类似,不过功能更强大。
![在这里插入图片形貌](https://img-
blog.csdnimg.cn/d34be038c98b474982ce8a1adec21c84.png#pic_center)
3.3 dsnet

github地址
一款用于管理集中式wireguard VPN 的FAST 命令。
![dsnet add](https://img-
blog.csdnimg.cn/img_convert/9791b4a64718a7a081dfc324e14a556e.png)
[官网设置教程](https://calbryant.uk/blog/how-to-set-up-a-wireguard-vpn-in-minutes-
with-dsnet/)
接下来我将给各位同学分别一张学习计划表!
学习计划

那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零底子应该从什么开始学起:
阶段一:低级网络安全工程师

接下来我将给大家安排一个为期1个月的网络安全低级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;此中,如果你等保模块学的好,还可以从事等保工程师。
综合薪资区间6k~15k
1、网络安全理论知识(2天)
①了解行业相关背景,远景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常紧张)
2、渗透测试底子(1周)
①渗透测试的流程、分类、尺度
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③毛病扫描、毛病利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦探
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
3、操纵系统底子(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操纵系统安全(系统入侵排查/系统加固底子)
4、计算机网络底子(1周)
①计算机网络底子、协媾和架构
②网络通讯原理、OSI模子、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web毛病原理与防御:主动/被动攻击、DDOS攻击、CVE毛病复现
5、数据库底子操纵(2天)
①数据库底子
②SQL语言底子
③数据库安全加固
6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web毛病扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?
阶段二:中级or高级网络安全工程师(看自己能力)

综合薪资区间15k~30k
7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在现实的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足现实需求的时候,往往需要对现有工具进行扩展,大概编写符合我们要求的工具、主动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。
零底子入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE猛烈推荐Sublime;
Python编程学习,学习内容包罗:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完
用Python编写毛病的exp,然后写一个简单的网络爬虫
PHP基本语法学习并誊写一个简单的博客系统
熟悉MVC架构,并试着学习一个PHP框架大概Python框架 (可选)
了解Bootstrap的布局大概CSS。
阶段三:顶级网络安全工程师

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4