iptables: altera o endereço de origem local se o endereço de destino corresponder

5

Eu tenho uma máquina Linux (RHEL 6.7) com 2 IP's configurados em uma única NIC (eth1). O endereço principal e, portanto, o endereço de onde todo o tráfego parece vir, é 10.0.0.23. O outro é 10.0.0.160.

Estou procurando uma maneira de usar o iptables para alterar o IP de origem com base no endereço de destino de um pacote. Normalmente o tráfego vai 'sair' em 10.0.0.23, mas diga que meu pacote está destinado a 10.0.0.1, eu quero que o pacote 'saia' em 10.0.0.160.

A razão para isso são firewalls na rede que estão fora do meu controle. Existem regras em vigor que permitem o tráfego de 10.0.0.160 a 10.0.0.1, mas não de 10.0.0.23 a 10.0.0.1.

Eu não quero que todo o tráfego seja originado a partir de 10.0.0.160, apenas aquele destinado a 10.0.0.1.

Eu estava olhando para usar a tabela nat e talvez uma regra de redirecionamento, mas não vejo uma maneira de alterar o endereço de origem. Se isso ajudasse, eu poderia criar um alias para eth1 (então, seria eth1 e eth1: 0), mas gostaria de ver se há uma solução na configuração atual.

Agradecemos antecipadamente por qualquer conselho.

    
por eliszka 17.11.2015 / 00:07

1 resposta

5

Aqui estão dois métodos diferentes para alcançar o comportamento desejado:

1. Usando o iptables

A SNAT target em iptables permite que o endereço de origem seja modificado conforme solicitado. A página man do iptables-extensions tem a dizer sobre SNAT :

This target is only valid in the nat table, in the POSTROUTING and INPUT chains, and user-defined chains which are only called from those chains. It specifies that the source address of the packet should be modified (and all future packets in this connection will also be mangled), and rules should cease being examined.

Com base na sua pergunta, a regra a seguir alterará o endereço de origem dos pacotes destinados a 10.0.0.1 a 10.0.0.160 :

$ iptables -t nat -A POSTROUTING --destination 10.0.0.1/32 -j SNAT --to-source 10.0.0.160

2. Usando uma rota estática

Como alternativa, em vez de usar uma regra iptables , adicione uma rota estática para o host de destino à tabela de roteamento, usando a seguinte sintaxe:

$ ip route add <destination>/32 via <gateway> src <alias>

Com base nas informações que você forneceu, você usaria:

$ ip route add 10.0.0.1/32 via <gateway> src 10.0.0.160

Substitua <gateway> pelo endereço IP real do seu gateway, pois isso não foi fornecido na sua pergunta.

O tráfego destinado a 10.0.0.1 agora será originado em 10.0.0.160 . Qualquer outro tráfego usa a rota padrão, originária de 10.0.0.23 .

    
por 17.11.2015 / 22:12