前言
由于我管理着几台不同地域,不同网络,网络类型并不相同( 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即可
sudo apt install wireguard
生成公钥与私钥并保存
WireGuard通过wg genkey
生产秘钥,然后在通过wg pubkey
生成公钥。
wg genkey > privatekey
wg pubkey < privatekey > publickey
开启内核IP转发
由于WireGuard是通过系统内核进行数据包转发的,因此你需要打开IPV4地址转发才能正常工作!!!
echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
/etc/init.d/procps restart
撰写配置文件
切换进WireGuard目录下(/etc/wireguard),创建一个配置文件wg0.conf
cd /etc/wireguard
vim wg0.conf
wg0.conf文件内容如下:
[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/)上可以直接找到对应系统的安装包
下载完成后,正常运行安装程序,即可安装成功,便不再赘述
创建客户端配置文件
WireGuard的配置文件是通用的,如果需要部署在Linux系统下 只需与服务端一样,使用
apt
或yum
等工具 安装wireguard,并将配置文件放入对应位置,使用与服务端相同命令启动即可。
在隧道列表的左下角你可以看见新建隧道
按钮,点击旁边的三角按钮展开,选择新建空隧道
,点击即可创建新配置文件
在新隧道配置文件中你可以看到公钥
(将他填入服务端的配置文件中)以及私钥。
以下,是一个客户端配置文件实例
[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命令
# 启动
wg-quick up wg0
# 停止
wg-quick down wg0
方式二:systemctl 服务启动
此种方式有一个优势,可以实现开机自启动
# 启动
systemctl start wg-quick@wg0
# 设置开机自启动
systemctl enable wg-quick@wg0
# 停止
systemctl stop wg-quick@wg0
# 关闭开机自启动
systemctl disable wg-quick@wg0
使用wg命令查看当前Wireguard链接情况
wg
Windows系统
在windows系统下,您只需正确安装Wireguard的软件,将配置导入软件当中
点击右侧面板
的链接
按钮,当看到状态为已连接
,且下方的节点
中的上次握手时间会自动刷新
即为连接成功
检验链接情况
使用ping
命令,测试连接情况
请务必确保测试的节点防火墙不会拦截ICMP数据包,否则将无法正常测试
如果可以正常ping通,即证明链路已建立,异地组网已完成。
Cheers!