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.
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:
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.
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:
Eu não testei esses exemplos especificamente, mas usei similar no passado com sucesso.
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.
Tags networking iptables routing nat linux