WireGuard 组网教程:快速构建安全高效的私密网络并实现内网穿透_wire guard

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

WireGuard 通过添加一个(或多个)网络接口来工作,例如 eth0wlan0 ,称为 wg0 (或 wg1wg2wg3 等)。然后可以使用 ifconfig(8)ip-address(8) 正常配置该网络接口,并使用 route(8)ip-route(8) 添加和删除其路由,以及所有普通网络实用程序都是如此。接口的特定 WireGuard 方面使用 wg(8) 工具进行配置。该接口充当隧道接口。

WireGuard 将隧道 IP 地址与公钥和远程端点相关联。当接口向peer发送数据包时,它会执行以下操作:

  1. 该数据包适用于 192.168.30.8。那是哪位peer啊?让我看看…好吧,这是给peer ABCDEFGH 的。 (或者,如果它不适合任何已配置的peer,则丢弃该数据包。)
  2. 使用peer ABCDEFGH 的公钥加密整个 IP 数据包。
  3. Peer ABCDEFGH 的远程端点是什么?让我看看…好的,端点是主机 216.58.211.110 上的 UDP 端口 53133。
  4. 使用 UDP 通过 Internet 将步骤 2 中的加密字节发送到 216.58.211.110:53133。

当接口收到数据包时,会发生以下情况:

  1. 我刚刚从主机 98.139.183.24 上的 UDP 端口 7361 收到一个数据包。让我们来解密吧!
  2. 它为peer LMNOPQRS 正确解密和验证。好的,让我们记住,peer LMNOPQRS 的最新 Internet 端点是使用 UDP 的 98.139.183.24:7361。
  3. 解密后,明文数据包来自 192.168.43.89。是否允许peer LMNOPQRS 以 192.168.43.89 向我们发送数据包?
  4. 如果是,则在接口上接受数据包。如果没有,就放弃它。

WireGuard 的核心是一个称为加密密钥路由的概念,它的工作原理是将公钥与隧道内允许的隧道 IP 地址列表相关联。每个网络接口都有一个私钥和一个peer点列表。每个peer都有一个公钥。公钥短小且简单,由peer用来相互验证。它们可以通过任何带外方法传递以在配置文件中使用,类似于将 SSH 公钥发送给朋友以访问 shell 服务器的方式。

1.4 WireGuard安装

wireGuard官方安装教程

2 WireGuard组网实现内网穿透

2.1 前提条件

  1. 公网服务器: 必须拥有一台具有公网IP地址的服务器,这是内网穿透的关键。该服务器充当中转站,负责将外部请求传递到内部网络。
  2. 网络设备配置权限: 需要对内部网络的路由器或防火墙有一定的配置权限,以便进行端口映射或其他必要的网络设置。这确保了从公网服务器到内网的连接是有效的。
  3. 安装WireGuard: 在公网服务器和内网设备上都需要安装和配置WireGuard软件。确保两端的WireGuard配置一致,包括公私钥的生成和网络接口的配置。
  4. 开启相应端口: 在公网服务器的防火墙配置中,需要打开WireGuard所使用的端口(默认是51820/UDP),以确保能够接收来自内网设备的连接请求。
  5. 合适的网络拓扑: 确保了解内部网络的拓扑结构,以便正确设置WireGuard配置,包括允许流量通过的子网、路由等。

2.2 网络拓扑结构

在这里插入图片描述

2.3 具体步骤

2.3.1 中继服务器配置
  1. 创建密钥对

wg genkey | tee server_privatekey | wg pubkey > server_publickey

执行以上两条命令后,会在执行命令的当前文件夹自动生成2个文件:

在这里插入图片描述

  • 开启IP地址转发

sudo sysctl net.ipv4.ip_forward

如果显示1则说明已开启,否则则未开启。

echo "net.ipv4.ip\_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.proxy\_arp = 1" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf

  • 设置IP地址伪装
# 允许防火墙伪装IP
firewall-cmd --add-masquerade
# 检查是否允许伪装IP
firewall-cmd --query-masquerade
# 禁止防火墙伪装IP
firewall-cmd --remove-masquerade

  • 配置wireguard虚拟网卡(不推荐,只是让读者直观了解过程)
sudo ip link add wg0 type wireguard # 添加一块叫 wg0 的虚拟 wireguard 网卡
sudo ip addr add 192.168.71.1/24 dev wg0 # 给 wg0 网卡添加 ip 地址 192.168.71.1,子网掩码 255.255.255.0
sudo wg set wg0 private-key ./server-privatekey # wireguard 设置密钥
sudo ip link set wg0 up # 启用刚刚添加的网卡

我们可以通过ip addr命令查看到wg0网卡的状态

在这里插入图片描述

可以看到网卡wg0 接口是已启用的,具有 IPv4 地址 192.168.71.1

输入wg命令则可以看到配置信息,配置文件通常在/etc/wireguard/目录中

在这里插入图片描述

有想继续尝试这种方式的可以看一下官方教程

  • 编写配置文件配置网卡(推荐,应该wg set命令需要提供很多参数,很容易出错)

我们在/etc/wireguard目录中创建wg0.conf并编写配置,配置项请看2.4 配置项说明

[Interface]
# 本机密钥
PrivateKey = KIDTljv66CgVYBNlrSD13Au6qfUdIcFJkTBkuErhTEk=
# 本机地址
Address = 192.168.71.1/24
# 监听端口
ListenPort = 51820

