部署一台具有公网通讯能力的服务器,开发或运维通过这台服务器的远程登陆功能,远程登陆该服务器然后与处于内网的服务器进行通讯或作业,那么这台服务器一般称为"跳板机"。
安装
目前开源免费的VPN比较多,最受欢迎且比较成熟的是OpenVPN,WireGuard是目前也流行的较新的开源VPN,简单易用,安全,高性能。我们目前选择WireGuard部署到Centos7.9系统上面,官网上面快速安装有市场几乎各种常用操作系统的安装方式,可以自行去查看,Centos7目前有三种安装方式,这里使用ELRepo仓库进行安装
sudo yum install epel-release elrepo-release
sudo yum install yum-plugin-elrepo
sudo yum install kmod-wireguard wireguard-tools
创建服务端公钥私钥
WireGuard服务端和客户端双方都必须创建各自的公钥私钥,服务端使用自己私钥和客户端的公钥进行部署,客户端使用自己的私钥和服务端的公钥进行部署,也就是双方交换公钥。每新增一个客户端都需要双方生成公私钥进行部署后连接。WireGuard安装成功之后默认配置路径是:/etc/wireguard
#转到默认配置文件夹
cd /etc/wireguard
#配置权限
umask 077
#生成私钥
wg genkey > private.key
#使用私钥生成公钥
wg pubkey < private.key > public.pub
编辑WireGuard配置文件
#在/etc/wireguard
vi wg0.conf
在/etc/wireguard目录中编辑最精简的配置文件wg0.conf,输入如下内容:
[Interface]
[Peer]
# 服务端
[Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
Address = 10.0.0.1
ListenPort = 51820
#客户端
[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
AllowedIPs = 10.0.0.2/32
在官网下载windows客户端安装成功之后,双击运行客户端,新建链接的时候客户端就会自动生成公钥私钥,我们需要将公钥复制至上面的服务端配置文件中客户端“PublicKey”的位置。
我们需要稍稍修改这个客户端的文件才可以正常运行,此时攻受易型:
[Interface]区域是客户端信息,新增一个IP字段就可以了
[Peer]区域应该填写服务端的信息
此时双方配置已经完成,启动服务端和客户端就可以彼此连接上。服务端启动命令:
#开机自动启动
sudo systemctl enable wg-quick@wg0
#启动
sudo systemctl start wg-quick@wg0
#状态
sudo systemctl status wg-quick@wg0
#暂停
sudo systemctl stop wg-quick@wg0
在客户端测试网域是否互通
此时客户端与跳板机己经成功连接在一起,双方现在处于专用网络通道。
虽然本地电脑与跳板机处于同一虚拟网段,但是并没有与服务器内网其它服务器处于同一个网段,此时在本地电脑连接服务器内网其它计算机是无法连接通,所幸的是跳板机与这些内网计算机是处于另一个共同网段,所以设置流量转发就可以实现内网互联的需求。
#开启服务器转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
#查看修改结果
sysctl -p
服务端配置了转发,我们可以通过ip addr命令查看服务器网卡信息,你会发现有多张网卡存在(同时包括wireguard的虚拟网卡),所以我们还需要配置NAT转换规则进行网络地址转换。
#增加转换规则(ens32 代表你的内网网卡,自己查询后替换成你的网卡名称)
iptables -t nat -A POSTROUTING -o ens32 -j MASQUERADE
#删除转换规则(ens32 代表你的内网网卡,自己查询后替换成你的网卡名称)
iptables -t nat -D POSTROUTING -o ens32 -j MASQUERADE
当然如果怕麻烦,我们可以在WireGuard的配置文件利用PostUp和PostDown命令,自动帮我们添加或删除NAT规则。
PostUp:在WireGuard接口启动后执行的命令。
PostUp:在WireGuard接口启动后执行的命令。
使用命令编辑文件: vi /etc/wireguard/wg0.conf
# 服务端
[Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
Address = 10.0.0.1
ListenPort = 51820
PostUp = iptables -t nat -A POSTROUTING -o ens32 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o ens32 -j MASQUERADE
#客户端
[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
AllowedIPs = 10.0.0.2/32
如果没有使用云商的防火墙,那么主机自带的防火墙就必需开启,所以PostUp和PostDown命令中也应该加入防火墙端口放开命令,这里就不写了。
此时使用本地Xshell或者Windows远程登陆工具,就可以直接连接内网的各个服务器啦~