Substituição do servidor. Emulando o servidor de internet

0

Eu tenho duas redes de seqüências de rede, ambas escondidas sob o próprio NAT 192.168.31.0/24 - > 192.168.33.0/24 - > Internet

Eu tenho um servidor TCP em 192.168.33.35 e um cliente em 192.168.31.32

Um cliente faz um pedido de TCP ao servidor localizado na internet em 66.66.66.66 , por exemplo. Eu quero que o último gateway 192.168.33.1 envie a solicitação para 192.168.33.35 e engane o cliente.

O mais viável do que tentei é:

iptables -t nat -I PREROUTING -d 66.66.66.66 -j DNAT --to-destination 192.168.33.35
iptables -t nat -I POSTROUTING -s 192.168.33.35 -j SNAT --to-source 66.66.66.66

O servidor recebeu o pacote Syn e respondeu. Mas o IP de origem da resposta do servidor parece permanecer 192.168.33.35 depois de passar pelo gateway. E o pacote é perdido recebido pelo gateway 192.168.31.1 .

Parece que a parte SNAT não está funcionando.

O que posso fazer para emular / falsificar o servidor com ferramentas padrão openWrt?

    
por Pheu Verg 04.04.2018 / 18:23

2 respostas

1

Isso é o que acontece:

  1. Seu servidor 192.168.33.35 vê o pacote Syn de 192.168.33.Z (não está ciente de 192.168.31.0/24 network e vê o endereço "WAN" do gateway 192.168.31.1 , não sei o que é Z ) e responde a este endereço.
  2. A tabela de roteamento informa que esse endereço pertence à rede local, portanto, a resposta é destinada ao endereço MAC de 192.168.33.Z .
  3. Mesmo que a resposta viaje fisicamente pela máquina 192.168.33.1 , o gateway não o manipula porque é destinado ao endereço MAC de outra máquina.
  4. 192.168.33.Z vê a resposta de 192.168.33.35 . Ele espera um de 66.66.66.66 e não sabe o que fazer.

Note que não importa 192.168.33.Z realiza NAT (sendo 192.168.31.1 no lado da LAN). O mecanismo de falha é muito semelhante àquele em que loopback NAT (hairpin NAT) está apenas parcialmente configurado .

Você precisa fazer com que seu 192.168.33.35 server envie respostas para o endereço MAC do seu 192.168.33.1 gateway.

  • Defina uma regra de roteamento para 192.168.33.Z (lembre-se, não sei Z , substitua o número real) ou mesmo para todo o 192.168.33.0/24 network:

    # do this on the 192.168.33.35 machine
    route add -host 192.168.33.Z gw 192.168.33.1
    

    Observe que isso afetará toda a comunicação de 192.168.33.35 a 192.168.33.Z . Nos casos em que 192.168.33.35 deve atuar como 192.168.33.35 , os pacotes serão roteados desnecessariamente; não deve quebrar as coisas embora.

  • Ou deixe o gateway 192.168.33.1 executar não apenas o DNAT, mas também o SNAT. Esta solução é basicamente a mesma que para o loopback de NAT na resposta já vinculada:

    # do this on the 192.168.33.1 gateway
    # you already have this line
    iptables -t nat -I PREROUTING -d 66.66.66.66 -j DNAT --to-destination 192.168.33.35
    # this line is new
    iptables -t nat -I POSTROUTING -d 192.168.33.35 -j SNAT --to-source 192.168.33.1
    

Este fragmento se aplica à sua situação:

Note that the NAT table in iptables is only used for the first packet of a connection. Later packets related to the connection are processed using the internal mapping tables established when the first packet was translated.

Isso significa que a segunda das suas linhas ( iptables … -j SNAT --to-source 66.66.66.66 ) é irrelevante quando você inicia uma conexão de um cliente. Os pacotes posteriores serão SNAT-ed e DNAT-ed corretamente porque o primeiro pacote foi.

Eu acho que se sua primeira linha

iptables -t nat -I PREROUTING -d 66.66.66.66 -j DNAT --to-destination 192.168.33.35

agiu no gateway 192.168.31.1 , ele faria o que você deseja para outros clientes de 192.168.31.0/24 sem truques adicionais.

Esta segunda linha sua

iptables -t nat -I POSTROUTING -s 192.168.33.35 -j SNAT --to-source 66.66.66.66

será aplicado se você iniciar uma conexão de 192.168.33.35 . Os servidores da Internet raramente fazem isso, portanto, talvez você não precise dessa regra. Caso você precise, lembre-se:

  • a regra funcionará somente se os pacotes forem roteados pelo 192.168.33.1 gateway no qual essa regra atua, portanto, para alcançar seus computadores locais e apresentar a eles como 66.66.66.66 , é necessário ajustar a tabela de roteamento no 192.168.33.35 máquina similarmente como acima;
  • você não pode se comunicar como 66.66.66.66 com hosts externos (além da sua rede) porque, mesmo se você conseguisse alcançá-los agindo como 66.66.66.66 , sua resposta chegaria ao% real66.66.66.66, não de volta para você.
por 12.04.2018 / 17:28
0

Fiz isso com roteamento. Infelizmente, é menos flexível para acessar o servidor real, mas pelo menos funciona. Algo parecido com isto:

[email protected]# route add -host 66.66.66.66 gw 192.168.33.35 dev br-lan

e no servidor:

[email protected]# ip link add name s666 type dummy
[email protected]# ifconfig s666 66.66.66.66
[email protected]# ifconfig s666 up
    
por 18.04.2018 / 09:44