前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记录 | 通过WireGuard实现异地组网

记录 | 通过WireGuard实现异地组网

原创
作者头像
Leo Deng
修改2024-07-23 07:44:21
830
修改2024-07-23 07:44:21

前言

由于我管理着几台不同地域,不同网络,网络类型并不相同( NAT端口转发 / 公网独立IP )的云服务器,以及我需要将家中的服务器的服务映射至公网以供其他人进行访问,所以我需要一个异地组网方案解决该问题。

网络环境

名称

网络类型

地域

家里网络

无公网IP

广州

服务器1

有公网IP(大带宽)

宁波

服务器2

有公网IP

香港

服务器3

有公网IP

香港

服务器4

NAT端口转发

宿迁

解决方案:WireGuard

为什么选择WireGuard

听说很好用,然后部署十分简单,此前用过OPENVPN,觉得部署稍微麻烦了一些,因此决定选择WireGuard进行异地组网,结果也是确实十分的好用,部署很快,很方便。

WireGuard是通过UDP进行通信的且具有不错的安全性。

服务端部署

服务端我选择部署在服务器1上,因为它是一个大带宽的机型,上下行对等300M足以应付我的日常需求

在服务器上安装相应的软件

服务器1 安装的是 Ubuntu 20.0.4 操作系统 通过 apt 直接安装wireguard即可

代码语言:bash
复制
sudo apt install wireguard

生成公钥与私钥并保存

WireGuard通过wg genkey 生产秘钥,然后在通过wg pubkey生成公钥。

代码语言:bash
复制
wg genkey > privatekey
wg pubkey < privatekey > publickey

开启内核IP转发

由于WireGuard是通过系统内核进行数据包转发的,因此你需要打开IPV4地址转发才能正常工作!!!

代码语言:bash
复制
echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
/etc/init.d/procps restart

撰写配置文件

切换进WireGuard目录下(/etc/wireguard),创建一个配置文件wg0.conf

代码语言:bash
复制
cd /etc/wireguard
vim wg0.conf

wg0.conf文件内容如下:

代码语言:bash
复制
[Interface]
# 本机密钥
PrivateKey = gAyQXM5w/b2vaWB3Dn84uZlFrsuUj7Gz+/doJYv07FY=
# 本机地址
Address = 172.20.20.1/24
# 监听端口
ListenPort = 57760
PostUp   = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens18 -j MASQUERADE

# 客户端配置
# Client-1-172.20.20.11
[Peer]
PublicKey = 客户端1公钥
AllowedIPs = 172.20.20.11/32

# Client-1-172.20.20.12
[Peer]
PublicKey = 客户端2公钥
AllowedIPs = 172.20.20.12/32

1.文件中的客户端公钥在稍后客户端配置时会获得,获得后需要填入对应位置 2.AllowedIPs 的地址 是分配给客户端的IP地址: 172.20.20.11/32

完成后按下esc 输入wq 保存文件

配置客户端配置

由于我是Windows客户端 因此 此处以windows客户端举例

安装Wireguard

在WireGuard官方网站(https://www.wireguard.com/install/)上可以直接找到对应系统的安装包

Windows安装包下载
Windows安装包下载

下载完成后,正常运行安装程序,即可安装成功,便不再赘述

创建客户端配置文件

WireGuard的配置文件是通用的,如果需要部署在Linux系统下 只需与服务端一样,使用aptyum 等工具 安装wireguard,并将配置文件放入对应位置,使用与服务端相同命令启动即可。

在隧道列表的左下角你可以看见新建隧道按钮,点击旁边的三角按钮展开,选择新建空隧道,点击即可创建新配置文件

新建空隧道
新建空隧道
创建新隧道配置文件
创建新隧道配置文件

在新隧道配置文件中你可以看到公钥(将他填入服务端的配置文件中)以及私钥。

以下,是一个客户端配置文件实例

代码语言:bash
复制
[Interface]
PrivateKey = 4Fg7VJJnvt3iZwu5bYrmeDZoAz3BD7y1hq0+jFACMmo=
# IP地址
Address = 172.20.20.26/24

[Peer]
PublicKey = hZyrKY1pQ+0Y45okw+IwTAOENA9pIhJ2dRJUubxCpDo=
# IP地址段
AllowedIPs = 172.20.20.0/24
# 对应的WireGuard服务器地址与端口
Endpoint = wg.********.top:57760
# 心跳频率
PersistentKeepalive = 25

配置完成后点击保存即可,至此服务端配置完成。其他客户端只需要对

启动与停止

在完成Wireguard安装、撰写配置文件完成后,我们可以通过命令启动我们的WireGuard

Linux系统

方式一:wg-quick命令
代码语言:bash
复制
# 启动
wg-quick up wg0
# 停止
wg-quick down wg0
方式二:systemctl 服务启动

此种方式有一个优势,可以实现开机自启动

代码语言:bash
复制
# 启动
systemctl start wg-quick@wg0
# 设置开机自启动
systemctl enable wg-quick@wg0
# 停止
systemctl stop wg-quick@wg0
# 关闭开机自启动
systemctl disable wg-quick@wg0
使用wg命令查看当前Wireguard链接情况
代码语言:bash
复制
wg
查看链接情况
查看链接情况
已被连接过的IP与未被启用的IP对比
已被连接过的IP与未被启用的IP对比

Windows系统

在windows系统下,您只需正确安装Wireguard的软件,将配置导入软件当中

WireGuard软件截图
WireGuard软件截图

点击右侧面板链接按钮,当看到状态为已连接,且下方的节点中的上次握手时间会自动刷新即为连接成功

连接成功的界面
连接成功的界面

检验链接情况

使用ping命令,测试连接情况

请务必确保测试的节点防火墙不会拦截ICMP数据包,否则将无法正常测试

PING通!
PING通!

如果可以正常ping通,即证明链路已建立,异地组网已完成。

Cheers!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 网络环境
    • 解决方案:WireGuard
      • 为什么选择WireGuard
        • 服务端部署
          • 在服务器上安装相应的软件
          • 生成公钥与私钥并保存
          • 开启内核IP转发
          • 撰写配置文件
        • 配置客户端配置
          • 安装Wireguard
          • 创建客户端配置文件
        • 启动与停止
          • Linux系统
          • Windows系统
        • 检验链接情况
        相关产品与服务
        弹性公网 IP
        弹性公网 IP(Elastic IP,EIP)是可以独立购买和持有,且在某个地域下固定不变的公网 IP 地址,可以与 CVM、NAT 网关、弹性网卡和高可用虚拟 IP 等云资源绑定,提供访问公网和被公网访问能力;还可与云资源的生命周期解耦合,单独进行操作;同时提供多种计费模式,您可以根据业务特点灵活选择,以降低公网成本。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档