Quanto è difficile ricevere un pacchetto TCP quindi inviarlo nuovamente a un altro IP sulla rete locale mantenendo l'indirizzo IP di origine?

3

Ho bisogno di ricevere un pacchetto TCP destinato alla mia applicazione, quindi inviarlo nuovamente a un'altra destinazione sulla rete locale, mentre mantiene l'indirizzo IP originale .

Come può essere fatto, o quanto è difficile?

Sto usando semplici socket in Java, in esecuzione su un ambiente Linux, e potrei prendere in considerazione l'utilizzo di librerie C nel mio codice se questo fa il trucco.

So che i router oi firewall intercettano tali pacchetti TCP, suppongo che non cambino l'IP di origine.

    
posta abdelrahman-sinno 19.01.2018 - 19:43
fonte

2 risposte

1

Ciò è possibile con TProxy in Linux , ma non posso dire che sia stato molto stabile nei test.

L'ho implementato in Java per TCP , ho dovuto usare JNA per fare chiamate native di librerie Linux , così come il wrapping delle classi JRE Socket ( basato su questo post , con ulteriori modifiche apportate).

In breve, i passaggi sono:

  • Firewall IPTables .

  • Copia l'indirizzo del socket di origine.

  • Chiamata di libreria nativa a setsockopt con l'opzione IP_TRANSPARENT, affinché il socket client possa utilizzare il modulo TProxy.
  • Imposta l'indirizzo di origine nel socket in uscita

Apparentemente ci sono molte implementazioni online, come questo in Golang .

    
risposta data 09.06.2018 - 12:12
fonte
0
iptables -A PREROUTING -i eth0 -p tcp -m tcp -m multiport --dports 80 -j DNAT --to-destination 192.168.0.1

Non so se questo è quello che vuoi, ma inoltro il traffico dal mio firewall al mio server web tutto il tempo.

I log del server web hanno la sorgente IP di origine.

    
risposta data 09.06.2018 - 16:33
fonte

Leggi altre domande sui tag