#!/bin/bash #---------------------------# # CONFIGURAÇÃO DOS GATEWAYS # #---------------------------# GW1=10.0.2.2 GW2=192.168.1.1 LOG=/root/rc.firewall.log #------------------------------# # INÍCIO DA FUNÇÃO DE FAILOVER # #------------------------------# # Aqui optei em por uma função para deixar a estrutura do # script mais organizada e legível. É de suma importância # que você esteja familiarizado com o shell script failover () { # Criação de um loop infinito para testar a disponibilidade # dos links de internet while [ 1 ] do # Altera sempre para o gateway padrão dentro da tabela # main de roteamento, ou seja, quando o link primário voltar, # automáticamente a navegação volta para este /sbin/ip route replace default via $GW1 # Neste for, o comando dig retornará os dois IPs relacionados # ao site do UOL. Você poderia por qualquer site aí, porém o UOL # retorna dois IPs que serão utilizados pelo script para saber # se o link de internet principal está fora for i in `dig +short uol.com.br` do # Verificando a comunicação do link de internet /bin/ping -c 1 $i done # Caso o resultado do comando anterior seja 0 (zero), o link # de internet principal está ok. Se for 1 (um) houve falha no comando # deduzindo assim ausência de conexão. Quem vai determinar isso é o # comando echo $?. Mais abaixo, haverá um if para testar as condições STATUS_CMD_LINK=`echo $?` if [ $STATUS_CMD_LINK -eq 0 ]; then # Caso haja sucesso no teste do comando do ping # as regras para o compartilhamento de internet serão inseridas /sbin/iptables -F /sbin/iptables -t nat -F /sbin/modprobe iptable_nat echo 1 > /proc/sys/net/ipv4/ip_forward /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE else # Se o link falhar, os comandos mais abaixo farão a limpeza # das regras de iptables e irão configurar o segundo link de internet # e será criado um arquivo de log informando quando houve a queda echo "_________________________" >> $LOG echo " " >> $LOG echo "# LINK SECUNDARIO ATIVO.: `date +%d/%m/%y-%H:%M:%S`">> $LOG echo " " >> $LOG echo "_________________________" >> $LOG /sbin/ip route replace default via $GW2 /sbin/iptables -F /sbin/iptables -t nat -F /sbin/modprobe iptable_nat echo 1 > /proc/sys/net/ipv4/ip_forward /sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE fi # A cada 2 minutos (120 segundos) será feito um teste no link # principal para constar se o mesmo encontra-se no ar. sleep 120 done } ####### CHAMA A FUNÇÃO ######## failover
sexta-feira, 6 de fevereiro de 2015
Configuração de failover de links de internet
Dicas rápidas para linha de comando!
#1 - ASSISTA STAR WARS EM MODO ASCII
Dê o seguinte comando no shell:$telnet towel.blinkenlights.nlAgora é só curtir o filme. :D
#2 - DESCUBRA SEU IP EXTERNO PELA LINHA DE COMANDO
De vez em sempre precisamos saber o nosso IP dinâmico externo fornecido pela operadora. Existem N formas de fazer isso. Aqui vou passar somente algumas dicas para a linha de comando, pois é a forma que julgo mais rápida, até mais rápida do que ter de acessar a página de configuração do roteador/modem para consultar o IP adquirido.- Usando wget: (utilize qualquer uma das opções, encontre a que você achar mais eficiente)
$wget -qO - icanhazip.com $wget -qO - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' $wget -qO - ifconfig.me $wget -qO - ip.appspot.com $wget http://ipecho.net/plain -O - -q ; echo
- Usando curl: (utilize qualquer uma das opções, encontre a que você achar mais eficiente)
$curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' $curl -s checkip.dyndns.org | grep -Eo '[0-9\.]+' $curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+" $curl -s monip.org | iconv -f iso-8859-1 | sed -n 's/.*IP : \([0-9.]*\).*/\1/p' $curl ifconfig.me $curl ipecho.net/plain $curl icanhazip.com $curl ipv4.icanhazip.com (explicitamente evoca o IPv4) $curl ipv6.icanhazip.com (explicitamente evoca o IPv6) $curl curlmyip.com #curl l2.io/ip $curl ip.appspot.com $curl ifconfig.me/ip $curl eth0.me
- Com JSON caso você queira:
$curl httpbin.org/ip $curl wtfismyip.com/json
- Usando dig:
$dig +short myip.opendns.com @resolver1.opendns.com
- Usando lynx:
$lynx -dump checkip.dyndns.org | grep 'Current IP Address:' $lynx -dump eth0.me $lynx --dump monip.org | grep 'IP'
Não vou me prolongar mais nesta parte, com oeu disse: EXISTEM "N" MANEIRAS PARA SE CHEGAR AO MESMO RESULTADO! Cabe a você escolher a que achar melhor. Faça alterações nos comandos, faça suas experiências, adapte-os. Basta olhar na lista e verá que exitem várias adaptações e modificações para um mesmo comando principal. O que influencia no final é sua escolha. Finalizando esta parte, indico uma última alternativa: Quem usa Debian/Ubuntu pode instalar, caso já não tenha instalado, o pequeno programa miniupnpc se o seu roteador/modem tiver suporte para UPnP. Depois de instalado é só executar:$upnpc -s | grep ^ExternalIPAddress | cut -c21-
Esse comando fará o mesmo que todos os outros indicados nesta seção: te mostrará seu IP dinâmico externo.
Dica
Você pode criar um shell script simples com algum dos comandos acima para tornar o processo ainda mais rápido. Exemplo#!/bin/bash #Cria váriável e atribui valor MYDINIPADDRESS="`curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`" echo "\n O seu endereço IP externo é: $MYDINIPADDRESS"Salve o arquivo (de preferência coloque a extensão .sh), torne-o executáve alterando suas permissões e depois é só executar.
#3 - EXTRAINDO TEXTO PURO DE ARQUIVOS HTML
Certa vez precisei extrair texto puro de um arquivo html. Encontrei várias opções de conversores e etc, mas a maneira mais rápida e eficaz para mim foi utilizando o lynx.Basta executar o comando:
$lynx --dump arquivo.html > arquivo.txtFunciona também com arquivos PHP
#4 - UM POUCO DE CURL
Alguns usos úteis do curl:- Baixando arquivos:
$curl -o nome_arquivo_local http://url_direta_para_o_arquivo
Este comando funciona mesmo com binários, desde que você tenha o link direto para o arquivo - Baixando/Upando arquivos de/para servidores FTP:
$curl -u ftpuser:ftppass -O ftp://diretório_do_servidor/nome_do_arquivo
O comando acima baixa o arquivo e salva no diretório local$curl -u ftpuser:ftppass -O ftp://diretório_do_servidor/outro_diretório/
O comando acima lista todo o conteúdo existente em outro_diretório$curl -u ftpuser:ftppass -T arquivo.txt ftp://ftp.algumserver.org
O comando acima upará o arquivo.txt para o servidor$curl -u ftpuser:ftppass -T "{arquivo1,arquivo2}" ftp://ftp.algumserver.org
O curl permite upar vários arquivos de uma vez, exatamente como feito no exemplo acima. Você também pode utilizar curingas, como no comando abaixo, onde todos arquivos que satisfazerem a expressão serão baixados:$curl ftp://ftp.server.org/downloads/linux/[a-z]/
O curl é possui grande poder e versatilidade (aliás, todo o Linux é assim :D), os comandos aqui foram apenas uma simples mostra. Não vou aprofundar ou então deixar de ser "Dicas rápidas para linha de comando!"
#5 - COMANDOS ÚTEIS
- Testando se uma porta está aberta com o comando echo:
$echo >/dev/tcp/xxx.xxx.xxx.xxx/53 && echo "open"
No lugar do xxx.xxx.xxx.xxx coloque o endereço IP que deseja testar - Criando senhas aleatórias:
< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-10};echo;
Esta senha possui 10 caracteres. Altere a quantidade de caracteres desejados editando o comando em: {1:-10} - Exibir nome de dono do arquivo ou diretório:
$stat -c %U arquivo.txt
- Exibindo o IP local:
$ifconfig | grep "inet end.:" | awk '{print $3}' | grep -v '127.0.0.1' | cut -f2 -d:
Este comando pode não funcionar em sua máquina dependendo do sistema e configuração. Se não funcionar você deve efetuar as devidas alterações no mesmo. Ex.: seu sistema pode estar em inglês, neste caso, "grep "inet end.:"" deve ser alterado para "grep "inet addr:"", etc, etc. Existe um comando mais rápido: "$ip addr show". Minha intenção foi mais uma vez demonstrar como existem vários caminhos para se chegar ao mesmo resultado. - Star Wars DNS
$traceroute 216.81.59.173
O comando acima te dará o traceroute de Star Wars.. Não entendeu? Execute.$( seq 1 8 200 ; seq 6 8 200 ) | sort -n | xargs -I{} -n 1 dig +short -x 206.214.251.{}
Acima: Star Wars Episodio IV em DNS reverso
http://www.dicas-l.com.br/arquivo/dicas_rapidas_para_linha_de_comando.php#.VNSaqzVVKlM
Assinar:
Postagens (Atom)