|
本帖最后由 键盘人生 于 2017-1-30 06:13 编辑
这是我自己编写的PPTP自动拨号,自动判断是否断线脚本,在我的路由器上测试成功(RT-AC68U,Merlin380.64_2),如果大家在使用时发现有不对或者不合理的地方欢迎大家帮忙指正出来。
一、脚本文件说明
这个脚本共有四个文件组成如下:
|-----DecideNet.sh------------负责判断是否进行了PPTP拨号,同时判断拨号后线路是否通畅。
|-----Connv p n.sh------------负责断开PPTP拨号连接,并且重新拨号。
|-----router.sh-----------------负责在PPTP拨号成功后修改路由表,这样路由器可以根据路由表来转发线路链接。
|-----v p nc_options.pptp----PPTP拨号配置文件。
在使用这个功能时,需要打开路由器的脚本功能,并且在路由器的“wan-start”脚本中添加“sh /路径/DecideNet.sh”与“cru a v p n "*/5 * * * * sh /路径/DecideNet.sh"。
二、DecideNet.sh文件内容
#!/bin/bash
#pptp拨号成功后获取的网关地址。
pptpgateway=xxx.xxx.xxx.xxx;
#某个需要从pptp这条线路中出去的ip地址。
pptpip=xxx.xxx.xxx.xxx;
netstat=$(ping -c2 $pptpgateway|grep transmitted |awk '{print $4}')
if [ $netstat = 0 ];then
sh /mnt/udisk/private_sh/Connv p n.sh;
sh /mnt/udisk/private_sh/router.sh;
else
netstat=$(ping -c2 $pptpip|grep transmitted |awk '{print $4}')
if [ $netstat = 0 ];then
sh /mnt/udisk/private_sh/router.sh;
fi
fi
三、Connv p n.sh文件内容
#拷贝pptp配置文件到/tmp/ppp/目录
cp /路径/v p nc_options.pptp /tmp/ppp/ -r -f
wait;
#杀死pptp拨号进程(杀死进程等于断开线路)
kill -9 $(ps | grep "/usr/sbin/pppd file /tmp/ppp/v p nc_options.pptp" | grep -v grep | cut -c 0-5 | awk '{print $1}')
wait;
#根据配置文件重新建立拨号连接
/usr/sbin/pppd file /tmp/ppp/v p nc_options.pptp
wait;
sleep 10;
四、router.sh文件内容
#在路由表中删除ppp5的默认路由,这样可以依靠添加路由表来确定连接从哪个线路中走出去。
route del default ppp5
#指定从pptp走的IP地址或者网段地址
route add -net xxx.xxx.xxx.0/24 ppp5
五、v p nc_options.pptp文件内容
noauth
refuse-eap
#pptp用户名
user '用户名'
#pptp密码
password '密码'
plugin pptp.so
#pptp服务器IP地址
pptp_server 'pptp服务器IP地址'
v p nc 1
nomppe-stateful mtu 1400
persist
holdoff 10
maxfail 0
usepeerdns
ipcp-accept-remote ipcp-accept-local noipdefault
ktune
default-asyncmap nopcomp noaccomp
novj nobsdcomp nodeflate
lcp-echo-interval 6
lcp-echo-failure 10
lcp-echo-adaptive
unit 5
linkname v p n5
ip-up-script /tmp/ppp/v p nc-ip-up
ip-down-script /tmp/ppp/v p nc-ip-down
ip-pre-up-script /tmp/ppp/v p nc-ip-pre-up
auth-fail-script /tmp/ppp/v p nc-auth-fail
这个文件也可以自动建立,首先在路由器中配置好pptp客户端信息,然后运行拨号,观察拨号状况,如果拨号成功说明参数配置正确,这时候我们可以到/tmp/ppp/目录中拷贝“v p nc_options.pptp”文件。这就是最后生成的客户端配置文件。
六、程序运行逻辑
这个程序首先会定时执行“DecideNet.sh”脚本,根据脚本中的两个IP地址来判断拨号是否成功,线路是否通畅,如果发现线路不通,则断开重播,如果发现线路通畅但是指定IP地址不通,则判断为没有添加路由表,会自动执行添加路由表的脚本。
最后补充一点,这个程序最开始是在N16、Tomato下运行,后来更换了路由器刷了Merlin后,根据Merlin进行了修改,所以从原则上来说,这个程序可以运行在Tomato与Merlin两种固件下,只是需要根据固件自行设置即可。 |
|