web-dev-qa-db-fra.com

netstat - pourquoi les démons IPv4 écoutent-ils les ports répertoriés uniquement dans -A inet6?

J'ai un ordinateur avec:

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

Il exécute Apache sur le port 80 sur toutes les interfaces et n'apparaît pas dans netstat -planA inet, mais il peut être trouvé de manière inattendue dans 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   -               

Je peux très bien l'atteindre par TCP4, comme vu ci-dessus. Cependant, même ces connexions sont répertoriées sous tcp6. Pourquoi?

24
Mischa Arefiev

Par défaut, si vous ne spécifiez pas d'adresse pour le paramètre Apache Listen, il gère l'adresse ipv6 à l'aide de IPv4-mapped IPv6 adresses. Vous pouvez jeter un oeil dans Apache ipv6

La sortie de netstat ne signifie pas qu'Apache n'écoute pas sur l'adresse IPv4. C'est un IPv4-mapped IPv6 adresse.

17
beginer

La raison en est que toutes les adresses IPv4 sont également des adresses IPv6. Une petite plage d'adresses IPv6 a été mise de côté pour être utilisée pour le mappage un à un des adresses IPv4. Par exemple, l'adresse IPv4 192.0.2.128 est accessible via l'adresse IPv6 ::ffff:192.0.2.128. Cela a été fait pour que toutes les applications qui prennent en charge IPv6 uniquement puissent toujours écouter sur les adresses IPv4. Notez que cela ne peut pas être utilisé pour une adresse IPv6 (non mappée) pour parler à une adresse IPv4 sans autre chose impliquée, car l'IPv4 ne saura pas comment gérer l'adresse IPv6 (vous pouvez utiliser NAT ou d'autres solutions bien que).

Étant donné que toutes les adresses IPv4 sont représentées dans IPv6, lorsque vous demandez à netstat de répertorier les applications utilisant IPv6, vous obtiendrez également IPv4.
Cela pourrait représenter 10.0.176.93 comme ::ffff:10.0.176.93, ou même ::ffff:a00:b05d, mais les développeurs de l'application ont choisi de l'afficher comme une adresse IPv4 régulière en notation pointillée.

16
Patrick