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

22

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 il 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 l'atteindre par TCP4 très bien, comme vu ci-dessus. Cependant, même ces connexions sont répertoriées sous tcp6. Pourquoi?

Mischa Arefiev
la source
1
Toutes les adresses IPv4 sont mappées directement aux adresses IPv6 (mais pas l'inverse). Voir: en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses
Patrick
4
veuillez cesser d'utiliser netstat? il est mort - il y a dix ans . Utilisez iproute2 dess
mikeserv

Réponses:

16

Par défaut, si vous ne spécifiez pas d'adresse pour le Listenparamètre Apache , il gère l'adresse ipv6 à l'aide d' IPv4-mapped IPv6adresses. Vous pouvez jeter un œil dans Apache ipv6

La sortie de netstatne signifie pas qu'Apache n'écoute pas sur l'adresse IPv4. C'est une IPv4-mapped IPv6adresse.

débutant
la source
Il existe d'autres services qui écoutent les adresses IPv4 mais sont répertoriés comme tcp6 par netstat, par exemple ElasticSearch
Mischa Arefiev
Je suppose que vous avez lu le lien wikipedia fourni par @Patrick. Tous les services qui utilisent l'adresse IPv6 mappée IPv4 seront affichés dans tcp6la sortie de netstat.
débutant
14

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.128est 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à répertorier les applications utilisant IPv6, vous allez également obtenir IPv4.
Il pourrait représenter 10.0.176.93comme ::ffff:10.0.176.93, ou même ::ffff:a00:b05d, mais les développeurs d'applications ont choisi de l'afficher comme une adresse IPv4 régulière en notation pointillée.

Patrick
la source
Merci, mais cela ne répond pas à la raison pour laquelle ils n'apparaissent pas lorsqu'ils font régulièrement-A inet
Mischa Arefiev
Je suppose que la raison pour laquelle les connexions d'écoute ne sont répertoriées que comme sockets tcp6 est qu'elles sont vraiment des sockets IPv6, mais avec la fonctionnalité supplémentaire qu'elles acceptent également les connexions IPv4, si elles sont configurées pour le faire. Les sockets sont liés à INADDR_ANY6, et lorsqu'une connexion IPv4 arrive, l'adresse est mappée à une adresse IPv6 avec le préfixe :: ffff: 0000/96. C'est la seule utilisation de ces adresses mappées; ils ne doivent pas être utilisés sur le fil.
Johan Myréen