Selecionando o gateway no nível do aplicativo no Linux

1

Eu quero decidir em nível de aplicativo qual gateway usar para se conectar à Internet.

Não pode ser feito por regras simples de sub-rede, porque é realmente o aplicativo que deve ser capaz de decidir qual gateway usar.

Por exemplo Eu quero usar o curl para baixar algo e eu quero especificar de alguma forma qual gateway usar.

É uma caixa do Linux com apenas uma placa de rede, endereço IP 10.0.0.1. Existem dois ou mais gateways (ISPs diferentes): por ex. 10.0.0.100 e 10.0.0.101.

É possível configurar regras de roteamento com iptables e iproute2 para gerenciar isso? Como eu digo a um aplicativo qual rota usar?

Eu tentei isso:
Eu adicionei em / etc / iproute2 / rt_tables: 100 out2
ip rule add prio 200 de 10.0.0.2 lookup out2
ip route add 10.0.0.0/24 dev eth0 src 10.0.0.2 tabela out2
ip route add default via 10.0.0.100 dev eth0 src 10.0.0.2 tabela out2
Ainda "telnet -b 10.0.0.2 www.google.com 80" retorna "a rede está inacessível"

    
por pintpint 06.01.2012 / 16:37

2 respostas

2

Eu posso pensar em uma maneira de fazer isso, que é a seguinte.

  1. Defina dois endereços IP em seu NIC como 10.0.0.1 & 10.0.0.2. Isso deve ser fácil e direto. Isso pode ser feito usando ifconfig .
  2. Configure o roteamento baseado em origem, de forma que cada IP de origem seja roteado para um dos gateways padrão. Este link pode ajudar você.
  3. Finalmente, você pode dizer ao seu aplicativo para usar bind um dos endereços 10.0.0.1 ou 10.0.0.2. Dessa forma, você pode escolher um dos gateways, dependendo do IP de origem selecionado. Para testar isso, você pode usar a opção telnet with -b source_ip .

Aqui estão os comandos que usei anteriormente para ativar o roteamento baseado em origem:

$ sudo ip rule add from 10.0.0.2 tab 1 priority 500
$ sudo ip route add default via 10.0.0.101 dev eth0 tab 1
$ sudo ip route flush cache

Se você tiver o gateway padrão definido como 10.0.0.100, isso deve funcionar para você. Os pacotes enviados de 10.0.0.1 devem ser enviados para o gateway padrão, e os pacotes enviados de 10.0.0.2 devem ser enviados para o segundo gateway 10.0.0.101 conforme as instruções acima.

    
por 06.01.2012 / 19:19
0

Outra opção. Um monte de CLI utiliza variáveis de ambiente para fazer este tipo de configuração, http_proxy pode ser relevante para a sua situação, link

    
por 07.01.2012 / 03:57