博主介绍:大家好,我是芝士味的椒盐,一名在校大学生,热爱分享知识,很高兴在这里认识大家
擅长领域:Java、大数据、运维、电子
如果本文章各位小伙伴们有帮助的话,关注+点赞+评论+收藏,相应的有空了我也会回访,互助!!!
另本人水平有限,旨在创作简单易懂的文章,在文章描述时如有错,恳请各位大佬指正,在此感谢!!!
目录
缘由
简介
官网
WireGuard组网实现架构图
下面用WireGuard演示一台公网服务器和一台线下机器异步组网:
相信很多的工作者、极客玩家或者学生党在项目开发以及发布的时候会遇到云上服务器资源不够(包括内存不够、磁盘不够等等),而我们可能由于一些问题,无法升级云服务器的配置,这样的场景就很尴尬对吧?现在的确有许多的像netapp、以及zerotier这样的内网穿透的存在,但是存在一个问题就是不安全,路由网关并不是在我们自己机器上,而且这些市面的望穿也有高效的方法但是要用money,苦于囊中羞涩,这时候WireGuard就可以很好提供高性能的内网穿透能力。
举个例子:你是个学生或者工作者,在你的实验室或者公司电脑上,有着项目或者资料,你有又出门在外,想要访问实验室或者公司内部的资料,虽然像向日葵、ToDesk可以满足需求,但是由于是第三方提供着提供有带宽的限制,会导致一卡一卡的,这时候你就可以使用Windows或者Linux自带的远程服务搭配上WireGuard解决这种尴尬的场面。
WireGuard 是一个易于配置、快速且安全的开源 VPN,它利用了最新的加密技术。目的是提供一种更快、更简单、更精简的通用 VPN,它可以轻松地在树莓派这类低端设备到高端服务器上部署。他没有像OpenVPN那样10w的代码量,WireGuard非常精简只有4000行代码。
地址:https://www.wireguard.com/quickstart/
WireGuard Server(一台公网服务器):
更新update
yum update -y
安装wireguard
sudo yum install epel-release elrepo-release -y
sudo yum install yum-plugin-elrepo -y
sudo yum install kmod-wireguard wireguard-tools -y
创建目录
cd /etc/wireguard
生成密钥对
# 开始生成 密匙对(公匙+私匙)。
wg genkey | tee privatekey-server | wg pubkey > publickey-server # 生成服务端密钥对
配置服务端文件
vim /etc/wireguard/wg0.conf
输入以下内容
[Interface]
Address = 10.100.0.1/16 # 这里指的是使用 10.100.0.1,网段大小是 16 位
SaveConfig = true
ListenPort = 51820 # 监听的 UDP 端口
PrivateKey = < 这里填写 Server 上 privatekey 的内容 >
# 下面这两行规则允许访问服务器的内网,注意替换`eth0`
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# Client,可以有很多 Peer
[Peer]
PublicKey = < 这里填写 Client 上 publickey 的内容 >
AllowedIPs = 10.100.0.2/32 # 这个 Peer 只能是 10.100.0.2/32
# 如果想把所有流量都通过服务器的话,这样配置:
# AllowedIPs = 0.0.0.0/0, ::/0
开启内核转法
firewall-cmd --add-masquerade --zone=public --permanent
firewall-cmd --reload
sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
启停服务端
wg-quick up wg0 #启动服务端
wg-quick down wg0 #停止服务端
wg #查看节点列表
wg syncconf wg0 <(wg-quick strip wg0) #重载配置文件,不影响已有连接.
WireGuard Client(N台非公网服务器):
更新update
yum update -y
安装wireguard
sudo yum install epel-release elrepo-release -y
sudo yum install yum-plugin-elrepo -y
sudo yum install kmod-wireguard wireguard-tools -y
创建目录
cd /etc/wireguard
生成密钥对
# 开始生成 密匙对(公匙+私匙)。
wg genkey | tee privatekey-client | wg pubkey > publickey-client # 生成客户端密钥对
开启内核转发
firewall-cmd --add-masquerade --zone=public --permanent
firewall-cmd --reload
sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
配置客户端文件
[Interface]
PrivateKey = < 这里填写 Client 上 privatekey 的内容 >
Address = 10.100.0.2/32
DNS = 8.8.8.8 # 连接后使用的 DNS, 如果要防止 DNS 泄露,建议使用内网的 DNS 服务器
[Peer]
PublicKey = < 这里填写 Server 上 publickey 的内容 >
Endpoint = 1.1.1.1:51820 # 服务端公网暴露地址,51280 是上面指定的
AllowedIPs = 10.100.0.0/16,172.17.0.11/20 # 指定要访问的服务端网段,或者设置0.0.0.0/0来进行全局代理.
PersistentKeepalive = 25
启动客户端连接
wg-quick up ./wg0.conf
启动完客户端之后回WireGuard服务端查看,也可以尝试从客户端pingWireGuard服务器(内网地址),注意公网作为WireGuard的服务器要安全组开端口
wg