给openwrt路由器添加自动切换ss服务器脚本

《这事不能说太细之openwrt》中我们提到了一个watchdog脚本,就是每隔10分钟执行一次,检查google和百度的网页,如果能访问百度但是不能访问google,就认为是ss服务有问题,重启ss服务;如果google额百度的网页都不能访问,说明是连接英特网有问题,则记录“Network Problem. Do nothing”,不做任何调整。

今天我们对这个脚本来改进一下,如果我们从log中发现已经重启了3次ss服务,那么我们就认为该ss服务连接的远端服务器有问题,我们切换到另一个ss服务器;如果我们从log中发现了记录3次网络连接有问题,我们就尝试重启路由器。

先来看看思路:

由于我们shadowsocks的配置文件是/etc/shadowsocks/config.json,那么我们提前准备好各个服务器的配置文件,当config.json有问题,那么就用config.json.ssserver1.hk1替换掉config.json;如果还不行,就用下一个config.json.ssserver1.ca1 替换掉config.json。

而这个问题的关键点是识别当前的config.json用的是哪个配置,本来在config.json中加一个注释用来做检测是个不错的思路,但是json的文件不能用一般的//做注释,或者用/* */做注释,我们得手工添加一个变量作为注释:

我们可以把服务器名字放在这里。如
config.json.ssserver1.hk1文件的内容是

config.json.ssserver1.ca1文件的内容是

以此类推,准备多个服务器的配置文件放在/etc/shadowsocks/下。

然后我们再做一个服务器列表:

有了这2类文件之后,我们就可以判断当前config.json使用的那个配置文件,然后判断其在服务器列表的位置,然后取下一位的服务器名称。

整体的脚本,如下:

我们把它放在crontab中每隔10分钟定期运行:

相关文章

2条评论

  1. next_filename=cat server_list.txt |head -1 |awk '{print $2}'
    —>
    next_filename=cat /etc/shadowsocks/server_list.txt |head -1 |awk '{print $2}'

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据