Alterar o gateway padrão para um programa específico?

0

Eu tenho uma máquina hospedada em datacenter com 3 interfaces de rede.

Interface  network         ip address
eth0       192.168.1.0/24  192.168.1.10
eth1       192.168.2.0/24  192.168.2.10
eth2       192.168.3.0/24  192.168.3.10

Meu gateway padrão é definido como 192.168.2.1, onde posso acessar alguns serviços fornecidos pelo datacenter (repositórios, ntp e assim por diante).

A rede 192.168.1.0/24 tem um gateway em 192.168.1.1, através do qual eu posso acessar o mundo externo, onde os dragões vivem. Quando eu preciso sair do meu servidor, simplesmente adiciono uma rota estática. Eu gosto dessa configuração, pois sei onde meu servidor está se conectando.

Agora, tenho um cliente de e-mail (exim4) que precisa enviar e-mails ... para qualquer pessoa. Então, idealmente, ele precisa ter um gw padrão definido como 192.168.1.1. Existe uma maneira de encaminhar apenas o tráfego para este serviço específico ou devo simplesmente mudar minha configuração de rede no servidor?

Eu estou no debian 8 se isso faz alguma diferença.

    
por Kalavan 18.10.2016 / 12:06

1 resposta

1

Você pode definir o firewall (iptables) para rotear para um gateway específico, dependendo de uma das três características: porta de destino, porta de origem ou proprietário (pode não funcionar, veja abaixo)

Primeiro, você adicionará uma tabela de roteamento personalizada para seu aplicativo especial (gateway 192.168.1.1), criará uma regra que redirecionará todos os pacotes com a máscara 1 para essa tabela e criará uma regra iptables que masque o endereço de origem no caso o pacote foi redirecionado:

ip route add 192.168.1.0/24 dev eth0 table 1
ip route add 0/0 via 192.168.1.1 table 1
ip rule add fwmark 1 table 1
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.10

Para a marcação do pacote, você tem 3 opções:

Redirecionar pela porta de destino, cobrando PORT com a porta do servidor usada pelo exim:

iptables -t mangle -A OUTPUT -p tcp --dport PORT -j MARK --set-mark 4

Redirecionar pela porta de origem, carregando PORT com a porta usada localmente pelo exim, se ela usar apenas uma porta de origem:

iptables -t mangle -A OUTPUT -p tcp --sport PORT -j MARK --set-mark 4

Redirecionar pelo proprietário, alterando OWNER com o PID do processo do Exim (consulte iptables -m owner --help para outras opções):

iptables -t mangle -A OUTPUT -m owner --pid-owner OWNER -j MARK --set-mark 4

Redirecionando por considerações do Proprietário www.frozentux.net :

The pid, sid and command matching is broken in SMP kernels since they use different process lists for each processor. It might be fixed in the future however

Então, dependendo do seu kernel, esse recurso não está disponível ou está quebrado (não funcionará corretamente)

    
por 18.10.2016 / 14:25