学校的有线网需要通过l2tp协议连接,而且总是不稳定,所以写个自动重连脚本来保证断线重连。
而在DHCP动态IP分配下可能每次重连的ip地址不一样,所以每次重连后都发送ip到邮箱。
Ubuntu22.04中的L2TP连接
Ubuntu中没有默认的l2tp协议,要安装:
sudo apt install network-manager-l2tp network-manager-l2tp-gnome
然后就能在设置>网络>VPN>添加中看到。
选择添加L2TP协议,输入名称、网关、用户名密码。
⚠️注意:密码栏右侧可以选择一下为所有用户存储密码,这样脚本比较简单。
尝试连接,成功进入下一步。
重连脚本
通过ping 百度来测试网络是否正常(失败代表VPN断开连接了),用nmcli工具控制vpn连接,然后如果重连则用mail指令把ip以邮件发送到指定邮箱。
创建脚本reconnect_vpn.sh:
ping -c 1 www.baidu.com
if [ $? -eq 0 ]; then
echo "success"
else
echo "fail, reconnect vpn"
echo [sudo 密码] | sudo -S nmcli con up id [vpn 名字]
# 发送邮件指令
fi
如果只发送邮件不需要接收的话,使用mail指令即可,发送出去的邮件是匿名的。
安装mailutils:
sudo apt install mailutils
mail指令发送邮件示例:
echo "This is the mail body" | mail -s "Subject" 2daygeek@gmail.com
为了偷懒,直接将ip addr获取的内容一起发送哈哈哈哈
reconnect_vpn.sh最终内容:
ping -c 1 www.baidu.com
if [ $? -eq 0 ]; then
echo "success"
else
echo "fail, reconnect vpn"
echo [sudo 密码] | sudo -S nmcli con up id [vpn 名字]
# 发送邮件指令
ip addr | mail -s "vpn reconnected" [邮箱地址]
fi
记得修改脚本权限为777
自动执行脚本
使用Ubuntu自带的crontab组件,可以最低以1分钟的频率运行命令。
确认crontab正在运行:
sudo systemctl status cron
看到正在运行就好,如果没在运行则用start或者restart开起来。
编辑cron自动作业:
crontab -e
在最下方添加:
* * * * * [重连脚本]
保存并退出即可。
如果要查看脚本的输出,可以将脚本的输出重定向到某个文件,用于保存输出,方便随时查看:
* * * * * [重连脚本]>[reconnect_vpn.out的位置] 2>&1
接下来就可以试试有没有问题啦