[Peer]
# 对端的publickey
PublicKey = iWy57DmR6wVXcVzMDOa2WyywO0WT5JRAGYIlh0v/nW8=
# 对端地址
AllowedIPs = 192.168.71.2/24

  • 重新启动网卡
sudo wg-quick down wg0
sudo wg-quick up wg0

2.3.2 其他peer

我这里只列举MacOS的操作方式(其他都同理,就是要配置私钥和公钥)

在这里插入图片描述

操作完之后,它会给出密钥对,我们只需要添加好其他信息即可。

在这里插入图片描述

配置文件如下:

[Interface]
# 本机密钥
PrivateKey = kDUqWzkbaB1EU5C2ADoId1TXtZF89xxn0VV45EcjFHs=
# 本机地址
Address = 192.168.71.2/24

[Peer]
# 对端公钥,即公网服务器公钥
PublicKey = bEm1p736FQySfKlTTUCeHmiwTmna5umZWOWLGWqioSk=
# 允许此对等方的传入流量并指定传出流量的目标。
AllowedIPs = 192.168.71.0/24
# 公网IP+监听端口号
Endpoint = 1.1.1.1:51820
PersistentKeepalive = 25

2.3.3 测试

MacOS端:

image-20231115221940900

服务器Ping 主机:

image-20231115222015045

2.4 WireGuard配置文件说明

  • interface部分
    • PrivateKey: 由 wg genkey 生成的 Base64 编码的私钥。必须配置。
    • ListenPort: 用于监听的 16 位端口。可选,如果未指定,则随机选择端口。
    • DNS: 指定 DNS 服务器的 IP 地址。
    • FwMark: 用于传出数据包的 32 位 fwmark。如果设置为 0 或 “off”,则禁用此选项。可选。可以以十六进制形式指定,例如,以 “0x” 开头。可选。
  • Peer 部分:
    • PublicKey: 由 wg pubkey 根据私钥计算的 Base64 编码的公钥。必须配置。
    • PresharedKey: 由 wg genpsk 生成的 Base64 编码的预共享密钥。可选,可以省略。此选项为现有的公钥加密提供了额外的对称密钥加密层,以增强对抗后量子计算的能力。
    • AllowedIPs: 逗号分隔的 IP 地址(IPv4 或 IPv6)列表,带有 CIDR 掩码,用于允许此对等方的传入流量并指定传出流量的目标。可以多次指定。可用 0.0.0.0/0 匹配所有 IPv4 地址,使用 ::/0 匹配所有 IPv6 地址。
    • Endpoint: 一个 IP 地址或主机名,后跟冒号,然后是一个端口号。此端点将自动更新为来自对等方的正确经过身份验证的数据包的最新源 IP 地址和端口。可选。
    • PersistentKeepalive: 保持活跃的时间间隔,介于 1 和 65535 之间,表示多久发送一次对等方的身份验证空数据包,以保持有状态的防火墙或 NAT 映射的有效性。如果设置为 0 或 “off”,则禁用此选项。可选,默认情况下此选项被禁用。

下面是一个简单的配置文件示例:

[Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
ListenPort = 51820

[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
Endpoint = 192.95.5.67:1234
AllowedIPs = 10.192.122.3/32, 10.192.124.1/24

[Peer]
PublicKey = TrMvSoP4jYQlY6RIzBgbssQqY3vxI2Pi+y71lOWWXX0=
Endpoint = [2607:5300:60:6b0::c05f:543]:2468
AllowedIPs = 10.192.122.4/32, 192.168.0.0/16

[Peer]
PublicKey = gN65BkIKy1eCE9pP1wdc8ROUtkHLF2PfAqYdyYBz6EA=
Endpoint = test.wireguard.com:18981
AllowedIPs = 10.10.10.230/32

3 WireGuard工具

3.1 wg-easy

github地址

这是一个用于管理 WireGuard 设置的 Web 用户界面。使用它之前我们得先安装docker和docker-compose。这里我给出docker-compose.yml配置文件示例。还有很多配置项可在仓库中找到,灵活配置VPN

version: '3'
services:
  wg-easy:
    image: weejewel/wg-easy
    container\_name: wg-easy
    environment:
      - WG_HOST=YOUR_SERVER_IP # 公网IP
      - PASSWORD=YOUR_ADMIN_PASSWORD # Web UI登录密码
      - WG_PORT=51820 # 监听端口
      - WG_PERSISTENT_KEEPALIVE=25 # 保持“连接”打开的值(以秒为单位)
      - WG_DEFAULT_ADDRESS=192.168.71.0 # 客户端 IP 地址范围
      - WG_ALLOWED_IPS=192.168.71.0/24 # 客户端将使用的允许 IP
    volumes:
      - ~/.wg-easy:/etc/wireguard
    ports:
      - 51820:51820/udp
      - 51821:51821/tcp


### 给大家的福利


**零基础入门**


对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


![](https://img-blog.csdnimg.cn/img_convert/95608e9062782d28f4f04f821405d99a.png)


同时每个成长路线对应的板块都有配套的视频提供:


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a91b9e8100834e9291cfcf1695d8cd42.png#pic_center)


因篇幅有限,仅展示部分资料

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值