1. 程式人生 > >搭建雙機OPENVPN遇到的坑

搭建雙機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一致