图解把云服务器和办公环境服务器组成局域网

最近单位迭代一个平台,功能跟微信公众号有关联,要开发API接口受理微信调用。平台测试服务器在内网,一开始我觉得这事很容易,在单位路由器上做虚拟服务器就行了。没想到试了好几次都不成功,找运营商技术支持一问才知道,我们用的是5G上网,运营商不给开放访问端口,我也真是醉了。
后来想到:测试服务器能上公网,单位也有云服务器,如果把两者通过VPN组成一个局域网,然后在云服务器上用iptables把端口指向到测试服务器,应该就能解决问题了。

具体连接方式如下图:

确定方案之后就开始搭建VPN服务器,我使用的是开源的OpenVPN服务。首先要制作证书,从 https://github.com/OpenVPN/easy-rsa/tree/release/2.x 可以下载证书制作工具,下载后是easy-rsa-release-2.x.zip。把easy-rsa-release-2.x.zip解压缩之后上传到VPN服务器/root目录。如下图:

进入/root/easy-rsa-release-2.x/easy-rsa/2.0/,咱们制作证书的所有命令都在这个目录里。如下图:

在目录里有vars文件,可以配置制作证书的参数。编辑这个文件 vim vars ,咱们只要调整下面这些配置的值就可以了。

export KEY_COUNTRY="CN"

export KEY_PROVINCE="BeiJing"

export KEY_CITY="HaiDian"

export KEY_ORG="XXXXXX"

export KEY_EMAIL="[email protected]"

export KEY_OU="Beijing XXXXXXX Technology Co.,Ltd."

其他的都不用修改。如下图:

vars改好之后保存,执行 source vars 使vars配置生效。如下图:

下面执行 ./clean-all 命令,执行后系统会在当前目录下自动创建一个keys目录,用来存放咱们生成的证书、私钥、连接文件等。如下图:

接下来开始生成根证书和密钥,执行 ./build-ca 命令。因为咱们之前已经在vars文件里把参数都配置好了,所以现在一直按回车就可以。如下图:

执行完成后,在keys目录下会生成根证书文件ca.crt和跟密钥文件ca.key。目录下的其他文件暂时用不上,忽略就行。如下图:

下面生成服务端证书和密钥,执行 ./build-key-server server 命令,命令中后面红色的server是服务端密钥的名称,可以根据自己的情况随意起名。执行命令后一路回车,遇到[y/n]就直接y。如下图:

执行完成后可以看到,keys目录下多了服务端证书文件server.crt、服务端私钥文件server.key和服务端请求文件server.csr。如下图:

下一步咱们制作客户端证书和密钥,执行 ./build-key client 命令。命令中后面红色的client是客户端密钥的名称,可以根据自己的情况随意起名。执行命令后一路回车,遇到[y/n]就直接y。如下图:

执行完成后可以看到,keys目录下多了客户端证书文件client.crt、客户端私钥文件client.key和客户端请求文件client.csr。如下图:

下面制作密钥交换文件,执行 ./build-dh 命令。这个执行时间比较长,耐心多等一会。如下图:

执行完成后,会在keys目录下出现密钥交换文件dh2048.pem。到此咱们要用到的所有证书就已经制作完成了,下面开始安装配置OpenVPN的服务器端。

在VPN服务器上,执行 yum -y install openvpn 命令,我安装的是2.4.12版本。如下图:

安装完成后,会在 /etc 下出现openvpn目录,里面有server和client两个子目录。我们执行 mkdir /etc/openvpn/keys 命令创建一个新的keys目录用来放置要用的各种证书和密钥文件。如下图:

接下来把要用到的证书和密钥文件复制到这个keys目录中。执行:

cp /root/easy-rsa-release-2.x/easy-rsa/2.0/keys/server.crt /etc/openvpn/keys/

cp /root/easy-rsa-release-2.x/easy-rsa/2.0/keys/server.key /etc/openvpn/keys/

