Script executa no Cron a cada 5 minutos para verificar se houve alteração no IP e atualizar nos hosts dinâmicos
#!/bin/sh # script atualizador de IP #daniel.uramg 2010 echo Script iniciado... #VERIFICA SE ESTA AGENDADO NO CRON, SE NÃO TIVER SE AGENDA CRONFILE="/var/spool/cron/crontabs/root" [ -z "`grep dnsomatic.sh $CRONFILE`" ] && echo "*/5 * * * * /partition/scriptsteste/./dnsomatic.sh" >> $CRONFILE && cron.reload #Se não existir o arquivo dnsomatic.txt o cria [ ! -e /partition/tmp/dnsomatic.txt ] && touch /partition/tmp/dnsomatic.txt #Variavel para pegar o IP válido, caso a primeira falhe tenta outras vezes IPATUAL="`wget -O - //myip.dnsomatic.com/`" [ -z "$IPATUAL" ] && IPATUAL="`wget -O - //checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`" [ -z "$IPATUAL" ] && IPATUAL="`wget -O - //dynupdate.no-ip.com/ip.php`" #Função que atualiza o IP nos hosts e envia email UPDATE(){ #DOCS API: //api.cloudflare.com/#zone-properties #Exemplo Batch //gist.github.com/benkulbertis/fff10759c2391b6618dd/ auth_email="meuemail" auth_key="meutoken" zone_name="site.com" record_name="www.site.com" zone_identifier=$(/usr/local/bin/./curl -k -s -X GET "//api.cloudflare.com/client/v4/zones?name=$zone_name" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" | cut -f 3 -d: | cut -f 1 -d, | sed 's/"//g') record_identifier=$(/usr/local/bin/./curl -k -s -X GET "//api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records?name=$record_name" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" | cut -f 3 -d: | cut -f 1 -d, | sed 's/"//g') GETcfIdeias=$(/usr/local/bin/./curl -k -X PUT "//api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" --data "{\"type\":\"A\",\"name\":\"$record_name\",\"content\":\"$IPATUAL\"}") ZEuser="login" ZEpass="senha" ZEhosts="host1.com,host2.com.br" #GETze="`wget -O - //$ZEuser:[email protected]/auth/dynamic.html?host=$ZEhosts`" NOipuser="user" NOippass="senha" NOiphosts="host1.zapto.org,host2.ddns.net,host3.ddns.net" GETnoip="`wget -O - //$NOipuser:[email protected]/nic/update?hostname=$NOiphosts`" FREEDNStoken="token==" GETfreedns="`/usr/local/bin/./curl -k //freedns.afraid.org/dynamic/update.php?$FREEDNStoken`" DNSomaticuser="user" DNSomaticpass="senha" DNSomatichosts="all.dnsomatic.com" GETdnsomatic="`wget -O - //$DNSomaticuser:[email protected]/nic/update?host=$DNSomatichosts`" #Exibe no console echo "IP atualizado: $IPATUAL" ##Envia email /partition/scriptsteste/./sendmail.sh "`[ -z "$GETcfIdeias" -o -z "$GETnoip" ] && echo "ATENÇÃO!"` IP Atualizado $IPATUAL" " `[ -z "$GETcfIdeias" -o -z "$GETnoip" ] && echo "HOUVE ERRO EM ALGUM DOS SERVIÇOS! VERIFIQUE COM ATENÇÃO."` IPATUAL = //$IPATUAL Retorno do CloudFlare: (ideias.pw) $GETcfIdeias Retorno FreeDNS: (Ideias.2p.fm) $GETfreedns Retorno do No-IP: (zapto e ddns) $GETnoip Retorno do DNSomatic: (um pouco de tudo) $GETdnsomatic Retorno do ZoneEdit: (desativado) $GETze" #Carrega valor do IP e dos Hosts no arquivo dnsomatic.txt echo "IP: $IPATUAL" > /partition/tmp/dnsomatic.txt echo "dnsomatic: $GETdnsomatic" >> /partition/tmp/dnsomatic.txt echo "freedns: $GETfreedns" >> /partition/tmp/dnsomatic.txt echo "zoneedit: $GETze" >> /partition/tmp/dnsomatic.txt echo "no-ip: $GETnoip" >> /partition/tmp/dnsomatic.txt echo "cloudflare: $GETcf" >> /partition/tmp/dnsomatic.txt [ -z "$CONT" ] && CONT="1" || CONT="$(($CONT+1))" #DEBUG cat /partition/tmp/dnsomatic.txt echo -e "\a" echo CONT=$CONT #[ -z "` echo "$GET" | grep "good"`" ] && sleep 30 && UPDATE #[ ! -z "` echo "$GETze" | grep "Too many updates too quickly"`" ] && echo "deu zica" && exit 1 #[ -z "` echo "$GETze" | grep "SUCCESS"`" -a "$CONT" -lt 5 ] && sleep 30 && UPDATE } #Função para verificar se a entrada A foi atualizada em cada domínio #verificadns_func(){ #echo "Entra na verificação dos Hosts, aguardando 5 minutos..." #sleep 300 #300 - aguarda 5 minutos #DOMINIOS="digipaperinformatica.com\nwebtracker.com.br\nrecicladigital.com.br" #DNSCHECK_FUNC() { # wget -O - "//www.dnswatch.info/dns/dnslookup?la=en&host=$1&type=A&submit=Resolve" | grep "A record found" | cut -f 4 -d' ' #} ##DESATIVADO TEMPORARIAMENTE # echo -e $DOMINIOS | while read DOMINIO; do # if [ "`DNSCHECK_FUNC "$DOMINIO"`" -a "`DNSCHECK_FUNC "$DOMINIO"`" != "$IPATUAL" ]; then #echo "Dominio $DOMINIO não atualizado, nova tentativa" #/partition/scriptsteste/./sendmail.sh "Domínio $DOMINIO" "O domínio $DOMINIO parece não ter sido atualizado com sucesso #A entrada A deste domínio é: `DNSCHECK_FUNC $DOMINIO` e o IP atual é: $IPATUAL. #Será feita uma nova tentativa de atualização" # UPDATE # fi # done #} [ "$IPATUAL" -a -z "`grep "$IPATUAL" /partition/tmp/dnsomatic.txt`" ] && UPDATE || echo "sem necessidade" #&& verificadns_func