openvpn_connect.sh 连接,内网拨号上网,断网续联

简介: shell 脚本 配置 openvpn 连接,断网续联

#!/bin/bash
# auto connect vpn . get internal network connection  [inˈ tər nl  in tor no 内部]

ip=10.1.1.1
#ip=10.1.1.9
VPNfile=/datadisk/eisc/vpn/home/homeserver1.ovpn
sudo chmod 777 $VPNfile

debList=(
openvpn
)

download_deb(){
   

   for i in ${
   debList[*]}
   do
      debname=`echo $i | awk -F"_" '{print $1}'`
      debnameInstalled=`sudo dpkg -l | grep -w  "$debname" | awk -F" " '{print $2}' `
      debnameInstalledLength=${
   #debnameInstalled}

      if [ $debnameInstalledLength -gt 1 ]
      then
         echo "[ok] 该包 $i 已经安装,安装信息: $debnameInstalled"
      else
         echo "[runing] 正在检查是否下载安装包: $i"
         if [ ! -e $i ]
         then
            echo "[runing] 当前没有下载,正在下载包:$i"
            case "$i" in
               "openvpn")    sudo apt-get install openvpn    ;;
               *) echo "该包没有定义下载地址,包: $i"
            esac
         else
            echo  "[ok] 已经安装: $i "
         fi

      fi
   done
}




connect()
{
   
    echo "正在检测拨号上网状态.....  "

    ping -c1 -W1 $ip   | grep from
    if [ $? != 0 ]
    then
        failFlag=1
        echo "[fail]  Connection failed.       i=$i   failCount=$failCount  failFlag=$failFlag"
    else
        failFlag=0

        failCount=0                 # 网络连接上一次为通畅,重新开始计数
        FailMaxCount=0;

        failFlag=0
        FailMaxFlag=0
        echo "[ok] connection is successful.   i=$i   failCount=$failCount  failFlag=$failFlag"
        sleep 1
    fi

    # 将ping -c 2  ping 两次; -i 每次间隔; -w 总共等待时间;  vpn 连接上后需要等待一些时间
    # $? 是上一个程序执行是否成功的标志,如果执行成功则$?0,否则 不为0

    if [ "$failCount" -gt "5" ]
    then
        FailMaxFlag=1
        i=0;
        failCount=0;                # 大于 5 重置次数,重新计数 
        echo "[reset] i=0; failCount=0; failFlag=0  ; outValue  i=$i failCount=$failCount  failFlag=$failFlag FailMaxFlag=$FailMaxFlag "
        sleep 1;
    else
        FailMaxFlag=0;
    fi


    if [ "$FailMaxCount" -gt "1" ]  # 5次错误的倍数 0 1 两次, 
    then
        sudo killall openvpn ; sudo openvpn $VPNfile > /dev/null & 
        failFlag=0;
        echo "Network reconnection... "
        sleep 12                            # openvpn 连接需要时间,连接成功后再进行检测网络通讯
    fi



}


failCount=0
FailMaxCount=0;

failFlag=0
FailMaxFlag=0

i=0;
# 初始化变量

main()
{
   
    #download_deb
    for((;;))
    do
        connect 
        ((i++))
        echo "当前尝试次数 : $i 状态: $status"

        if [ "$failFlag" = "1" ] 
        then 
            ((failCount++))
        fi

        if [ "$FailMaxFlag" = "1" ] 
        then 
            ((FailMaxCount++))
        fi

        if [ $i > 999 ]
        then
            i=0;
        fi

    done
}
main


# 小绿叶技术博客一键下载: wget eisc.cn/file/ubuntu/shell/server/openvpn_connect.sh
目录
相关文章
|
3月前
|
Ubuntu Linux 网络安全
在Linux中,如何配置VPN连接?
在Linux中,如何配置VPN连接?
|
5月前
|
监控 安全 Linux
虚拟专用网络(VPN):远程访问与点对点连接及其在Linux中的IPSec实现与日志管理
虚拟专用网络(VPN):远程访问与点对点连接及其在Linux中的IPSec实现与日志管理
226 0
|
安全 网络虚拟化 数据安全/隐私保护
Windows 10系统自带VPN客户端配置连接PPTP VPN服务器
Windows 10系统自带VPN客户端配置连接PPTP VPN服务器
2446 1
|
Linux 网络虚拟化 iOS开发
Manjaro Linux 连接公司的 VPN 网络
用 Linux 和用 Windows/macOS 不一样,它真的需要用户操心很多东西。比如怎么连接公司的 VPN 网络……最后我使用 PPTP Client 连上了,遂写个文章做个记录吧。
124 0
|
Kubernetes 负载均衡 Cloud Native
如何使用 Istio 进行多集群部署管理(1): 单控制平面 VPN 连接拓扑
本文摘自于由阿里云高级技术专家王夕宁撰写的《Istio 服务网格技术解析与实践》一书,在展望服务网格未来的同时,讲述了如何使用 Istio 进行多集群部署管理,来阐述服务网格对多云环境、多集群即混合部署的支持能力。
1671 0
如何使用 Istio 进行多集群部署管理(1): 单控制平面 VPN 连接拓扑
|
Kubernetes 负载均衡 Cloud Native
如何使用 Istio 进行多集群部署管理:单控制平面 VPN 连接拓扑
本文摘自于由阿里云高级技术专家王夕宁撰写的《Istio 服务网格技术解析与实践》一书,在展望服务网格未来的同时,讲述了如何使用 Istio 进行多集群部署管理,来阐述服务网格对多云环境、多集群即混合部署的支持能力。
如何使用 Istio 进行多集群部署管理:单控制平面 VPN 连接拓扑
|
网络协议 Linux 网络安全
MacOS客户端通过阿里云VPN连接阿里云NAS SMB文件系统
SMB远程文件传输协议在远程文件系统领域具有相当的统治地位。主流客户端厂家,包括微软、苹果以及Linux生态圈都支持SMB协议,并且苹果的MacOS已经将SMB作为其默认的远程文件协议。作为国内云厂商的龙头企业,阿里云NAS SMB文件系统也可以支持MacOS客户端。
5552 0
MacOS客户端通过阿里云VPN连接阿里云NAS SMB文件系统
Openvpn客户端连接
1、下载OpenVpn客户端安装包,安装。 2、在OpenVPN的安装路径下(一般为:C:\Program Files\OpenVPN\config)建立新文件client.
3509 0
|
3月前
|
网络协议 Shell 网络虚拟化
手把手教你玩MPLS VPN如何配置
手把手教你玩MPLS VPN如何配置
263 0
|
5月前
|
网络协议 网络虚拟化 网络架构
MPLS VPN协议高级应用
MPLS VPN协议高级应用