Comment lier une adresse IPv6 non locale?

Existe-t-il un équivalent de net.ipv4.ip_nonlocal_bind pour ipv6? Besoin de démarrer mon nginx lors du démarrage sur une telle IP …

Mon Ubuntu n'a pas ce IPv6 assigné sur eth0 assez rapidement malgré ce / etc / network / interface:

iface eth0 inet6 static address 1:2:3:4::5 netmask 64 

Au démarrage:

 Starting nginx: the configuration file /etc/nginx/nginx.conf syntax is ok [emerg]: bind() to [1:2:3:4::5]:80 failed (99: Cannot assign requested address) 

Je dois exécuter /etc/init.d/nginx restart quelques secondes après le démarrage pour que les choses fonctionnent: – /

NB: 1: 2: 3: 4 :: 5 est utilisé ici uniquement pour la démo, j'ai une adresse IPv6 valide sur mon serveur.

5 Solutions collect form web for “Comment lier une adresse IPv6 non locale?”

Le net.ipv6.ip_nonlocal_bind sysctl a été ajouté dans le noyau 4.3, donc, si vous utilisez un système plus puissant, vous pouvez maintenant résoudre ce problème directement avec le sysctl, plutôt que de résoudre le problème avec les scripts de script init.

Le délai est probablement dû à la détection d'adresse doublement IPv6 . Si vous net.ipv6.conf.eth0.dad_transmits , le net.ipv6.conf.eth0.dad_transmits , mais vous pouvez essayer de configurer net.ipv6.conf.eth0.dad_transmits sur 0 (par défaut 1 sur mon système Ubuntu):

 sysctl -w net.ipv6.conf.eth0.dad_transmits=0 

Pour rendre permanent:

 sudo /bin/bash -c 'echo "net.ipv6.conf.eth0.dad_transmits=0" > /etc/sysctl.d/99-disable-dad-eth0.conf' 

Bien sûr, l'autre option consiste à simplement se lier à :: (IPv6 tous les zéros ou toute adresse IPv6) et un pare-feu hors service sur les interfaces qui ne devraient pas l'exposer.

Vous pouvez simplement configurer une entrée d'adresse IPv6 statique sur l'interface de bouclage. Cela permettra à nginx d'écouter sur IP / PORT, même si l'adresse n'est pas encore disponible sur eth0.

Manuel:

 /sbin/ip -6 addr add 2001:db8::ffff:1/64 dev lo 

Fichier de configuration:

 # File: '/etc/network/interfaces' auto lo iface lo inet loopback iface lo inet6 static address 2001:db8::ffff:1 netmask 64 

Comme il semble qu'il n'y ait pas de paramètre kernel pour ipv6, vous pouvez pirater le script init de nginx et ajouter:

 grep -q eth0 /etc/network/run/ifstate || ifup eth0 

Quelque part avant la commande de lancer nginx?

Ou, comme vous semblez utiliser un debian ou une dérivation, vous pouvez essayer de réorganiser vos scripts d'init par dépendance à l'aide de l' insserv du package et passer au script d'init parallèle lauchning en définissant la variable CONCURENCY=makefile dans /etc/default/rcS (si vous utilisez Debian Squeeze, c'est la configuration par défaut).

Je suis sûr que vous avez résolu votre problème à un moment donné au cours des quatre dernières années, car cette publication a été commencée, mais j'ai fini par essayer de trouver une solution pour démarrer nginx sur un système CentOS 7 activé par système avec des problèmes similaires, donc Peut-être cela aidera les autres.

Mon nginx apparaîtrait avant le réseautage pour IPv4 et IPv6 était en cours, ce qui ne permettait pas de démarrer et de rester en panne. RedHat a un bug sur lequel le système 'After' network-online.target est défini avant la mise en veille de l'IPv6, donc nginx est exécuté avant de pouvoir lier les adresses IPv6 dans sa configuration.

Malheureusement, c'est un bug, ma seule option était d'introduire un appel de sommeil dans la définition du service système pour nginx, donc il durerait assez longtemps pour démarrer que IPv6 serait prêt.

Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de réseau.