netstat - perché i demoni IPv4 ascoltano le porte elencate solo in -A inet6?


22

Ho un computer con:

Linux superhost 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64 GNU/Linux

Esegue Apache sulla porta 80 su tutte le interfacce e non si presenta netstat -planA inet, tuttavia può essere trovato inaspettatamente in netstat -planA inet6:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::5672                 :::*                    LISTEN      2402/beam.smp   
tcp6       0      0 :::111                  :::*                    LISTEN      1825/rpcbind    
tcp6       0      0 :::9200                 :::*                    LISTEN      2235/java       
tcp6       0      0 :::80                   :::*                    LISTEN      2533/apache2    
tcp6       0      0 :::34611                :::*                    LISTEN      1856/rpc.statd  
tcp6       0      0 :::9300                 :::*                    LISTEN      2235/java       
...
tcp6       0      0 10.0.176.93:80          10.0.76.98:53704        TIME_WAIT   -               
tcp6       0      0 10.0.176.93:80          10.0.76.98:53700        TIME_WAIT   -               

Posso raggiungerlo da TCP4 bene, come visto sopra. Tuttavia, anche queste connessioni sono elencate sotto tcp6. Perché?


1
Tutti gli indirizzi IPv4 vengono mappati direttamente agli indirizzi IPv6 (ma non viceversa). Vedi: en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses
Patrick,

4
per favore smetti di usare netstat? è morto - un decennio fa . Usa iproute2 s'ss
mikeserv

Risposte:


16

Per impostazione predefinita, se non si specifica l'indirizzo per il Listenparametro Apache , gestisce l'indirizzo ipv6 utilizzando gli IPv4-mapped IPv6indirizzi. Puoi dare un'occhiata in Apache ipv6

L'output di netstatnon significa che Apache non è in ascolto sull'indirizzo IPv4. È un IPv4-mapped IPv6indirizzo.


Esistono altri servizi che ascoltano gli indirizzi IPv4 ma sono elencati come tcp6 da netstat, ad esempio ElasticSearch
Mischa Arefiev,

Immagino che tu abbia letto il link di Wikipedia fornito da @Patrick. Tutti i servizi che utilizzano l'indirizzo IPv6 mappato IPv4 verranno mostrati tcp6nell'output di netstat.
Beginer,

14

Il motivo è che tutti gli indirizzi IPv4 sono anche indirizzi IPv6. Una piccola gamma di indirizzi IPv6 è stata messa da parte per essere utilizzata per il mapping uno-a-uno degli indirizzi IPv4. Ad esempio, l'indirizzo IPv4 192.0.2.128è accessibile tramite l'indirizzo IPv6 ::ffff:192.0.2.128. Ciò è stato fatto in modo che tutte le applicazioni che supportano solo IPv6, possano comunque ascoltare su indirizzi IPv4. Si noti che questo non può essere utilizzato per un indirizzo IPv6 (non mappato) per comunicare con un indirizzo IPv4 senza altre cose, poiché IPv4 non saprà come gestire l'indirizzo IPv6 (è possibile utilizzare NAT o altre soluzioni anche se).

Poiché tutti gli indirizzi IPv4 sono rappresentati in IPv6, quando chiedi netstatdi elencare le app usando IPv6, otterrai anche IPv4.
Potrebbe rappresentare 10.0.176.93come ::ffff:10.0.176.93, o addirittura ::ffff:a00:b05d, ma gli sviluppatori dell'applicazione hanno scelto di mostrarlo come un normale indirizzo IPv4 con notazione punteggiata.


Grazie, ma questo non risponde al motivo per cui non si -A inet
aprono

Suppongo che il motivo per cui le connessioni in ascolto sono elencate solo come socket tcp6 sia perché sono realmente socket IPv6, ma con la funzione aggiuntiva che accettano anche connessioni IPv4, se configurate per farlo. I socket sono associati a INADDR_ANY6 e quando arriva una connessione IPv4 l'indirizzo viene mappato su un indirizzo IPv6 con il prefisso :: ffff: 0000/96. Questo è l'unico uso per questi indirizzi mappati; non dovrebbero essere usati sul filo.
Johan Myréen,
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.