De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Usando rotas arbitrárias para contornar problemas

Colaboração: Bruno Buys

Data de Publicação: 31 de janeiro de 2014

Se você tem duas conexões à Internet disponíveis para o seu computador, saiba que é possível direcionar o tráfego de Internet entre elas de forma muito sofisticada e criativa. Com a flexibilidade do Software Livre você pode criar suas próprias regras de direcionamento. Não precisa ficar restrito ao paradigma do 'um caminho padrão' e só.

Por exemplo, imagine que o seu computador tem uma rede com fio na interface eth0 e também uma conexão 3G (ppp0). Tipicamente, quem tem uma config destas usa ou uma conexão ou a outra. Nunca as duas ao mesmo tempo.

Mas se a rede com fio apresenta qualquer tipo de filtro ou bloqueio a sites (caso de redes corporativas), ou se sofre de "instabilidades" (durante um bom tempo minha NET bloqueou o skype), você pode rotear pelo 3G os sites afetados. Pode também criar regras para poupar conexões cobradas por franquia de dados.

Nesse exemplo mostro como pesquisar IP's e inserir regras arbitrárias na tabela de roteamento, de forma a criar exceções ao caminho-padrão. Em bom português, o roteamento do sistema, que era "Para quaisquer redes diferentes da nossa, use o caminho-padrão em eth0" fica assim: "Para quaisquer redes diferentes da nossa, use o caminho-padrão em eth0, com exceção destas redes aqui, cujo roteamento será via usb0".

Mão na massa:

O computador exemplo está ligado à Internet pelo caminho-padrão em eth0, e ao 3G via usb0, em um celular rodando um programa para hotspot (mais sobre isso aqui) . O mesmo resultado pode ser obtido se usando o celular como modem (ppp0). Usando o network-manager, conecto antes via eth0, e depois via 3G. Isso deixa o computador com o caminho-padrão em eth0, e a rede em usb0 disponível, mas não como padrão.

Usando o domínio da Free Software Foundation como exemplo, vou pesquisar o seu IP, para inserir uma exceção:

  dig fsf.org

Isso retorna:

  ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> fsf.org
  ;; global options: +cmd
  ;; Got answer:
  ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39030
  ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 0
  
  ;; QUESTION SECTION:
  ;fsf.org.            IN    A
  
  ;; ANSWER SECTION:
  fsf.org.        183    IN    A    208.118.235.131
  
  ;; AUTHORITY SECTION:
  fsf.org.        183    IN    NS    ns1.gnu.org.
  fsf.org.        183    IN    NS    ns2.gnu.org.
  fsf.org.        183    IN    NS    ns3.gnu.org.
  
  ;; Query time: 51 msec
  ;; SERVER: 10.2.10.11#53(10.2.10.11)
  ;; WHEN: Wed Jan 29 16:35:02 2014
  ;; MSG SIZE  rcvd: 99

Na seção ANSWER, vejo lá que o IP é 208.118.235.131. Então insiro a regra:

  route add -net 208.118.235.0/24 gw IP-da-conexão-usb0

O último número do IP (131) foi trocado para 0/24, o que simboliza a rede dentro de "208.118.235", ou seja, todos os IP's. O significado deste comando é "envie quaisquer pedidos para a rede "208.118.235" via usb0.

O parâmetro "IP-da-conexão-usb0" poderia ser melhor chamado de caminho-padrão, mas estou tentando evitar confusão, já que o padrão está em eth0. Esse IP é o da máquina ao qual o computador está conectado, ou seja, o "servidor" que o hotspot do celular cria.

Você pode definir IP's únicos também, mudando de -net para -host:

  route add -host 208.118.235.131 gw IP-da-conexão-usb0

Observação: muitos sites optam por carregar conteúdos "externos" via outros sites (e consequentemente, outros IP's). Redes sociais, por exemplo, podem ter servidores de imagens, que as carregam mais rápido. Para que a página carregue corretamente você terá que inserir exceções para estes sites também.

Para inserir novos sites, simplesmente pesquise de novo com o dig, e insira quantas regras forem necessárias.

O resultado disso tudo é que o computador usa dois links à Internet ao mesmo tempo, encaminhando a maioria dos pedidos via o caminho-padrão em eth0, mas um grupo arbitrário de sites definidos por você será encaminhado via usb0, ou qualquer outra conexão que você tenha disponível.

Minha tabela de roteamento, antes (IP's foram mascarados):

  Tabela de Roteamento IP do Kernel
  Destino         Roteador        MáscaraGen.    Opções Métrica Ref   Uso Iface
  0.0.0.0         20.20.20.0      0.0.0.0         UG    0      0        0 eth0
  20.20.20.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
  169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0

Minha tabela de roteamento, depois:

  Tabela de Roteamento IP do Kernel
  Destino             Roteador        MáscaraGen.    Opções Métrica Ref   Uso Iface
  0.0.0.0             20.20.20.0      0.0.0.0         UG    0      0        0 eth0
  10.20.20.0          0.0.0.0         255.255.255.0   U     0      0        0 eth0
  10.11.12.0          0.0.0.0         255.255.255.0   U     0      0        0 usb0
  169.254.0.0         0.0.0.0         255.255.0.0     U     1000   0        0 eth0
  208.118.235.131     10.11.12.1      255.255.255.0   UG    0      0        0 usb0

Esta última é a rota arbitrária, com o IP da Free Software Foundation roteado via usb0.

O route é o /sbin/route, parte do pacote net-tools. O dig é o /usr/bin/dig, parte do dnsutils.

Não faz muito sentido tentar inserir estas regras na inicialização, uma vez que a conexão com o servidor 10.11.12.1 não estará sempre disponível, como é o caso em conexões 3G. Sem a conexão, o comando dá erro. Mas você pode criar um script trivial e salvar em /root para não precisar rodar na mão estes comandos repetitivamente. É só rodá-lo *após* conectar ao 3G.

  #!/bin/bash
  
  # Configura rotas para selecionar o 3G como rota
  # Atenção: isso é dependente de o IP do hotspot do N900 permanecer como 10.11.12.1
  
  # Servidor da FSF
  route add -host 208.118.235.131 gw 10.11.12.1

Feliz hacking!

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Bruno Buys