Utilizzare iptables per inoltrare ipv6 a ipv4?


15

Attualmente ho una configurazione in cui, a causa della configurazione che richiederebbe un'eternità per risolvere, ho un server a cui è possibile accedere solo da ipv4. Tuttavia, ho anche un server a cui è possibile accedere da ipv6. Mi chiedevo se potevo usare iptables per inoltrare il traffico ipv6 su una determinata porta da uno dei server a un altro server usando il traffico ipv4.


2
Quello che stai cercando si chiama NAT64, che non credo che iptables farà (ancora).
Chris S,

Chris ha ragione: gli RFC NAT64 sono appena stati pubblicati, ci darei un po 'di tempo fino a quando qualcosa lo supporterà davvero. Detto questo, potresti essere in grado di raggiungere il tuo obiettivo in un modo diverso, ma non abbiamo abbastanza dettagli per saperlo con certezza. Ad esempio, se si tratta di un server HTTP, è possibile invertire il proxy delle richieste tra i protocolli.
Shane Madden

Risposte:


16

Attualmente IPtables non può farlo, quindi è necessario un processo userspace per eseguire il proxy delle connessioni. socat è uno strumento adatto per questo:

socat TCP6-LISTEN:1234,fork TCP4:1.2.3.4:1234

1
grazie, questo è stato utile! Nel caso qualcuno stia cercando una soluzione UDP: socat UDP6-RECVFROM: 64444, fork UDP4-SENDTO: localhost: 64443 ha funzionato per me
Alexander

10

Come notato nei commenti sulla tua domanda , NAT64 è lungi dall'essere pronto, anche dopo 3 anni.

Tuttavia, potresti provare 6tunnel, come suggerito dalla perplessità.

Fortunatamente, è presente nei repository Debian e Ubuntu, quindi puoi installarlo molto facilmente usando sudo apt-get install 6tunnel. Se stai usando un altro sistema, dovrai costruirlo dal sorgente .

Costruire dal sorgente non è davvero difficile, ed è solo una questione di eseguire alcuni comandi (come root):

git clone https://github.com/wojtekka/6tunnel && cd 6tunnel && ./autogen.sh && make && make install

Ecco la sua sintassi, semplificata:

6tunnel [-4|-6] [-l local-host] original-port destination-host destination-port
  • Il [-4|-6]è opzionale e permette di specificare se si associa (ascolta) su IPv4 o IPv6 (rispettivamente).
  • -lè anche facoltativo. Ti consente di scegliere a quale indirizzo (IPv4 o IPv6) desideri associare.
  • La porta originale è la porta sulla quale ti legherai.
  • L' host di destinazione è dove inoltrerai il traffico. Può essere ovunque: localhost o altrove sulla rete o su Internet.
  • La porta di destinazione è la porta sull'host di destinazione che riceverà il traffico inoltrato.

Ad esempio, se si desidera consentire l'accesso a un server solo IPv4, in ascolto sulla porta 1337 su IPv6, utilizzare:

6tunnel -6 1337 localhost 1337

Il comando precedente ascolterà sulla porta 1337 su IPv6 e inoltrerà il traffico alla porta 1337 sullo stesso computer tramite IPv4. Verrà quindi eseguito in background, quindi non devi preoccuparti.

In realtà, è necessario impostare un cron job per assicurarsi che sia ancora in esecuzione. 6tunnelfornisce un esempio per la vostra convenienza! Anche eseguirlo all'avvio non dovrebbe essere una cattiva idea.

Per ulteriori documentazione, eseguire 6tunnel -ho man 6tunnel.


Pubblicarla come nuova risposta perché la modifica della risposta corrente perplessa cambierebbe troppo e potrebbe essere rifiutata come modifica suggerita!
Léo Lam,

5

Le versioni recenti di xinetdpossono anche ascoltare su IPv6 e quindi inoltrare la connessione a un indirizzo IPv4.

Una configurazione di esempio che ascolta le connessioni IPv6 sulla porta 3389 e le inoltra alla porta 3389 di un indirizzo IPv4 interno:

service rdp_port_forward
{
    flags           = IPv6
    disable         = no
    type            = UNLISTED
    socket_type     = stream
    protocol        = tcp
    user            = nobody
    wait            = no
    redirect        = 10.187.20.42 3389
    port            = 3389
}

Ciò può essere utile in ambienti più ristretti poiché xinetdè probabile che sia installato con il sistema di base o disponibile in repository di fornitori approvati.


3

Volevo commentare la risposta e il voto di Leo Lams, ma non ho abbastanza reputazione. Prima di tutto: grazie mille Leo Lam!

Per chiunque stia seguendo questo thread: Il mio ISP ha cambiato la mia connessione da IPv4 a IPv6 con Dual Stack Lite, il che significa che non ho più il mio indirizzo IPv4. Questo è stato un problema in quanto desidero accedere alla mia telecamera IP da qualsiasi luogo che non supporti IPv6. Per risolvere questo ho provato quanto segue:

  1. Abilitazione dell'inoltro IPv6 per la porta 99 nel mio router sulla mia macchina Ubuntu.
  2. Macchina Ubuntu (rete domestica): sudo 6tunnel -6 99 192.168.178.35 80
  3. vServer Debian con indirizzo IPv4 e IPv6 statico: sudo 6tunnel -4 99 IPV6PREFIXROUTER:IPV6INTERFACEIDUUBUNTUMACHINE 99
  4. vServer Debian: consenti connessioni tcp in entrata sulla porta 99 in iptables

Il prefisso ipv6 è stato indicato nel mio router e l'id dell'interfaccia è stato mappato nel processo di inoltro IPv6.

Ora posso accedere alla telecamera da qualsiasi luogo usando il dominio vServer example.com:99 .. Perfetto! Ho in programma di ottenere un lampone che soddisferà questo lavoro o una banana pi m3 per altre attività.


1
Ora sai cosa fare quando hai bisogno di un'altra telecamera IP. È il 2015; acquistarne uno che non supporta IPv6 è uno spreco di denaro completo.
Michael Hampton

non è come se la fotocamera avesse qualche anno: p
Crumar,

2

Più a beneficio delle persone che trovano questa pagina che dell'OP necessariamente (sono venuto qui alla ricerca di una soluzione per la connettività IPv6 per un'applicazione IPv4 (Twisted)), una possibilità è l'applicazione 6tunnel, ascolta IPv6 e inoltra le richieste a un'altra interfaccia e porta.

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.