Utilizzare iptables per eseguire il proxy per la stessa porta su un'altra macchina, con un'unica interfaccia


0

Come posso configurare iptablessu una macchina DMZ per inoltrare la porta 12345 a un altro computer collegato allo stesso router? È iptableslo strumento sbagliato per questo lavoro?

Ho un server di casa nella DMZ del mio router, che ha ospitato un servizio sulla porta 12345. Ho spostato quel servizio sulla porta 12345 di una macchina più potente nella mia rete domestica e sono stato in esecuzione ssh -fNR 12345:localhost:12345 <home-server>ad ogni avvio. Il servizio esegue un protocollo personalizzato, ovvero non riesco a utilizzare un proxy HTTP.

Le soluzioni che ho trovato tendono ad assumere che il computer in esecuzione iptables sia il router (due interfacce, ecc.). (es: https://serverfault.com/a/140626/15756 , https://www.digitalocean.com/community/tutorials/how-to-forward-ports-through-a-linux-gateway-with-iptables , eccetera)

Comandi provati da vari tutorial:

  • 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
  • quanto sopra anche w /iptables -t nat -A POSTROUTING -j MASQUERADE
  • quanto sopra sopra w /iptables -A FORWARD -p tcp -d 192.168.1.5 --dport 12345 -j ACCEPT

Puoi chiarire se la "macchina DMZ" è ancora dietro un NAT con un indirizzo IP privato o se la sua stessa interfaccia ha direttamente un indirizzo IP pubblico?
Grawity,

Risposte:


1

Nella tua situazione, l'impostazione "DMZ" non è altro che una regola di port forwarding (DNAT) molto ampia sul router. Se vuoi che una singola porta venga inoltrata altrove, di solito puoi semplicemente aggiungere una regola di port forwarding al router come faresti normalmente e avrà la priorità sulla regola DMZ.

Se il tuo router lo consente, dovresti farlo sul router. Non solo ridurrà il carico sull'attuale macchina DMZ semplicemente bypassandola, ma eviterete anche il problema del tornante descritto di seguito.


Quello che stai cercando di ottenere sulla tua macchina DMZ è sempre lo stesso del port forwarding del tuo router (cioè, semplice DNAT).

Ma poiché hai solo un'interfaccia, il problema principale che stai riscontrando è lo stesso problema "NAT hairpinning" come con l'accesso ai servizi port forwarding dall'interno; solo è il contrario. (Il router invia i pacchetti alla macchina DMZ ma riceve i pacchetti dall'altra macchina e nulla corrisponde.)

Per ovviare a questo, di solito richiede anche una regola SNAT (mascherata) e si tradurrà nella macchina di destinazione pensando che tutte le connessioni provengono dalla macchina DMZ (si perde l'IP di origine originale).


Il secondo problema è che al momento non è noto 1) se la tua macchina DMZ abbia effettivamente abilitato il routing IP (inoltro) (devi verificarlo), e 2) quali regole del firewall ha già (dovresti controllarlo anche tu - menzioni aggiungendo regole, ma non menzionate il controllo o la cancellazione di quelle vecchie).

Non importa se si tratta di un'interfaccia o due, stai ancora chiedendo alla macchina DMZ di instradare i pacchetti IP, e quindi dovrebbe avere il net.ipv4.conf.all.forwarding sysctl impostato su 1.

le regole di iptables sono mantenute in un elenco (catena), controllato dall'alto verso il basso. L'uso di -Aaggiunge una regola alla fine della tabella / catena specificata. Dovresti sempre guardare il tuo set di regole corrente (come mostrato da iptables-saveo almeno iptables [-t nat] -S) per assicurarti che le regole siano nell'ordine corretto e così via.

La rete non è una scatola nera. Puoi usare strumenti di acquisizione di pacchetti come Wireshark o tcpdump per vedere quali pacchetti arrivano e quali pacchetti escono. Forse la tua macchina DMZ sta già inoltrando correttamente tutti quei pacchetti all'altro sistema - ma le risposte non arrivano? Questo è un problema diverso con una soluzione diversa.


Per vari tutorial, l'IP Forwarding è abilitato, al momento non ha altre regole del firewall (e ho scaricato quelle che ho aggiunto dopo aver scoperto che erano inefficaci per presentare una tabula rasa). Ho provato un tutorial MASQUERADEcon la stessa mancanza di effetti. Ne esaminerò di più, per vedere se mi sono perso qualcosa.
Iiridayn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.