OpenVPN之高可用集群

标签: 无 分类: 未分类 创建时间:2022-03-22 07:15:20 更新时间:2023-10-20 11:23:26

前言

OpenVPN可以实现客户端服务器模式实现虚拟专用网,对于这种模式来说,一旦server端挂掉,那么整个网络都将收到影响,那么有没有可以保证服务端高可用的方案呢?答案似乎是肯定的。

OpenVPN内置了一些高可用性和/或负载分担function,而且设置起来非常简单。首先,你将同时运行多个OpenVPN服务器,每个服务器都监听自己的IP地址。 服务器不共享状态,彼此不知道任何事情。然后,您可以在命令行或OpenVPN客户端的configuration文件中指定多个“–remote”选项。 当客户端有多个可用的远程服务器选项时,它将随机select一个并build立连接。 如果该服务器失败,将重新尝试连接,如果连接失败,则随机select其他服务器。

1.安装

这里有三台CentOS虚拟机:node01,node02,node03,使用 {post_link OpenVPN之Linux端搭建 OpenVPN之Linux端搭建 } 文章中提到的linux端安装配置OpenVPN的方法,三台虚拟机上同时安装了客户端和服务端,生成的客户端和服务端密钥,以node01上使用 ./easyrsa 命令生成的文件一样,三台都一样,即ca.crt、dh.pem、server.crt、server.key和ta.key等文件完全相同。

这里有需要注意的地方
(1) 三台服务器所有的keys,ca证书要相同,密钥和用户的证书等都要相同,把一份服务端keys拷贝到所有vpn server的服务器上,即:ca.crt、dh.pem、server.crt、server.key和ta.key等文件
(2) 三台服务器服务端配置文件要相同,即 server.conf 配置相同
(3) 三台服务器客户端配置相同,除了以下几点:

1
2
3
4
5
6
7
8
9
10
11
;远程服务地址和端口,会依次尝试连接
remote xxx 1194
remote xxx 1194
remote xxx 1194
;如果配置了,则会随机连接服务器
;remote-random

;每一个客户端的本身的证书配置不同
cert /etc/openvpn/client/node03.crt
key /etc/openvpn/client/node03.key

参考文章:
1.openvpn服务高可用的三种方案 这里的三种方案,实现openvpn server的高可用性:1.在vpn客户端使用多个配置文件实现(由用户选择拨号);2.通过在客户端配置文件实现负载均衡;3.通过域名加DNS轮询的方式实现负载均衡(DNS自动分配VPN)。
2.OpenVPN异地机房互连以及负载均衡高可用解决方案
3.OpenVPN部署搭建及高可用
4.高可用性的OpenVPN服务 这里讲了如何使用自带的remote进行自动选择服务器的功能。

2.固定IP

当使用集群部署之后,其中的一台作为server端的服务挂掉之后,与之相连的客户端会重新生成虚拟网卡,并分配不同的ip地址,如何设置生成固定IP地址呢?

可以使用配置服务端的 client-config-dir 目录,并增加 ifconfig-push 配置实现。这里的 node01,node02,node03,就是在生成客户端密钥时使用的客户端名称,和客户端crt和key的文件名同名。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
## 新建文件
mkdir -p /etc/openvpn/ccd
## 为每一个客户端配置ip地址
echo "ifconfig-push 10.9.0.6 255.255.255.0" > /etc/openvpn/ccd/node01
echo "ifconfig-push 10.9.0.4 255.255.255.0" > /etc/openvpn/ccd/node02
echo "ifconfig-push 10.9.0.5 255.255.255.0" > /etc/openvpn/ccd/node03

## 修改服务端配置文件
vi /etc/openvpn/server/server.conf

## 增加如下内容,启用ccd目录
;启用固定ip
client-config-dir /etc/openvpn/ccd

参考文章:
1.OpenVPN设置客户端固定IP ifconfig-push ${IP} ${NETMASK};“ifconfig-push 后面是紧跟着两个连续的成组IP地扯,以第一个为客户端的IP地扯” 这个不一定对,后面跟着掩码其实也是可以的。
2.给openvpn客户分配固定ip地址

问题

目前存在疑惑的地方,就是假如三台服务器node01,node02,node03,都安装了服务端和客户端,并配置了固定ip,其中node03不能开启server端,否在就会导致,node01连不上node03,但是更让我奇怪的是,node03开启服务端,node01连不上,但是node02却能够连的上,其中node03是在内网中,node01和node02都在阿里云上。

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。