同步最新ddns的IP地址到vps

严懿 491 2023-09-12

有很多后台程序占用大量资源,所以将占用大资源的服务放在本地运行,vps通过nginx反代到本地的服务,节省资源

用法:

  1. vps的hosts文件里面自定义域名指向本地服务。例如xx.xx.xx.xx yyhome-localhost
  2. 获取ddns api在路由配置ddns指向
  3. 将远端vps的hosts文件放一份至本地目录/data/backup/hosts 下面
  4. 两台主机配置免密登录
  5. 定时任务10分钟获取一次
#!/bin/bash

HOSTIP=xxx.xxx.xxx.xxx
DATE_TIME=$(date +"%Y-%m-%d %H:%M:%S")

# 替换为你要查询的域名
DOMAIN="xxx.com"

# 需要生成hosts文件的目录
hostsFileDir=/data/backup/hosts

# 使用dig获取域名的IP地址,然后使用awk截取打印
IP_ADDRESS=$(dig +short $DOMAIN | awk 'NR==1{print $1}')

# 获取vps主机的地址
OLD_IP_ADDRESS=$(cat ${hostsFileDir}/hosts|grep "yyhome"|awk '{print $1}')

if [ "$IP_ADDRESS" == "$OLD_IP_ADDRESS" ]; then
    echo "IP地址相等,不做变动...${DATE_TIME}" >> /root/updateHostVpsIP.log
else
    cat ${hostsFileDir}/hosts.bak > ${hostsFileDir}/hosts

    echo "${IP_ADDRESS} yyhome-localhost" >> ${hostsFileDir}/hosts
    echo "IP地址不相等,开始同步hosts文件${DATE_TIME}" >> /root/updateHostVpsIP.log

    rsync -avzP -e 'ssh -p {你的ssh端口}' ${hostsFileDir}/hosts root@${HOSTIP}:/etc/hosts
    sleep 1s

# 重启远端NGINX主机

    ssh -p {你的ssh端口} root@${HOSTIP} "/usr/sbin/nginx -s reload" #YYVPS主机
    sleep 3s

# 机器人通知
    if [ $? -eq 0 ]; then
        echo "同步hosts文件成功${DATE_TIME}" >> /root/updateHostVpsIP.log
        curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=微信机器人id' \
	     -H 'Content-Type: application/json' \
             -d '
        {
               "msgtype": "text",
               "text": {
	                 "content": "ddns地址变动,hosts同步文件成功,,vps_nginx服务重启成功" 
	         }
         }' #机器人通知

    else 
        echo "同步hosts文件失败${DATE_TIME}" >> /root/updateHostVpsIP.log
        curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=微信机器人id' \
             -H 'Content-Type: application/json' \
             -d '
        {
               "msgtype": "text",
               "text": {
                         "content": "ddns地址变动,hosts同步文件失败,请检查服务!" 
                 }
         }' #机器人通知

        	    
    fi

fi