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

19

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 roda o Apache na porta 80 em todas as interfaces e não aparece em netstat -planA inet , mas 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 bem, como visto acima. No entanto, até mesmo essas conexões estão listadas em tcp6 . Por quê?

    
por Mischa Arefiev 28.08.2014 / 15:58

2 respostas

15

Por padrão, se você não especificar o endereço para o parâmetro Apache Listen , ele manipula o endereço ipv6 usando IPv4-mapped IPv6 endereços. Você pode dar uma olhada em Apache ipv6

A saída de netstat não significa que o Apache não esteja escutando no endereço IPv4. É um endereço IPv4-mapped IPv6 .

    
por 28.08.2014 / 16:37
11

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 para o mapeamento de endereços IPv4 um para um. Por exemplo, o endereço IPv4 192.0.2.128 está acessível através do endereço IPv6 ::ffff:192.0.2.128 . Isso foi feito para que quaisquer aplicativos que suportassem apenas IPv6 ainda pudessem ouvir 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 outros fatores envolvidos, pois o IPv4 não saberá como lidar com o endereço IPv6 (você pode usar o NAT ou outras soluções embora).

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

    
por 30.08.2014 / 18:52