Adicionando rotas de forma massiva a partir de um arquivo
Dica publicada em Linux / Redes
Adicionando rotas de forma massiva a partir de um arquivo
Às vezes precisamos desviar o tráfego de um determinado serviço para um segundo link de internet menos utilizado.
A forma mais comum é criar uma rota para um host de destino apontando para o segundo gateway, porém algumas empresas têm tantos hosts que se torna quase inviável fazer isso de forma manual, alguns exemplos são:
Contudo existe uma forma de automatizar esse processo, nessas ocasiões o comando "for" salva várias horas de digitação.
1 - Criei um arquivo para adicionar as redes e hosts que precisam ter o tráfego desviado:
# vim /tmp/redes
2 - Adicionei as redes e hosts, exemplo:
3 - Usando de exemplo o IP do Gateway de internet é 200.200.200.1 e a interface de saída eth0, podemos usar os seguintes comandos para adicionar as rotas.
Adicionado hosts:
# for i in `cat /tmp/redes | grep -v [/]`; do route add -host $i gw 200.200.200.1 dev eth0; done
Adicionando redes:
# for i in `cat /tmp/redes | grep [/]`; do route add -net $i gw 200.200.200.1 dev eth0; done
Detalhando:
for i in `cat /tmp/redes | grep -v [/]`;
do route add -host $i gw 200.200.200.1 dev eth0;
Inicia a repetição do "for", assim o conteúdo da variável $i se torna o conteúdo do arquivo e adiciona rota para todos os hosts e redes.
O "done" finaliza o for.
A saída dos comandos será:
route add -host 31.13.64.51 gw 200.200.200.1 dev eth0
route add -host 50.133.94.46 gw 200.200.200.1 dev eth0
route add -net 50.92.225.64/27 gw 200.200.200.1 dev eth0
route add -net 62.62.198.204/30 gw 200.200.200.1 dev eth0
A forma mais comum é criar uma rota para um host de destino apontando para o segundo gateway, porém algumas empresas têm tantos hosts que se torna quase inviável fazer isso de forma manual, alguns exemplos são:
- Office365 - https://support.office.com/en-us/article/Office-365-URLs-and-IP-address-ranges-8548a211-3fe7-47cb-abb1-355ea5aa88a2
- Whatsapp - https://www.whatsapp.com/cidr.txt
Contudo existe uma forma de automatizar esse processo, nessas ocasiões o comando "for" salva várias horas de digitação.
1 - Criei um arquivo para adicionar as redes e hosts que precisam ter o tráfego desviado:
# vim /tmp/redes
2 - Adicionei as redes e hosts, exemplo:
31.13.64.51
50.92.225.64/27
50.133.94.46
62.62.198.204/30
50.92.225.64/27
50.133.94.46
62.62.198.204/30
3 - Usando de exemplo o IP do Gateway de internet é 200.200.200.1 e a interface de saída eth0, podemos usar os seguintes comandos para adicionar as rotas.
Adicionado hosts:
# for i in `cat /tmp/redes | grep -v [/]`; do route add -host $i gw 200.200.200.1 dev eth0; done
Adicionando redes:
# for i in `cat /tmp/redes | grep [/]`; do route add -net $i gw 200.200.200.1 dev eth0; done
Detalhando:
for i in `cat /tmp/redes | grep -v [/]`;
- O for é responsável por ler o arquivo e jogar o valor de cada linha na variável "i".
- O "grep -v [/]" traz tudo que não contiver barra, ou seja, apenas os host.
- O "grep [/]" traz apenas o que contiver barra, apenas as redes.
do route add -host $i gw 200.200.200.1 dev eth0;
Inicia a repetição do "for", assim o conteúdo da variável $i se torna o conteúdo do arquivo e adiciona rota para todos os hosts e redes.
O "done" finaliza o for.
A saída dos comandos será:
route add -host 31.13.64.51 gw 200.200.200.1 dev eth0
route add -host 50.133.94.46 gw 200.200.200.1 dev eth0
route add -net 50.92.225.64/27 gw 200.200.200.1 dev eth0
route add -net 62.62.198.204/30 gw 200.200.200.1 dev eth0