基于WireGuard实现的异地组网
前言
欢迎来到我的小破站,这应该是我在小站上写的第一篇文章,我先来介绍下我为什么想要搭建一个博客:首先就是因为我平时喜欢瞎折腾,像什么软路由啊、黑苹果啊、什么什么奇淫技巧啊等等等等,即便是当时查阅了很多资料,也只是当时会了而已,时间一长,就又给忘了,而我又不是经常记笔记;说到笔记,还有一个原因就是我用的笔记软件比较分散,像小米的记事本、苹果的记事本、印象笔记、Notion等等都有使用过,总感觉差点意思,于是就想自己搭一个个人博客,用来记录一下自己的笔记,当然,如果我的笔记也能够帮助到更多的人,那这笔记也没白积累哈。在以后的工作中,还是在自己的折腾中,都会将我遇到的问题及一些经验记录在这里,欢迎大家围观。
这篇文章我就记录一下我个人的网络配置,我的需求不一定适合所有人,也可能说的不是特别详细,但重要的还是提供一个思路,有思路了剩下的都好办了,另外异地组网也是我搭建本博客的一个前提条件。
搭建需求
我的网络使用场景大致可以划分为:家、出租房、公司,外加一个阿里云服务器。目前我的需求是将以上几个环境的网络进行异地组网,不同内网环境下的设备可以互相访问。阿里云服务器只要能访问到出租房搭建的服务就可以。
环境准备
网络环境:公网IP
软件:WireGuard
硬件:可以安装WireGuard的设备,这里我的设备是OpenWrt和爱快
环境介绍
公网ip:这个是前提条件,没有公网ip,那也折腾不了这些,目前老家有一条电信动态公网的光纤,配合爱快的动态域名解析,可以实现域名+端口访问。目前来说IPv4的公网比较难申请,我也是扯皮了一段时间才搞到手的,据说IPv6自带公网,但还没有折腾过,先挖个坑。
WireGuard:这个才是本次的主角,实现原理没有深挖太多,大概理解就是基于UDP协议、端到端、轻量的异地组网工具。配置ip就相当于是修改了本地的路由,指定数据包走哪一条线,简单总结就是打洞。
OpenWrt:用于安装WireGuard,实际可玩的东西非常多。
爱快:我的网络是动态公网,所以需要做动态域名绑定,实际还加了一个端口转发。
网络拓扑
不是专业的,网络拓扑大概就长这个鸟样子
大概操作流程是先在老家内网的OpenWrt上搭建一个WireGuard作为服务端,经由爱快的端口映射将wireguard服务端口暴露在公网,再将出租房内的OpenWrt和公司电脑作为客户端去连接服务端,这样就达到了异地组网的效果,最后再配置OpenWrt的转发,将数据包转发到各自的内网环境中,这样就可以实现在公司直接访问到两个内网中的设备;
另一组的组网是将阿里云服务器作为服务端,出租房内的OpenWrt作为客户端进行异地组网,我只需要阿里云服务器能访问到内网中的Server设备即可,我实际部署的项目就在我本地的这台设备上,阿里云服务器只做了个反代。
配置组网一
配置爱快
添加动态域名
配置端口转发到WireGuard
OpenWrt安装WireGuard
opkg update
opkg install wireguard
配置WireGuard
配置OpenWrt的WireGuard服务端
添加新接口
服务端配置
添加对端(客户端)配置
公钥和秘钥是在客户端生成的一对儿秘钥(私钥可以不配)
预共享秘钥配不配都可以,如果配置预共享秘钥则在客户端服务端都需要添加相同的秘钥
允许的ip是指路由哪些ip或ip段,相当于路与表,这里添加的是对端的内网网段和wireguard网段
配置OpenWrt的WireGuard客户端
添加基本配置
私钥和公钥是客户端生成的一对儿秘钥
监听端口随意,因为它不是被连接方,无所谓
ip地址:我的理解是当前客户端在wireguard内网中的ip地址。因为我这台OpenWrt要添加两个组网,所以添加了两个ip。
添加对端
公钥是服务端生成的公钥
预共享秘钥与服务端填写相同
允许的IP:可以理解为一个路由表,将那些ip或ip段路由到wireguard
端点主机、端点端口即是服务端的地址和端口
配置Windows的WireGuard客户端
[Interface]
PrivateKey = 客户端生成的私钥
Address = 当前客户端在wireguard内网中的地址
[Peer]
PublicKey = 服务端公钥
PresharedKey = 预共享秘钥
AllowedIPs = 允许路由的地址
Endpoint = 服务端地址:端口
配置内网转发
配置服务端和客户端的内网转发
允许将wireguard接口的流量转发到内网及内网中的流量转发到wireguard
开启从内网到wireguard的ip动态伪装
配置组网二
Ubuntu安装WireGuard
sudo apt update
sudo apt install wireguard
配置WireGuard
配置Ubuntu的WireGuard服务端
生成秘钥对
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
编辑配置文件
sudo vim /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.20.1/32
ListenPort = 服务端wireguard端口
PrivateKey = 服务端生成的私钥
[Peer]
PublicKey = 客户端的公钥
PresharedKey = 预共享秘钥
AllowedIPs = 允许路由的ip或网段
Endpoint = 171.11.3.117:20009 #配的对不对都行
PersistentKeepalive = 25
启用WireGuard接口
sudo wg-quick up wg0
增加开机启动
sudo systemctl enable wg-quick@wg0
配置OpenWrt的WireGuard客户端
略(懒+没必要)配置方式与上面的客户端配置流程相同
配置OpenWrt内网转发
上面已经配置过了.....