cp /root/easy-rsa-release-2.x/easy-rsa/2.0/keys/ca.crt /etc/openvpn/keys/

cp /root/easy-rsa-release-2.x/easy-rsa/2.0/keys/dh2048.pem /etc/openvpn/keys/

执行完成后,/etc/openvpn/keys/中有四个文件。如下图:

然后咱们复制openvpn的配置文件,执行 cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf /etc/openvpn/ 命令。如下图:

接下来编辑server.conf 配置文件。先修改咱们前面复制到 /etc/openvpn/keys/ 目录下四个文件的位置:

ca keys/ca.crt

cert keys/server.crt

key keys/server.key

dh keys/dh2048.pem

如下图:

然后再修改VPN虚拟IP获取的网段,server 10.0.1.0 255.255.255.0 。如下图:

接下来增加允许路由的网段,push "route 10.0.1.0 255.255.255.0" 。如下图:

下一步修改拒绝服务攻击证书文件的位置,tls-auth keys/ta.key 0 。如下图:

最后修改vpn的加密模式,cipher AES-256-GCM 。如下图:

上面几项都修改完成后保存配置文件,启用路由转发功能。

执行 echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 命令;

然后再执行 sysctl -p 命令,使路由转发配置生效。如下图:

接下来制作拒绝服务攻击证书。先进入 /etc/openvpn/keys 目录,执行 openvpn --genkey --secret ta.key 命令。执行完成后会在 /etc/openvpn/keys 目录下出现ta.key文件。如下图:

下一步启动openvpn服务,

进入/etc/openvpn目录,执行 openvpn --daemon --config server.conf 命令;

然后再执行 lsof -i:1194 命令。如果1194端口被openvpn监听,就说明服务已经成功启动了。如下图:

到此,咱们VPN服务端的工作就全部完成了,接下来咱们先检查一下iptebles的配置。VPN是udp协议,所以要把iptables上1194端口的udp协议开放。如果云服务器有防火墙,也要开放1194的udp协议。如下图:

下面开始配置客户端。首先是在客户端上安装openvpn服务,安装过程跟服务端一样。在VPN客户端上执行 yum -y install openvpn 命令。如下图:

安装成功后进入 /etc/openvpn/client 目录:

把VPN服务器端生成的:ca.crt、client.crt、client.key和ta.key,这四个文件传送到当前目录下;

把客户端服务器 /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/client.conf 也复制到/etc/openvpn/client 目录下;

如下图:

下面修改 client.conf 配置文件,先修改证书文件的目录:

ca client/ca.crt

cert client/client.crt

key client/client.key

tls-auth client/ta.key 1

如下图:

再修改VPN加密方式:

cipher AES-256-GCM

如下图:

最后修改VPN服务端的IP地址和端口:

       remote XXX.XXX.XXX.XXX 1194

上面几项都修改完成后,保存文件。然后启动客户端服务:

在 /etc/openvpn 目录下执行 openvpn --daemon --config client/client.conf --log-append /var/log/openvpn.log

如下图:

可以看一下 /var/log/openvpn.log 这个日志文件,如果显示 Initialization Sequence Completed 就可以了。也可以在客户端执行 ifconfig 命令。如果有虚拟网卡,IP是10.0.1.X,就说明正常了。   如下图:

现在VPN服务端和客户端已经连接起来了,服务端的虚拟IP是10.0.1.1,客户端的虚拟IP是10.0.1.6。下面在服务端执行:

echo 1 >/proc/sys/net/ipv4/ip_forward

iptables -t nat -A POSTROUTING -j MASQUERADE

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8081 -j DNAT --to-destination 10.0.1.6:8081

把服务端的8081端口指向到VPN客户端服务器10.0.1.6:8081上。用浏览器访问服务端的公网IP,能够正常返回。如下图:

大功告成!

猜你喜欢

转载自blog.csdn.net/ziele_008/article/details/125207299