写这个脚本的原因

公司内网部署的VOIP的S口及O口设备,在公网ip地址发生变化后,无法正常注册到部署在公网上的FreePBX上,必须手动重启OpenWRT防火墙才能正常注册,通过这个脚本自动监控外网地址变化,并执行防火墙重启动作,实现VOIP系统不会因外外网地址变化导致服务中断,此脚本已测试通过,可正常使用。

实现方法

ssh登录OpenWRT,在/root下新建三个文件ip、change_log、monit_ip.sh

ip:记录当前公网ip地址,用于比较公网ip是否变化
change_log:当公网ip发生变化后,执行monit_ip.sh脚本后记录日志信息
monit_ip.sh:监控外网ip是否变化脚本,当发生变化后,写入新的外网ip到ip,重启防火墙。

操练起来

1.新建文件

touch ip
touch change_log
touch monit_ip.sh

2.赋予monit_ip.sh文件执行权限

chmod +x monit_ip.sh

3.编辑monit_ip.sh

vi monit_ip.sh

复制以下脚本,存盘退出

#!/bin/bash
new_ip=`curl ipv4.icanhazip.com`
old_ip=`cat /root/ip`
if [ ! $new_ip == $old_ip ]
then
  echo $new_ip > /root/ip
  echo $(date)\ "ip has changed, the new ip is $new_ip !!! " > /root/change_log
  /etc/init.d/firewall restart
fi

4.配置crontab计划任务,每5分钟检查一次外网地址是否发生变化

crontab -e

加入以下信息

*/5 * * * * /root/monit_ip.sh >/dev/null 2>&1

配置完成,当外网ip发生变化时,触发重启防火墙动作。

Last modification:November 20th, 2020 at 12:09 pm