Roteando o tráfego de aplicativos através da interface específica

3

Primeira pergunta aqui, então, por favor, seja fácil:

Eu tenho um servidor debian linux 5.0 com duas interfaces públicas. Eu gostaria de encaminhar o tráfego de saída de uma instância de um aplicativo através de uma interface e a segunda instância através da segunda interface. Existem alguns desafios:

  • as duas instâncias do aplicativo usam o mesmo protocolo
  • as duas instâncias do aplicativo podem acessar a Internet inteira (não é possível rotear com base na rede dest)
  • não posso alterar o código da aplicação
  • Eu não acho que uma abordagem típica para balanceamento de carga de todo o tráfego funcione bem, porque há relativamente poucos servidores de destino sendo acessados no tráfego de saída, e todo o tráfego realmente precisaria ser distribuído uniformemente por esses relativamente poucos servidores.

Eu provavelmente poderia executar dois servidores virtualizados na caixa e ligar cada um deles a uma interface diferente, mas estou procurando uma solução mais simples, talvez usando iproute ou iptables?

Alguma idéia para mim? Agradecemos antecipadamente - e estamos felizes em responder a todas as perguntas.

    
por UnicornsAndRainbows 01.04.2010 / 07:51

3 respostas

5

Você viu o módulo owner no iptables, possivelmente combinado com uma regra NAT de origem?

Isso permite que você configure OUTPUT regras de cadeia com base em UID, GID, PID, SID e nome do comando.

    
por 01.04.2010 / 10:15
1

Acredito que a melhor opção é vincular cada aplicativo a um IP diferente e usar roteamento baseado em origem para alterar quais pacotes de interface desse IP de origem são transmitidos.

A ideia geral é que você pode criar várias tabelas de roteamento paralelas ('ip route' possui um parâmetro opcional 'table'). Então você adiciona uma regra dizendo "se é de IP [x.x.x.x] então use a tabela [foo]".

Então:

  • Crie tabelas de roteamento [foo1, foo2] em / etc / iproute2 / rt_tables
  • Preencha as tabelas de roteamento (algo como "ip" rota adicionar gateway padrão 1.2.3.4 dev eth0 table foo1 "da mesma forma para foo2)
  • Crie regras para dizer qual tabela usar com base no IP de origem - "regra ip adicione de 1.2.3.2/32 tabela foo1 "," ip regra add from 1.2.3.3/32 tabela foo2 ".

Eu não testei esses exemplos especificamente, mas usei similar no passado com sucesso.

    
por 01.04.2010 / 09:03
0

Existe suporte no linux para vincular um aplicativo a um IP específico (usado, por exemplo, pelo Apache). Se o seu aplicativo não suportar isso, você está sem sorte.

Não tenho conhecimento de nenhum módulo do kernel do linux (porque é isso que você precisaria) para ligar um aplicativo específico a uma interface, mesmo quando ele tenta se ligar a *. Usar uma máquina virtual é uma possibilidade.

A coisa mais próxima que eu posso fazer das suas necessidades, se não houver suporte de aplicativo, é a ligação de interface Ethernet ( link ). Mas então você só estaria executando uma instância do aplicativo em várias interfaces com o mesmo ip.

    
por 01.04.2010 / 08:47