netstat - por que os daemons IPv4 estão ouvindo as portas listadas apenas em -A inet6?

22

Eu tenho um computador com:

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

Ele executa o Apache na porta 80 em todas as interfaces e não aparece netstat -planA inet, no entanto, pode ser encontrado inesperadamente em 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   -               

Eu posso alcançá-lo pelo TCP4 muito bem, como visto acima. No entanto, mesmo essas conexões estão listadas em tcp6. Por quê?

Mischa Arefiev
fonte
1
Todos os endereços IPv4 são mapeados diretamente para endereços IPv6 (mas não vice-versa). Veja: en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses
Patrick
4
por favor pare de usar netstat? morreu - uma década atrás . Use iproute2 'sss
mikeserv 30/08/14

Respostas:

16

Por padrão, se você não especificar o endereço para o Listenparâmetro Apache , ele manipulará o endereço ipv6 usando IPv4-mapped IPv6endereços. Você pode dar uma olhada no Apache ipv6

A saída de netstatnão significa que o Apache não está escutando no endereço IPv4. É um IPv4-mapped IPv6endereço.

iniciante
fonte
Há outros serviços que escutam a endereços IPv4 mas estão listados como tcp6 por netstat, por exemplo ElasticSearch
Mischa Arefiev
Eu acho que você leu o link da Wikipedia fornecido por @Patrick. Todos os serviços que usam o endereço IPv6 mapeado para IPv4 serão mostrados na tcp6saída do netstat.
iniciante 28/08/14
14

A razão para isso é porque todos os endereços IPv4 também são endereços IPv6. Um pequeno intervalo de endereços IPv6 foi reservado para ser usado no mapeamento individual dos endereços IPv4. Por exemplo, o endereço IPv4 pode 192.0.2.128ser acessado através do endereço IPv6 ::ffff:192.0.2.128. Isso foi feito para que todos os aplicativos compatíveis apenas com IPv6 ainda pudessem ouvir os endereços IPv4. Observe que isso não pode ser usado para um endereço IPv6 (não mapeado) para falar com um endereço IPv4 sem outras coisas envolvidas, pois o IPv4 não saberá como lidar com o endereço IPv6 (você pode usar NAT ou outras soluções Apesar).

Como todos os endereços IPv4 estão representados no IPv6, ao solicitar netstata lista de aplicativos usando o IPv6, você também receberá o IPv4.
Pode representar 10.0.176.93como ::ffff:10.0.176.93, ou até mesmo ::ffff:a00:b05d, mas os desenvolvedores de aplicativos optaram por mostrá-lo como um endereço IPv4 de notação pontilhada regular.

Patrick
fonte
Obrigado, mas isso não responde por que eles não aparecer ao fazer regularmente-A inet
Mischa Arefiev
Acho que o motivo das conexões de escuta serem listadas apenas como soquetes tcp6 é porque realmente são soquetes IPv6, mas com o recurso adicional de que eles também aceitam conexões IPv4, se configurados para isso. Os soquetes estão vinculados a INADDR_ANY6 e, quando uma conexão IPv4 chega, o endereço é mapeado para um endereço IPv6 com o prefixo :: ffff: 0000/96. Este é o único uso para esses endereços mapeados; eles não devem ser usados ​​no fio.
Johan Myréen 30/10