Recentemente me vi na obriga\u00e7\u00e3o de dividir um servidor Linux em dois pois nele coincidiam duas linhas de acesso \u00e0 internet concentrando o tr\u00e1fego e distribuindo o mesmo conforme necess\u00e1rio entre as duas linhas de acesso.<\/p>\n
Quem me conhece sabe que sou p\u00e3o duro com dinheiro alheio. Relutei bastante em dividir o servidor j\u00e1 que n\u00e3o fazia sentido ter dois quando um s\u00f3 dava conta do servi\u00e7o. Ent\u00e3o desde meados de 2008 at\u00e9 final de 2014 estamos trabalhando com o mesmo servidor que herdamos de um outro t\u00e9cnico e por sinal estava muito bem feito.<\/p>\n
Bem, o caso \u00e9 que um ataque, um v\u00edrus, uma TPM atrasada, seja l\u00e1 o que for, pode deixar o roteador fora de combate e \u00e9 nessas horas que voc\u00ea almejaria ter a simplicidade de funcionamento de uma tomada em que simplesmente tirar de um lado e colocar no outro resolveria todo o problema e seus clientes nem saberiam da sua exist\u00eancia (ou da exist\u00eancia da sua m\u00e3e, o que \u00e9 pior)<\/p>\n
Ent\u00e3o, contrario a tudo o que tenho feito, decidi que \u00e9 melhor ter dois do que um mesmo que isso me duplique o servi\u00e7o de manuten\u00e7\u00e3o e cuidados.<\/p>\n
Isto \u00e9 s\u00f3 um relato de experi\u00eancia muito particular que deu certo em um ambiente muito especifico. Disponibilizo esta informa\u00e7\u00e3o de forma gratuita e livre no intuito de ajudar tecnicamente qualquer colega mas n\u00e3o sugiro a coloca\u00e7\u00e3o deste script em ambiente de produ\u00e7\u00e3o.<\/span> <\/strong><\/p>\n Como sou um ser humano comum e almejo sombra e \u00e1gua fresca quase que constantemente, decidi fazer um par de scripts configur\u00e1veis que disponibilizo para quem queira utilizar. O que procuro \u00e9 que sem andar mexendo muito, os dois servidores se virem para alternarem a posi\u00e7\u00e3o de roteador da rede. Quero chegar num ponto em que possa por telefone dizer para o t\u00e9cnico do outro lado alguma coisa como “S\u00f3 arranca o cabo amarelo do micro B que o A assume tudo” ou alguma coisa assim.<\/p>\n Eu constru\u00ed o que lhes vou passar usando m\u00e1quinas equipadas com Ubuntu e CentOS, mas qualquer coisa que seja herdeira de Debian e Red Hat tem que funcionar. A quantidade de mem\u00f3ria e o espa\u00e7o em HD n\u00e3o s\u00e3o importantes a n\u00e3o ser para o SQUID e outros servi\u00e7os.<\/p>\n Os dois micros tem que estar conectados sobre uma mesma rede f\u00edsica. Preferivelmente cada um dos micros deve ter uma placa de rede dedicada para o ISP (o provedor de acesso \u00e0 internet). Depois vou trabalhar numa vers\u00e3o com switchs; por enquanto est\u00e1 bem assim.<\/p>\n Em cada um deles, devemos ter o servidor ssh configurado e operacional. Demais est\u00e1 dizer que precisamos liberar no firewall o porto 22 (ou qualquer outro que voc\u00ea deseje para seu servidor ssh)<\/p>\n Ent\u00e3o, resumindo: Duas pequenas m\u00e1quinas Linux com duas placas de rede. E – obviamente – os scripts que podem ser pegos aqui: http:\/\/www.inovacaosistemas.com.br\/downloads\/testes\/route-sentry.zip<\/a><\/p>\n Antes de mais nada, voc\u00ea precisa fazer com que os dois micros se conhe\u00e7am mutuamente. Aos efeitos do nosso teste, assumiremos que a eth0 tem acesso \u00e0 internet enquanto que a eth1 \u00e9 a placa de acesso interno, ou seja a que fica exposta para nossa rede conforme a seguinte tabela:<\/p>\n A placa eth0<\/strong> e a eth1:monitor<\/strong> est\u00e3o configuradas como \u00e9 costume no seu servidor. Ou seja, o script n\u00e3o vai mexer com elas. A \u00fanica coisa que ele vai fazer \u00e9 alterar a configura\u00e7\u00e3o do eth1:interna<\/strong> que \u00e9 o roteador para toda sua rede interna. Em outras palavras, ora o Micro A assumir\u00e1 o papel de roteador da rede ora o Micro B. Repare que se voc\u00ea colocar a configura\u00e7\u00e3o do eth1:interna fixa em sua configura\u00e7\u00e3o, a sua rede n\u00e3o vai funcionar como esperado, j\u00e1 que ter\u00e1 um IP conflitante<\/span><\/p>\n Para que a m\u00e1gica funcione, devemos dar a cada nodo um arquivo de configura\u00e7\u00e3o que permita ao script saber do seu parceiro e de como proceder.<\/p>\n Para o Micro A, uma configura\u00e7\u00e3o v\u00e1lida seria a seguinte:<\/p>\n J\u00e1 para o Micro B, precisar\u00edamos indicar uma configura\u00e7\u00e3o parecida com a seguinte:<\/p>\n Marquei em negrito<\/strong> o que muda de uma para outra no exemplo. Em resumo, cada um dos .ini tem a configura\u00e7\u00e3o do roteador real mais a do roteador irm\u00e3o. Essa \u00e9 a raz\u00e3o dos campos diferentes. Repare tamb\u00e9m que para detectarmos se estamos conectados \u00e0 internet, estamos utilizando o mesmo mecanismo que o Windows7 utiliza mas nada lhe impede de utilizar um outro servi\u00e7o ou criar o seu pr\u00f3prio.\u00a0 Isto aqui s\u00e3o s\u00f3 dois exemplos.<\/p>\n Para que os dois micros conversem, voc\u00ea deve compartilhar uma chave p\u00fablica com o parceiro. Os passos s\u00e3o bem simples e s\u00e3o id\u00eanticos para cada um dos micros.<\/p>\n 1) Primeiro crie um par de chaves no Micro A<\/p>\n 2) Agora copie sua identidade para o Micro B<\/p>\n Ele ir\u00e1 pedir a senha do root no micro B e se estiver certa (e seu firewall liberar e o servi\u00e7o de ssh estiver rodando no micro B) a sua identidade ter\u00e1 sido copiada para o micro B. Voc\u00ea pode conferir que foi com sucesso acessando o micro B sem senha como segue:<\/p>\n 3) Ele dever\u00e1 mostrar o conte\u00fado da pasta \/root\/ do micro B. Sem pedir a senha.<\/p>\n Repita os passos sobre o Micro B voltando ao passo 1. E a partir de esse momento seus micros conversar\u00e3o sem necessidade de senha.<\/p>\n A instala\u00e7\u00e3o consiste na simples descompacta\u00e7\u00e3o do arquivo de distribui\u00e7\u00e3o sobre a raiz da sua \u00e1rvore de diret\u00f3rios. O conte\u00fado \u00e9 o seguinte:<\/p>\n Voc\u00ea pode ver se est\u00e1 tudo ok, utilizando o rstest<\/em> como no exemplo seguinte:<\/p>\n S\u00f3 isso j\u00e1 seria suficiente para montar seu pr\u00f3prio sistema de monitoramento, mas temos mais. Se o rstest<\/em> n\u00e3o\u00a0 devolve valores satisfat\u00f3rios para a situa\u00e7\u00e3o do micro de testes, revise o seguinte checklist antes de avan\u00e7ar:<\/p>\n 1) O Firewall est\u00e1 corretamente configurado de ambos os lados? Se a resposta foi n\u00e3o para qualquer dos itens, ent\u00e3o volte ao inicio e revise.<\/p>\n O respons\u00e1vel por fazer a coisa toda funcionar \u00e9 o seguinte script:<\/p>\n O algoritmo (que deve rodar concomitantemente desde nos dois micros)\u00a0 n\u00e3o \u00e9 exaustivo no sentido em que n\u00e3o testa todas as condi\u00e7\u00f5es operacionais mas s\u00f3 as que s\u00e3o estritamente necess\u00e1rias para que um ou outro Micro assuma a fun\u00e7\u00e3o de roteador na rede.<\/p>\n Em lugar de esperar para uma coisa dar errada, ele pergunta se as coisas est\u00e3o certas. Ou seja, se est\u00e1 tudo ok, para que vou mexer? Isso – claro – deixa de lado a situa\u00e7\u00e3o em que a rede est\u00e1 operacional mas haveria uma rota mais r\u00e1pida melhor ou mais econ\u00f4mica a ser utilizada mas como esse n\u00e3o \u00e9 o prop\u00f3sito desta primeira vers\u00e3o, deixaremos para uma poss\u00edvel segunda vers\u00e3o da solu\u00e7\u00e3o.<\/p>\n Se o micro for o roteador, ele verifica se ele mesmo consegue acessar a internet. Novamente, se ele consegue acessar a internet, deixa tudo quieto.<\/p>\n Se ele n\u00e3o consegue acessar o mundo exterior, verifica se o parceiro est\u00e1 vivo. Se estiver, ent\u00e3o ele libera os IPs e volta a esperar dando tempo suficiente para o irm\u00e3o tentar assumir o controle. Se o irm\u00e3o morreu e ele mesmo n\u00e3o tem acesso \u00e0 internet, devolve uma mensagem de erro no arquivo indicado na configura\u00e7\u00e3o pois n\u00e3o tem como sair do bueiro.<\/p>\n N\u00e3o me estenderei no algoritmo, s\u00f3 direi que ele assume as fun\u00e7\u00f5es de roteador quando ele n\u00e3o \u00e9 roteador e o irm\u00e3o n\u00e3o est\u00e1 acess\u00edvel ou n\u00e3o consegue navegar no mundo exterior.<\/p>\n Repare que n\u00e3o h\u00e1 ordens de um ao outro, s\u00f3 perguntas. Isso evita de termos um \u00e1rbitro entre os dois Micros.\u00a0 Dito de outra forma, os dois fazem o melhor esfor\u00e7o para manter a rede funcionando. Ganha o que chega primeiro.<\/p>\n Para testar, rode ele nos dois micros.<\/p>\n Se tudo estiver ok, coloque ele para rodar no \/etc\/rc.local ou onde sua distribui\u00e7\u00e3o goste acrescentando a seguinte linha nos dois micros:<\/p>\n Um pouco de hist\u00f3ria Recentemente me vi na obriga\u00e7\u00e3o de dividir um servidor Linux em dois pois nele coincidiam duas linhas de acesso \u00e0 internet concentrando o tr\u00e1fego e distribuindo o mesmo conforme necess\u00e1rio entre as duas linhas de acesso. Quem me conhece sabe que sou p\u00e3o duro com dinheiro alheio. Relutei bastante em dividir […]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[95],"tags":[90,92,87,91,89,88],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5O6UV-3f","jetpack-related-posts":[{"id":321,"url":"http:\/\/www.yeapf.com\/wp\/?p=321","url_meta":{"origin":201,"position":0},"title":"Server Side Events com YeAPF","date":"janeiro 19, 2017","format":false,"excerpt":"Manter uma tela com dados din\u00e2micos atualizados n\u00e3o \u00e9 f\u00e1cil. Uma solu\u00e7\u00e3o \u00e9 empregar XMLHttpRequest e ficar fazendo polling sobre uma base de tempo regular. Assim perguntar\u00edamos ao servidor se h\u00e1 modifica\u00e7\u00f5es sobre o escopo desejado. O problema desta aproxima\u00e7\u00e3o \u00e9 que ficamos fazendo um monte de requisi\u00e7\u00f5es ao servidor\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":318,"url":"http:\/\/www.yeapf.com\/wp\/?p=318","url_meta":{"origin":201,"position":1},"title":"Usando btSync para sincronizar e desenvolver em equipe.","date":"novembro 28, 2016","format":false,"excerpt":"Um dos grandes desafios do desenvolvimento grupal \u00e9 manter o c\u00f3digo sincronizado. Concordo, claro, com aqueles que utilizam as ferramentas git\u00a0para poder criar uma vers\u00e3o tempor\u00e1ria (e pessoal) do c\u00f3digo e depois se enganchar de novo com a \u00e1rvore principal. \u00c9 obvio que\u00a0git \u00e9 bem melhor que\u00a0svn por exemplo. Muit\u00edssimo\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":454,"url":"http:\/\/www.yeapf.com\/wp\/?p=454","url_meta":{"origin":201,"position":2},"title":"Node + Electron + YeAPF","date":"agosto 3, 2018","format":false,"excerpt":"Saladas s\u00e3o boas. Por isso o t\u00edtulo mistura tr\u00eas coisas que j\u00e1 sozinhas s\u00e3o boas. O node te permite escrever aplicativos do lado do servidor ou do cliente usando a mesma linguagem: JavaScript. Neste vamos usa-lo para criar um aplicativo do lado cliente com t\u00e9cnicas de web (HTML5, CSS3 e\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"https:\/\/i2.wp.com\/www.yeapf.com\/wp\/wp-content\/uploads\/2018\/08\/Mixed-Green-Salad-with-Eggs-3-930x543.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":225,"url":"http:\/\/www.yeapf.com\/wp\/?p=225","url_meta":{"origin":201,"position":3},"title":"Firewall simples","date":"janeiro 12, 2015","format":false,"excerpt":"Situa\u00e7\u00e3o O iptables nos fornece uma ferramenta poderosa para a constru\u00e7\u00e3o de firewalls com m\u00e1quinas linux. Algumas vezes a gera\u00e7\u00e3o e manuten\u00e7\u00e3o desses firewalls se torna complexa demais e - via de regra - os departamentos de TI tem pessoal de menos para a cada vez mais imensa tarefa. A\u2026","rel":"","context":"Em "Route Sentry"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":237,"url":"http:\/\/www.yeapf.com\/wp\/?p=237","url_meta":{"origin":201,"position":4},"title":"Mudando todas as senhas de uma rede Linux heterog\u00eanea","date":"mar\u00e7o 24, 2015","format":false,"excerpt":"Me deparei esses dias com o seguinte problema: alterar as senhas de um grupo de servidores ao mesmo tempo. De inicio parece um problema simples, mas depois vimos que havia o problema dos certificados de autentica\u00e7\u00e3o com o que alguns usu\u00e1rios entravam nos servidores e para piorar, alguns servidores precisam\u2026","rel":"","context":"Em "Servidores"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":25,"url":"http:\/\/www.yeapf.com\/wp\/?p=25","url_meta":{"origin":201,"position":5},"title":"Primeiros passos com YeAPF","date":"fevereiro 22, 2014","format":false,"excerpt":"Tive oportunidade de ver minha irm\u00e3 mais nova andar sozinha pela primeira vez e nunca mais esqueci da experi\u00eancia. \u00a0Anos depois naceram os filhos e o impacto \u00e9 tremendo. Brinco com quem programa usando YeAPF de que s\u00e3o meus filhos, carinhosamente. Por isso que os primeiros passos s\u00e3o importantissimos para\u2026","rel":"","context":"Em "Yet Another PHP Framework"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/201"}],"collection":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=201"}],"version-history":[{"count":14,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/201\/revisions"}],"predecessor-version":[{"id":220,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/201\/revisions\/220"}],"wp:attachment":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=201"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}Prop\u00f3sito<\/h5>\n
Ingredientes necess\u00e1rios<\/h5>\n
\n\n
\n Ubuntu<\/td>\n<\/tr>\n \n \n # se j\u00e1 tem o UFW instalado, pode pular esta parte at\u00e9 a libera\u00e7\u00e3o do porto 22\r\n$ apt-get update\r\n$ apt-get install ufw\r\n$ ufw enable\r\n\r\n# libere o porto 22\r\n$ ufw allow 22<\/pre>\n<\/td>\n<\/tr>\n
\n CentOS (At\u00e9 a vers\u00e3o 6)<\/td>\n<\/tr>\n \n \n nano \/etc\/sysconfig\/iptables\r\n# verifique que haja uma linha assim:\r\niptables -A INPUT -p tcp --dport 22 -j ACCEPT\r\n# depois volte ao console com ctrl-x e garanta o servi\u00e7o\r\nchkconfig iptables on\r\nservice iptables restart<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n
Formando a irmandade<\/h5>\n
\n\n
\n <\/td>\n Micro A<\/td>\n Micro B<\/td>\n<\/tr>\n \n Fun\u00e7\u00e3o<\/td>\n Roteador Principal<\/td>\n Roteador Alternativo<\/td>\n<\/tr>\n \n eth0<\/td>\n 201.b.c.d<\/td>\n 197.b.c.d<\/td>\n<\/tr>\n \n eth1:monitor<\/td>\n 10.0.0.1<\/td>\n 10.0.0.2<\/td>\n<\/tr>\n \n eth1:interna*<\/td>\n 192.168.0.100<\/td>\n 192.168.0.100<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n [config]\r\nlogfile=\/var\/log\/rs.log\r\n\r\n[main]\r\ntarget=8.8.4.4 208.67.222.222\r\ninterface=eth0\r\nip=201.b.c.d<\/strong>\r\nmask=255.255.255.224\r\ngateway=201.b.c.x<\/strong>\r\n\r\n[internet]\r\nhost=http:\/\/www.msftncsi.com\/ncsi.txt\r\nexpectedReturn=Microsoft NCSI\r\n\r\n[helmet]\r\ninterface=eth1\r\nsibling=10.0.0.2<\/strong>\r\nsshport=22\r\nsshuser=root\r\nip1=192.168.0.100<\/span><\/em><\/pre>\n[config]\r\nlogfile=\/var\/log\/rs.log\r\n\r\n[main]\r\ntarget=8.8.4.4 208.67.222.222\r\ninterface=eth0\r\nip=197.b.c.d<\/strong>\r\nmask=255.255.255.224\r\ngateway=197.b.c.x<\/strong>\r\n\r\n[internet]\r\nhost=http:\/\/www.msftncsi.com\/ncsi.txt\r\nexpectedReturn=Microsoft NCSI\r\n\r\n[helmet]\r\ninterface=eth1\r\nsibling=10.0.0.1<\/strong>Nor\r\nsshport=22\r\nsshuser=root\r\nip1=192.168.0.100<\/span><\/em><\/pre>\n
\nMarquei em verde<\/span><\/em> a linha IP1=192.168.0.100<\/span><\/em> pois esse IP \u00e9 o compartilhado entre os dois. \u00c9 esse o IP que o script far\u00e1 o micro assumir quando perceber que o irm\u00e3o dele n\u00e3o \u00e9 o roteador padr\u00e3o da rede.<\/p>\n\n\n
\n Servi\u00e7o<\/td>\n Resultado<\/td>\n<\/tr>\n \n \n http:\/\/www.msftncsi.com\/ncsi.txt<\/pre>\n<\/td>\n
\n Microsoft NCSI<\/pre>\n<\/td>\n<\/tr>\n
\n \n http:\/\/www.inovacaosistemas.com.br\/internetAlive.txt<\/pre>\n<\/td>\n
\n Internet Alive<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n
$ sudo ssh-keygen<\/strong> \r\nGenerating public\/private rsa key pair.\r\nEnter file in which to save the key (\/home\/root\/.ssh\/id_rsa): [enter]<\/strong>\r\nEnter passphrase (empty for no passphrase): [enter]<\/strong>\r\nEnter same passphrase again: [enter]<\/strong>\r\nYour identification has been saved in \/home\/root\/.ssh\/id_rsa.\r\nYour public key has been saved in \/home\/root\/.ssh\/id_rsa.pub.\r\nThe key fingerprint is:\r\nf4:91:ba:e0:be:dd:4d:df:2a:f2:1e:1e:e0:c4:03:d9 root@inovacaosistemas\r\n<\/pre>\n
$ sudo ssh-copy-id root@10.0.0.2<\/strong><\/pre>\n
$ ssh root@10.0.0.2 ls \/root\/<\/strong><\/pre>\n
Instalando os scripts<\/h5>\n
.\r\n\u251c\u2500\u2500 etc\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 route-sentry.ini\r\n\u2514\u2500\u2500 usr\r\n\u00a0\u00a0\u00a0 \u2514\u2500\u2500 sbin\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u251c\u2500\u2500 rscmd\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u251c\u2500\u2500 rsd\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u251c\u2500\u2500 rs-lib.sh\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u2514\u2500\u2500 rstest<\/pre>\n
$ rstest<\/strong>\r\nisHostOnline 127.0.0.1 = 1\r\nCurrent GW = 192.168.42.129\r\nisMyGatewayAlive = 0\r\nisCommonGWReachable = 1\r\namIRouter = 0\r\nisSiblingAlive = 1\r\nisOutsideWorldReachable = 1\r\nisSiblingRouting =<\/pre>\n
\n2) Posso conectar-me desde o Micro A ao Micro B sem senha?
\n3) Posso conectar-me do Micro B ao Micro A sem senha?
\n4) Tenho o route-sentry.ini bem configurado em ambos os lados?<\/p>\nO miolo do assunto<\/h5>\n
#!\/bin\/bash\r\n#\r\n# (C) 2014 Esteban Daniel Dortta\r\n# Router Sentry Daemon\r\n#\r\n\r\nmy_dir=\"$(dirname \"$0\")\"\r\nsource \"$my_dir\/rs-lib.sh\"\r\n\r\nwhile [ 1 -gt 0 ]; do\r\n\u00a0 amIrouter\r\n\u00a0 if [ $? -lt 1 ]; then\r\n\u00a0\u00a0\u00a0 isSiblingRouting\r\n\u00a0\u00a0\u00a0 if [ $? -lt 1 ]; then\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 holdRouterRole\r\n\u00a0\u00a0\u00a0 fi\r\n\u00a0 else\r\n\u00a0\u00a0\u00a0 isOutsideWorldReachable\r\n\u00a0\u00a0\u00a0 if [ $? -lt 1 ]; then\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 isSiblingAlive\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 if [ $? -lt 1 ]; then\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 rslog \"FATAL ERROR: Internet nor sibling are reachable\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 else\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 releaseRouterRole\r\n sleep 30\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 fi\r\n\u00a0\u00a0\u00a0 fi\r\n\u00a0 fi\r\n\u00a0 sleep 10\r\ndone<\/pre>\n
\/usr\/sbin\/rsd<\/pre>\n
\/usr\/sbin\/rsd &<\/pre>\n","protected":false},"excerpt":{"rendered":"