GNU/Linux >> Linux Esercitazione >  >> Linux

Accedendo al server web certificato DNAT dall'interno della LAN

Soluzione 1:

Ho cancellato la mia risposta originale, perché non ero del tutto sicuro che fosse corretta. Da allora ho avuto del tempo per configurare una piccola rete virtuale di macchine virtuali per simulare la rete in questione. Ecco il set di regole del firewall che ha funzionato per me (in iptables-save formato, per il nat solo tabella):

-A PREROUTING -d 89.179.245.232/32 -p tcp -m multiport --dports 22,25,80,443 -j DNAT --to-destination 192.168.2.10
-A POSTROUTING -s 192.168.2.0/24 -o ppp0 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0/24 -d 192.168.2.10/32 -p tcp -m multiport --dports 22,25,80,443 -j MASQUERADE

Il primo POSTROUTING regola è un modo semplice per condividere la connessione Internet con la LAN. L'ho lasciato lì per completezza.

Il PREROUTING regola e la seconda POSTROUTING regola insieme stabiliscono i NAT appropriati, in modo che le connessioni al server tramite l'indirizzo IP esterno possano avvenire, indipendentemente dal fatto che le connessioni provengano dall'esterno o dall'interno della LAN. Quando i client sulla LAN si connettono al server tramite l'indirizzo IP esterno, il server vede le connessioni come provenienti dall'indirizzo IP interno del router (192.168.2.1).

È interessante notare che ci sono un paio di varianti della seconda regola di POSTROUTING che funzionano anch'esse. Se il target viene modificato in -j SNAT --to-source 192.168.2.1 , l'effetto è (non sorprendentemente) lo stesso del MASQUERADE :il server vede le connessioni dai client LAN locali come provenienti dall'interno del router Indirizzo IP. D'altra parte, se il target viene modificato in -j SNAT --to-source 89.179.245.232 , quindi i NAT funzionano ancora, ma questa volta il server vede le connessioni dai client LAN locali come originate dall'esterno del router Indirizzo IP (89.179.245.232).

Infine, nota che il tuo PREROUTING originale /DNAT regola con -i ppp0 non funziona, perché la regola non confronta mai i pacchetti provenienti dai client della LAN (poiché questi non entrano nel router tramite il ppp0 interfaccia). Sarebbe possibile farlo funzionare aggiungendo un secondo PREROUTING regola solo per i client LAN interni, ma sarebbe poco elegante (IMO) e avrebbe comunque bisogno di fare riferimento esplicito all'indirizzo IP esterno.

Ora, anche dopo aver delineato una soluzione "hairpin NAT" (o "NAT loopback", o "NAT reflection", o come si preferisce chiamarla) in tutti i dettagli, credo ancora che una soluzione DNS split-horizon... -con i client esterni che si risolvono nell'IP esterno e i client interni che si risolvono nell'IP interno --- sarebbe la strada più consigliabile da prendere. Come mai? Perché più persone capiscono come funziona il DNS che come funziona il NAT, e gran parte della costruzione di buoni sistemi è scegliere di utilizzare parti manutenibili. È più probabile che una configurazione DNS venga compresa, e quindi gestita correttamente, rispetto a una configurazione NAT arcana (IMO, ovviamente).

Soluzione 2:

Sono sorpreso che dopo quasi 8 anni nessuno abbia spiegato come farlo nel modo corretto utilizzando il sistema di configurazione UCI utilizzato di default in OpenWRT.

La risposta di Steven Monday è corretta, ma utilizza iptables comandi direttamente, che è un livello inferiore rispetto al sistema di configurazione UCI, ed è meglio non toccarlo dalla maggior parte degli utenti OpenWRT, se possibile.

Il modo corretto per accedere ai server interni tramite le loro combinazioni IP pubblico/porta da un altro host interno in UCI è abilitare l'opzione di configurazione reflection sotto ogni target DNAT specifico nel file /etc/config/firewall . Questo comportamento è documentato qui.

Ad esempio:

config redirect option target 'DNAT' option src 'wan' option dest 'lan' option proto 'tcp' option src_dport '44322' option dest_ip '192.168.5.22' option dest_port '443' option name 'apache HTTPS server' option reflection '1'

Nota:Secondo la documentazione OpenWRT indicata, reflection è abilitato per impostazione predefinita. Nei miei test, non era così.

Soluzione 3:

Una soluzione comune consiste nell'indirizzare gli host interni a un server DNS locale che restituisce l'indirizzo "interno" corretto per questi nomi host.

Un'altra soluzione - e stiamo usando questo dove lavoro sui nostri firewall Cisco - è riscrivere le risposte DNS sul firewall che corrispondono a questi indirizzi. Non credo che al momento ci siano strumenti per Linux che lo facciano.

Dovresti essere in grado di configurare il routing sul tuo gateway per fare la cosa giusta. Potrebbe essere necessario configurare i server in modo che siano a conoscenza del loro indirizzo IP mappato esternamente (ad esempio, assegnandolo a un'interfaccia fittizia). Con questa configurazione, la comunicazione da un sistema interno a un altro sistema interno -- utilizzando il suo indirizzo "esterno" -- passerebbe attraverso il router.

Soluzione 4:

Quello che stai chiedendo di fare si chiama NAT Loopback e richiede che tu aggiunga una regola SNAT in modo che i pacchetti originati dalla tua LAN al tuo server ritornino attraverso il router:

-A POSTROUTING -p tcp -s 192.168.2.0/24 -d 192.168.2.10 -m multiport --dports 22,25,80,443 -j SNAT --to-source 89.179.245.232

Linux
  1. Utilizzo di Reddit dalla console nel 2020

  2. Come rientrare un Heredoc all'interno di un Heredoc nel modo giusto?

  3. Come rilevare se la shell è controllata da Ssh?

  4. Diventare root dall'interno di Vim?

  5. Ottenere l'opzione -exec in Trova per funzionare?

Ridimensiona un'immagine dal terminale Linux

Programma hardware dalla riga di comando di Linux

Esegui uno script di shell dal comando docker-compose, all'interno del contenitore

Codifica in base32 dalla shell

C'è un modo per ottenere la versione del BIOS da Linux?

Qual è l'uso dell'opzione -o nel comando useradd?