L2TP/VPN 实现断线重连(freescale MX28板子)

最近公司的项目开发,用到了VPN,用自己的VPN服务器存放数据,作为搞移植的我也是从零开始要搞定VPN的移植以及实现全过程,其中移植都搞定了,现在记录下板子当遇到外界因素而要实现自动重启,我采用的方法,望前辈们多多指教,勿喷:

板子:i.MX28 freescale

Linux系统:2.6.35.3

xl2tpd移植版本:1.3.10

pppd移植版本:2.4.7

当遇到断网等因素,导致pppd进程最终后,VPN就属于真正的死了,日志信息如下:

我发现在没有其他拯救措施情况下,只能手动重启,于是想写一个脚本来完成自动重连,上图中20点以前是pppd由于网断开,pppd最终自动终止;20点后的循环是脚本自动重连的效果,先上代码:

#! /bin/sh

while true

pppdNum=`ps -e | grep 'pppd' | wc -l`
do echo "pppdNum = $pppdNum"

if [ $pppdNum -le 1 ]
then
        #if vpn don't connect, pppd will die in seconds
        #so wait 10 secs to check proccess 'pppd' again if the pppd has died!
        echo "vpn is down,waitting for connectting again.."     
        sleep 10
        pppdNum_1=`ps -e | grep 'pppd' | wc -l`
        echo "pppdNum = $pppdNum_1"
                
        #if vpn has auto connect success again,this will do nothing!
        #if vpn don't auto connect again, the pppd will die really!
        
        if [ $pppdNum_1 -ge 2 ]
        then
                echo "vpn has autolly connect success again!"
                route add -net 0.0.0.0 netmask 0.0.0.0 dev ppp0
        else
                echo "connectting.."
                echo 'c vpn_client' > /var/run/xl2tpd/l2tp-control
                sleep 10
                route add -net 0.0.0.0 netmask 0.0.0.0 dev ppp0
        fi
fi
sleep 5

done
在20:11左右,网络恢复,最终实现自动重连,如下:


我的思路主要是通过判断进程pppd是否死掉,死了就间隔一段时间再判断,如果确定死了就说明VPN断开了,这时进行重新启动。脚本应用到系统中时可以删掉“echo "pppdNum = $pppdNum"",这只是调试时为了方便查看。

欢迎各位指正!!


猜你喜欢

转载自blog.csdn.net/qq_33611327/article/details/78022874
今日推荐