搭建双机OPENVPN遇到的坑

需求描述:openvpn 挂了另一个服务能顶上,并且要快。

1.第一个坑:服务搭建好了,宕机切换,等待两分钟,才连上,这完全不符合我的需求
2.第二个坑:猜想是不是用的VPN自带服务的问题,试试通过lvs 搭建看看,然鹅 没有用,时间又过去了几个小时
3.第三个坑:既然加了lvs也没用,那就是自带的配置影响的,遍查了各路文档,试参数。修改重启重复又重复,又是几个小时过去了。最后试出来是客户端配置中加入connect-timeout 3 参数。
反省1:没有在第一时间使用man openvpn 而是去官方和网上查的各种文档,因为在网上搜索相关关键字,如果使openvpn 快速重连备用机等等关键字都没有相关信息。走了很多弯路,后来 man 了一下,看见了下面的配置信息
--connect-timeout n
For --proto tcp-client, set connection timeout to n seconds (default=10).
部署遇到的问题放在最后,可以提前浏览,免得坑

搭建过程开始:这个是openvpn+lvs+keepalived的搭建过程

环境信息

VPN版本:OpenVpn2.4.1
VPN1:192.168.10.22
VPN2:192.168.10.24
VPNclient1:笔记本
master——lvs1:192.168.10.23
backup——lvs2:192.168.10.8

注意:

