Redirecionar todo o tráfego de várias interfaces para um único IP

1

Eu gostaria de redirecionar todo o tráfego (especificamente TCP e UDP) de várias interfaces WAN (ppp0, ppp1, ppp2) para um único IP da eth0.
Quando se trata de interface com IP, posso usar o PREROUTING e POSTROUTING e alterar o destino e o IP de origem de acordo. Mas, nesse caso (com várias interfaces), como posso saber qual IP usar como IP de origem no POSTROUTING?

Então os IPs de ppp0-ppp3 estão mudando, e eth0 permanece "192.168.1.5".
Gostaria de encaminhar o tráfego para o IP: "192.168.1.10".

Por exemplo (somente para TCP), eu direcionaria conexões de entrada para eth0 usando:

iptables -t nat -A PREROUTING -p tcp --dport 5000 -j DNAT --to-destination 192.168.1.10:5000
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.10 --dport 5000 -j SNAT --to-source 192.168.1.5'

Mas com várias interfaces (IPs) eu não sei como definir a regra POSTROUTING para a fonte permanece a mesma?
Então, a questão é - eu deveria usar as técnicas do iptables para "salvar" esse IP e usá-lo como fonte, ou há outra maneira de fazer isso?
Eu encontrei um link que se parece com o que eu preciso, mas não consigo descobrir como implementá-lo: link .

Resumindo, preciso de "DMZ" de várias interfaces para um único IP.

    
por RoeeK 11.12.2014 / 10:54

1 resposta

0

O link na parte inferior da sua pergunta é direcionado a pessoas que têm vários IPs de saída. Desde que você está tentando enviar pacotes através de eth0 (192.168.1.5) - você não tem aliases de IP e você não tem vários IPs de saída, mas um único IP.

Então, digamos que o ppp0 tenha um intervalo de ip: 10.100.100.0/24, o pacote inicial conectado ao seu host será parecido com:

 | SRC IP        | DST IP       |
 | 10.100.100.10 | 10.100.100.1 |

Sua primeira regra está correta:

-t nat -A PREROUTING -p tcp --dport 5000 -j DNAT --to-destination 192.168.1.10:5000

Assim, sempre que uma máquina por trás do ppp0-ppp3 tentar contatar seu host (192.168.1.5) na porta 5000, os pacotes serão reencaminhados para 192.168.1.10. O pacote será parecido com:

 | SRC IP        | DST IP       |
 | 10.100.100.10 | 192.168.1.10 |

Agora, você está roteando pacotes pelo seu host, então é necessário ativar o encaminhamento de IP:

sysctl -w net.ipv4.ip_forward=1

Mas, quando o destino (192.168.1.10) receber o pacote, ele verá a origem 10.100.100.10 e retornará o pacote ao seu próprio gateway padrão. O que você pode fazer é configurar rotas estáticas em 192.168.1.10 que informarão ao host que pacotes originados de 10.100.100.0/24 são roteados via 192.168.1.5, algo como:

ip route add 10.100.100.0/24 via 192.168.1.5

Dessa forma, você não precisaria adicionar nenhuma regra de POSTROUTING, porque o destino (192.168.1.10) saberia automaticamente para onde devolver pacotes.

Mas, se essa solução não for viável por qualquer motivo (ou você pessoalmente não gostar), a próxima coisa que eu sugiro é usar o MASQUERADE no eth0:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

A solução DNAT provavelmente também funcionará. Apenas certifique-se de que sua cadeia FORWARD está configurada para ACCEPT e não filtre pacotes em seu caminho pelo seu host.

    
por 11.12.2014 / 14:42