Alter DNS Failover with Api CloudFlare
BY TOM SILVA
QUE ME AJUDOU A FAZER O EXEMPLO
FINALIDADE
DIGAMOS QUE TENHA UM SERVIDOR COM MAIS DE UMA INTERNET E CADA PORTA RJ45
ENTAO ASSIM VOCE POSSUI 2 IP NO MESMO COMPUTADOR
DIGAMOS QUE UM IP FICOU FORA DO AR
SE COLOCAR ESSE CODIGO NUM LOOP ETERNO
VAI ALTERAR PARA O IP DISPONIVEL NA TABELA LOCAL E VAI MONTAR O JSON PARA ENVIAR PARA O CLOUDFLARE QUE AGORA É OUTRO IP
EM ALGUNS MINUTOS O SERVIDOR VOLTA A FUNCIONAR POIS O CLOUDFLARE VOLTA A RESPONDER MAS POR OUTRO IP
GOAL
SAY YOU HAVE A SERVER WITH MORE THAN ONE INTERNET AND EACH RJ45 PORT
SO YOU HAVE 2 IP ON THE SAME COMPUTER
LET'S SAY AN IP IS OUT OF AIR
IF YOU PUT THIS CODE IN AN ETERNAL LOOP
IT WILL CHANGE TO THE IP AVAILABLE IN THE LOCAL TABLE AND IT WILL ASSEMBLE THE JSON TO SEND TO CLOUDFLARE WHICH IS NOW ANOTHER IP
IN A FEW MINUTES THE SERVER WILL BE WORKING AGAIN BECAUSE CLOUDFLARE WILL BE RESPONDING AGAIN BUT FROM A DIFFERENT IP
ANEXO FONTE DO PROJETO
ALTERAR O SEUS IPS, DNS E SENHA TOKEN PARA FAZER FUNCIONAR
CODE
// Summary: <specify the procedure action>
// Syntax:
//API_Cloudflare ()
//
// Parameters:
// None
// Example:
// <Specify a usage example>
//
// Return value:
PROCEDURE API_Cloudflare()
HourGlass(True)
bok is boolean
oReq is httpRequest
oResultado is httpResponse
jSend is JSON
jSend.name = "vpnwxbr.wxsolucoes.com.br"
jSend.proxied = False
jSend.type = "A"
jSend.ttl = 3600
oReq.URL = "https://api.cloudflare.com/client/v4/zones/9efff2175544b87a406e08f2f648a6af/dns_records/43f88addd578986670afff56d32fe1a1"
oReq..Method = httpPatch
oReq..ContentType = mimeTypeJSON
oReq..Header["Authorization"] = "Bearer wlDgq--------------------------------------------------" ///COLOQUE AQUI O SEU TOKEN
//busca que ip esta atualmente funcionando com prioridade o da horizon e copel
HReset(t005_ip_atual_local)
IF HReadSeek(t005_ip_atual_local,t005_id,1,hIdentical) = True THEN
IF HFound(t005_ip_atual_local) THEN
IF Ping(DNS_IP_Copel,10s) = True AND Ping(DNS_IP_Horizon,10s) = True
oReq..UserAgent = "WX SOLUCOES"
jSend.comment = "VPN trabalhando pela Horizon"
jSend.content = DNS_IP_Horizon
t005_ip_atual_local.t005_horizon = True
t005_ip_atual_local.t005_copel = False
t005_ip_atual_local.t005_startlink = False
t005_ip_atual_local.t005_net_casa = False
t005_ip_atual_local.t005_ip_atual = DNS_IP_Horizon
ELSE IF Ping(DNS_IP_Copel,10s) = True AND Ping(DNS_IP_Horizon,10s) = False
oReq..UserAgent = "WX SOLUCOES"
jSend.comment = "VPN trabalhando pela copel"
jSend.content = DNS_IP_Copel
t005_ip_atual_local.t005_horizon = False
t005_ip_atual_local.t005_copel = True
t005_ip_atual_local.t005_startlink = False
t005_ip_atual_local.t005_net_casa = False
t005_ip_atual_local.t005_ip_atual = DNS_IP_Copel
ELSE IF Ping(DNS_IP_Copel,10s) = False AND Ping(DNS_IP_Horizon,10s) = True THEN
oReq..UserAgent = "WX SOLUCOES"
jSend.comment = "VPN trabalhando pela horizon"
jSend.content = DNS_IP_Horizon
t005_ip_atual_local.t005_horizon = True
t005_ip_atual_local.t005_copel = False
t005_ip_atual_local.t005_startlink = False
t005_ip_atual_local.t005_ip_atual = DNS_IP_Horizon
ELSE IF Ping(DNS_IP_Copel,10s) = False AND Ping(DNS_IP_Horizon,10s) = False AND Ping(DNS_IP_Starlink_NoIP,10s) = True
oReq..UserAgent = "WX SOLUCOES"
jSend.comment = "VPN trabalhando pela Starlink"
jSend.content = DNS_IP_Starlink_NoIP
t005_ip_atual_local.t005_horizon = False
t005_ip_atual_local.t005_copel = False
t005_ip_atual_local.t005_startlink = True
t005_ip_atual_local.t005_net_casa = False
t005_ip_atual_local.t005_ip_atual = DNS_IP_Starlink_NoIP
ELSE IF Ping(DNS_IP_Copel,10s) = False AND Ping(DNS_IP_Horizon,10s) = False AND Ping(DNS_IP_Starlink_NoIP,10s) = False
oReq..UserAgent = "WX SOLUCOES"
jSend.comment = "VPN trabalhando pela Net Casa"
jSend.content = DNS_IP_Net_Casa_NoIp
t005_ip_atual_local.t005_horizon = False
t005_ip_atual_local.t005_copel = False
t005_ip_atual_local.t005_startlink = False
t005_ip_atual_local.t005_net_casa = True
t005_ip_atual_local.t005_ip_atual = DNS_IP_Net_Casa_NoIp
ELSE
oReq..UserAgent = "WX SOLUCOES"
jSend.comment = "VPN trabalhando pela Horizon"
jSend.content = DNS_IP_Horizon
t005_ip_atual_local.t005_horizon = True
t005_ip_atual_local.t005_copel = False
t005_ip_atual_local.t005_startlink = False
t005_ip_atual_local.t005_net_casa = False
t005_ip_atual_local.t005_ip_atual = DNS_IP_Horizon
END
HModify(t005_ip_atual_local)
END
END
oReq..Content = jSend
oResultado = RESTSend(oReq)
jResult is JSON = oResultado..Content
IF oResultado.StatusCode = 200 THEN
bok = True
//Info("OK", oResultado..Content)
EDT_T005_ip_atual = jResult.result.content
//aqui tem que colocar uma procedure para notificar whatsapp ou email
ELSE
bok = False
Info("Erro: ",oResultado..Content,ErrorInfo()+CR+HErrorInfo())
END
//DNS_IP_Horizon is string = "187.95.147.139"
//DNS_IP_Copel is string = "177.220.154.126"
//DNS_IP_Starlink_NoIP is string = "srvwxtoken.ddns.net"
//DNS_IP_Net_Casa_NoIp is string = "srvwxtoken.ddns.net"
//DNS_IP_Serveraddr is string = "10.1.1.102"
//DNS_IP_Server is string = DNS_IP_Horizon
//DNS_CLOUDFLARE is string = "vpnwxbr.wxsolucoes.com.br"
TableDeleteAll(TABLE_IP_Status)
IF Ping(DNS_IP_Horizon,10s) = True THEN
TableAddLine(TABLE_IP_Status,"DNS_IP_Horizon: "+DNS_IP_Horizon,"True")
CBOX_T005_horizon = True
ELSE
TableAddLine(TABLE_IP_Status,"DNS_IP_Horizon: "+DNS_IP_Horizon,"False")
CBOX_T005_horizon = False
END
IF Ping(DNS_IP_Copel,10s) = True THEN
TableAddLine(TABLE_IP_Status,"DNS_IP_Copel: "+DNS_IP_Copel,"True")
CBOX_T005_copel = True
ELSE
TableAddLine(TABLE_IP_Status,"DNS_IP_Copel: "+DNS_IP_Copel,"False")
CBOX_T005_copel = False
END
IF Ping(DNS_IP_Starlink_NoIP,10s) = True THEN
TableAddLine(TABLE_IP_Status,"DNS_IP_Starlink_NoIP: "+DNS_IP_Starlink_NoIP,"True")
CBOX_T005_startlink = True
ELSE
TableAddLine(TABLE_IP_Status,"DNS_IP_Starlink_NoIP: "+DNS_IP_Starlink_NoIP,"False")
CBOX_T005_startlink = False
END
IF Ping(DNS_IP_Net_Casa_NoIp,10s) = True THEN
TableAddLine(TABLE_IP_Status,"DNS_IP_Net_Casa_NoIp: "+DNS_IP_Net_Casa_NoIp,"True")
CBOX_T005_outra_conexao = True
ELSE
TableAddLine(TABLE_IP_Status,"DNS_IP_Net_Casa_NoIp: "+DNS_IP_Net_Casa_NoIp,"False")
CBOX_T005_outra_conexao = False
END
IF Ping(DNS_IP_Serveraddr,10s) = True THEN
TableAddLine(TABLE_IP_Status,"DNS_IP_Serveraddr: "+DNS_IP_Serveraddr,"True")
CBOX_T005_outra_conexao1 = True
ELSE
TableAddLine(TABLE_IP_Status,"DNS_IP_Serveraddr: "+DNS_IP_Serveraddr,"False")
CBOX_T005_outra_conexao1 = False
END
IF Ping(DNS_IP_Server,10s) = True THEN
TableAddLine(TABLE_IP_Status,"DNS_IP_Server: "+DNS_IP_Server,"True")
CBOX_VPN_STATUS = True
ELSE
TableAddLine(TABLE_IP_Status,"DNS_IP_Server: "+DNS_IP_Server,"False")
CBOX_VPN_STATUS = False
END
IF Ping(DNS_IP_Hfsql,10s) = True THEN
TableAddLine(TABLE_IP_Status,"DNS_IP_Hfsql: "+DNS_IP_Hfsql,"True")
CBOX_HFSQL_STATUS = True
ELSE
TableAddLine(TABLE_IP_Status,"DNS_IP_Hfsql: "+DNS_IP_Hfsql,"False")
CBOX_HFSQL_STATUS = False
END
IF Ping(DNS_CLOUDFLARE,10s) = True THEN
TableAddLine(TABLE_IP_Status,"DNS_CLOUDFLARE: "+DNS_CLOUDFLARE,"True")
CBOX_CLOUDFLARE_STATUS = True
ELSE
TableAddLine(TABLE_IP_Status,"DNS_CLOUDFLARE: "+DNS_CLOUDFLARE,"False")
CBOX_CLOUDFLARE_STATUS = False
END
TableDisplay(TABLE_IP_Status,taInit)
HourGlass(False)
RESULT bok