lvs在keepalived 的部署方式下不需要单独配置,仅需要安装好ipvsadm工具即可。在keepalived.conf配置文件中设置。
1.配置好yum 源
2.yum install -y ipvasdm 或者源码包 安装,这个安装方法网上很多,我直接上干货
3.图省事我keepalived 也是yum 安装的
4.修改配置文件-===========keepalived.conf
##### 这个是备机的配置文件
global_defs {
router_id HAOpenVpn_1
}
vrrp_instance VI_OPENVPN {
state BACKUP
interface ens160
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.200
}
}
#VIP
virtual_server 192.168.10.200 20011 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.10.22 20011 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 20011
}
}
real_server 192.168.10.24 20011 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 20011
}
}
}
#####
##### 这个是master 的配置文件
global_defs {
router_id HAOpenVpn_1
}
vrrp_instance VI_OPENVPN {
state MASTER
interface ens160
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.200
}
}
virtual_server 192.168.10.200 20011 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.10.22 20011 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 20011
}
}
real_server 192.168.10.24 20011 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 20011
}
}
}
#####
5.启动 keepalived,有下面两种方式,根据需要自选
1)service keepalived start
2)/usr/sbin/keepalived --use-file=/etc/keepalived/keepalived.conf & #指定配置文件
6.检查keepalived 是否启动
ps -ef |grep keepalived
7.检查lvs
ipvsadm -Ln
watch ipvsadm -Ln #实时监控 ip被使用情况,调试非常有用
8.部署openvpn 安装过程忽略,直接上配置文件
#(服务器所在Ip)
#local 192.168.10.22 #这个必须注释,不然lvs 不能监听到openvpn
port 20011
#nobind
#openvpn端口
proto tcp
#TCP或者UDP选择,这里选择TCp
dev tun
#使用tun模式
ca /etc/openvpn/2.0/keys/ca.crt
#指定证书路径,这里使用绝对路径
cert /etc/openvpn/2.0/keys/server.crt
key /etc/openvpn/2.0/keys/server.key
dh /etc/openvpn/2.0/keys/dh1024.pem
server 10.19.0.0 255.255.255.0
ifconfig-pool-persist /etc/openvpn/2.0/conf/ipp.txt
#持续使用同一个ip的记录文件
client-to-client
#客户端之间可以相互连接
keepalive 10 120
comp-lzo
#开启VPN连接压缩,如果服务器端开启,客户端也必须开启
user nobody
group nobody
persist-key
persist-tun
log-append /etc/openvpn/logs/openvpn.log
#指定日志路径
verb 3
##########结束
9.生成各种证书
10.预先写入,需要保持IP的机器,写入到 /etc/openvpn/2.0/conf/ipp.txt 每个IP隔4 个数字
举个例子:
mq1,10.19.0.20
mq2,10.19.0.24
mq3,10.19.0.28
11.启动
/home/local/openvpn-2.4.1/sbin/openvpn --daemon --config /home/local/openvpn-2.4.1/etc/openvpn/2.0/conf/server.conf &
12.发送配置好的应用到VPN2机器上
rsync -avz /home/local/openvpn-2.4.1 [email protected]:/home/local/
rsync -avz /etc/openvpn/2.0 [email protected]:/home/local/
13.在VPN2机器启动服务
14.客户端连接服务端端口重连,观察重连时间
--Linux openvpn客户端 启动路径
/opt/openvpn-2.4.1/sbin/openvpn --daemon --config /etc/openvpn/client.ovpn &
15.客户端的配置文件信息
client
dev tun
proto tcp
remote 192.168.10.200 20011
#remote 192.168.10.22 20011
#remote 192.168.10.24 20011
resolv-retry infinite
nobind
persist-key
persist-tun
connect-retry 2
connect-retry-max 2
connect-timeout 3
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client4.crt
key /etc/openvpn/client4.key
ns-cert-type server
comp-lzo
log-append /etc/openvpn/logs/openvpn.log
verb 3
########结束
写在最后的话,OPENVPN,自身就支持多台服务端自动切换,只是核心的问题是,默认的自主切换时间非常长,所以这篇文章重点是解决,自动重连时间长的问题。lvs+vpn 就是一个实现的方式而已。如果需要使用VPN自带的方式实现,修改客户端配置文件如下
client
dev tun
proto tcp
remote 192.168.10.22 20011
remote 192.168.10.24 20011
resolv-retry infinite
nobind
persist-key
persist-tun
connect-retry 2
connect-retry-max 2
connect-timeout 3
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client4.crt
key /etc/openvpn/client4.key
ns-cert-type server
comp-lzo
log-append /etc/openvpn/logs/openvpn.log
verb 3
########结速
实验结果:可以实现此方式,但是在客户端重新连接的时候,依然还是需要客户端的参数配置connect-timeout n 来设置客户端重连时间,目前设置的是connect-timeout 3 是最快的重新连接时间了,如果设置为1 无法启动,进入无限重连的状态。2估计也不行,开始重连需要一定时间的缓冲。
部署过程的问题:
部署好VPN和LVS后,通过VIP无法telnet VPN的服务端口,但是能telnet RS的VPN端口
1.首先检查了防火墙,都是关闭的,想不通还有什么地方会影响
这个卡了挺长时间,因为网上部署双机的资料都是很少的。后来看到一篇文章说telnet 某某端口拒绝连接,原因可能是,端口开放配置绑定了所在机器,后来一查,果然是
原因是:在openvpn 的server.conf文件按照官方sample配置文件,默认推荐配置了local 服务器所在IP,通过查阅官方文档这个选项是可选的,去掉local,重启服务,通过netstat -nlap|grep vpn端口号
可以看到目前监听的状态变成了 0.0.0.0:vpn端口号 此时telnet lvs VIP vpn端口 可以通过连接。表示可以通过lvs VIP来连接正常的服务了
问题1:部署双机服务后,测试kill掉一个vpn服务,等待客户端重新连接服务端的时间大约在两分钟左右,查阅网上文档结合自己的理解是,这样的openvpn有个默认的机制,inactivetimeout 2miniutes 表示的意思是,在两分内,会一直重连一开始连接上的服务器,为了更好的理解,假设,客户端连上了VPN1,在你把VPN1的服务kill掉后,客户端在两分钟内一直重新连接VPN1,如果过了两分钟VPN1还是连不上,才会触发客户端的restart机制,开始连接VPN2服务。那么问题来了,在生产环境下,两分钟的等待时间这是不可接受的,那么在哪里配置这个inactivetimeout呢,看了文档和搜索了网上都没有描述过这个问题的,到底是在服务端配置,还是在客户端配置这个也不错,把服务端配置文件关于timeout 的都测试了一遍,没有生效,直到后面测试了客户端的connect-timeout ,才有效,测试过程总是煎熬的,因为你不知道下一个是不是可行。为了方便以后的人配置,特此详细描述出来。
问题2:高可用的OPENVPN下,linux客户端IP地址在切换不同的服务,绑定的客户端ip地址会不同,这个会影响通过隧道通信的应用,IP地址会飘忽不定。
猜测原因1:通过服务配置文件设置的参数文件ipp.txt,通过同步的两台服务器的这个文件,应该可以实现故障切换的时候的分配到的IP地址是同一地址,高可用的方式,客户端配置文件使用,配置两个remote 地址
20181008问题2验证结果:证明ipp.txt 文件保存的IP可以是客户端获取的IP保持不变,只要两个服务端的ipp.txt一致

猜你喜欢

转载自www.cnblogs.com/muzhifei/p/muzhi.html