Press "Enter" to skip to content

树莓派自动重连WIFI并将内网IP更新至AliYunDNS

Last updated on 2022/10/29

树莓派WIFI相关

对于有线连接来说,只会用到更新内网IP到AliYunDNS(本人只用到了AliYunDNS,如果需要其他DNS服务商的话,还请自寻),可以直接参考第二小节。

此外,以下脚本均为Shell脚本,因为我认为Shell脚本执行效率更高,而且更通用。

WIFI重连

话不多说,先上脚本:

#!/bin/sh

#By Fxzx mic

ping_result=`ping $(netstat -r | grep 'default' | awk '{ print $2}') -c 2`
if [[ "${ping_result}" =~ "64 bytes from" ]]; then
        echo "WIFI is UP"
        exit 0
else
        echo "WIFI is DOWN, ReUPing"
        wpa_cli -i wlan0 reconfigure
        sleep 5
        service ddns start
        exit 0
fi

稍微解释一下,第三行的意思是获取当前WIFI的网关,然后Ping网关并获取Ping的结果。之后就是检查Ping是否收到正确回应(连网关都不通肯定是WIFI挂了),如果挂了,则使用wpa_cli -i wlan0 reconfigure进行WIFI重启(wpa_cli工具貌似只存在于Raspberry Pi OS?)。后面的service ddns start则是更新最新的内网IP到AliYunDNS。

此脚本我建议使用Cron定时任务每分钟执行一次(Cron定时任务的最高频率):* * * * /bin/bash path/to/script.sh > /dev/null 2>&1,注意切换到Root用户添加,普通用户可能权限不够。

更新内网IP到DNS

我为何要更新内网IP(应该没人把树莓派直接连到公网上吧)到DNS呢?为什么不直接查看路由器呢?

首先,在此路由器是你的个人路由器时,这么做没什么问题,但是更多情况下路由器的控制权并不在自己手中,这时候要去查看树莓派的IP就变得有些复杂。但是,思路就是,树莓派肯定知道自己的IP,只需要将IP发送到一个固定的,其它任何设备只要知道了位置就可以访问的地方,这时候事情就变得简单了。我想如果你有一些Shell脚本的基础知识的话,根据这个思路自己编写一个类似功能的脚本应该是很容易的。

至于我为什么更新到DNS,因为内网IP可能会变动,但是域名不会变,只要树莓派自己自动更新了域名解析,我们就可以一直通过域名访问树莓派,而无需更改任何设置,这是为了连贯性而做出的考虑。

而关于这部分的脚本我放在了自己的专门仓库,同时也为了感谢原作者的贡献。点击以下链接访问。

fxzxmic/Raspi_AliDNS_DDNS: 获取树莓派内网IP并更新至AliDNS (github.com)

此外,此脚本个人推荐使用Systemd方式运行,会有最佳效果。对于有线连接,此脚本有一处需要修改,注意根据自己的实际情况改动(如下图)。如果没有以Systemd方式运行,注意对第一小节的脚本进行修改


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注