Use o iptables para fazer proxy para a mesma porta em outra máquina, com uma única interface

0

Como posso configurar iptables em uma máquina DMZ para encaminhar a porta 12345 para outro computador conectado ao mesmo roteador? A iptables é a ferramenta errada para este trabalho?

Eu tenho um servidor doméstico na DMZ do meu roteador, que hospedava um serviço na porta 12345. Mudei esse serviço para a porta 12345 de uma máquina mais poderosa em minha rede doméstica e tenho executado ssh -fNR 12345:localhost:12345 <home-server> em cada inicialização. O serviço está executando um protocolo personalizado - ou seja, não consigo usar um proxy HTTP.

As soluções encontradas tendem a assumir que o computador executando iptables é o roteador (duas interfaces, etc.). (por exemplo: link , link , etc)

Comandos tentados de vários tutoriais:

  • iptables -A FORWARD -p tcp -d 192.168.1.5 --dport 12345 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  • iptables -t nat -A PREROUTING -p tcp --dport 12345 -j DNAT --to 192.168.1.5:12345
  • acima também com iptables -t nat -A POSTROUTING -j MASQUERADE
  • acima, com iptables -A FORWARD -p tcp -d 192.168.1.5 --dport 12345 -j ACCEPT
por Iiridayn 26.09.2018 / 21:08

1 resposta

1

Na sua situação, a configuração "DMZ" é, na verdade, nada mais do que uma regra muito ampla de encaminhamento de porta (DNAT) no roteador. Se você quiser que uma porta única seja encaminhada em outro lugar, normalmente você pode simplesmente adicionar uma regra de encaminhamento de porta ao roteador como faria normalmente - e terá prioridade sobre a regra DMZ.

Se o seu roteador permitir isso, você deve fazê-lo no roteador. Não apenas reduzirá a carga na atual máquina DMZ simplesmente ignorando-a, mas também evitará o problema descrito abaixo.

O que você está tentando alcançar em sua máquina DMZ ainda é o mesmo que o encaminhamento de porta do seu roteador (isto é, DNAT simples).

Mas como você só tem uma interface, o principal problema que você está enfrentando é o mesmo problema "NAT hairpinning" que o acesso a serviços encaminhados por porta de dentro; só é o contrário. (Seu roteador envia pacotes para a máquina DMZ, mas recebe pacotes da outra máquina e nada corresponde).

A solução alternativa para isso geralmente requer uma regra SNAT (masquerade) além disso, e fará com que a máquina de destino pense que todas as conexões vêm de sua máquina DMZ (os IPs de origem originais estão sendo perdidos).

O segundo problema é que é atualmente desconhecido 1) se sua máquina DMZ tem roteamento IP (encaminhamento) mesmo ativado (você deve verificar isso), e 2) qual regra de firewall já está tem (você deve verificar isso também - você menciona adicionar regras, mas você não menciona a verificação ou exclusão das antigas).

Não importa se é uma interface ou duas, você ainda está pedindo à máquina DMZ para rotear pacotes IP e, portanto, deve ter o net.ipv4.conf.all.forwarding sysctl configurado para 1.

As regras do iptables são mantidas em uma lista (cadeia), verificadas de cima para baixo. Usando -A adiciona uma regra ao final da tabela / cadeia especificada. Você deve sempre procurar no seu conjunto de regras atual (como mostrado por iptables-save ou pelo menos iptables [-t nat] -S ) para garantir que as regras estejam na ordem correta e assim por diante.

A rede não é uma caixa preta. Você pode usar ferramentas de captura de pacotes como o Wireshark ou o tcpdump para ver quais pacotes vêm e quais pacotes são enviados. Talvez sua máquina DMZ já esteja encaminhando corretamente todos os pacotes para o outro sistema - mas as respostas não estão chegando? Esse é um problema diferente com uma solução diferente.

    
por 27.09.2018 / 07:35