web-dev-qa-db-fra.com

Convaincre apt-get * not * d'utiliser la méthode IPv6

Le FAI sur lequel je travaille met en place un réseau IPv6 interne en vue d'une éventuelle connexion à Internet IPv6. Par conséquent, plusieurs des serveurs de ce réseau tentent désormais de se connecter à security.debian.org via son adresse IPv6 par défaut lors de l'exécution de apt-get update, ce qui oblige à attendre longtemps avant de télécharger des mises à jour de toute sorte.

Existe-t-il un moyen de dire à apt de préférer IPv4 ou d'ignorer complètement IPv6?

245
Shadur

Ajouter -o Acquire::ForceIPv4=true lors de l'exécution apt-get.

Si vous voulez rendre le paramètre persistant, créez simplement /etc/apt/apt.conf.d/99force-ipv4 et mettez Acquire::ForceIPv4 "true"; dedans:

echo 'Acquire::ForceIPv4 "true";' | Sudo tee /etc/apt/apt.conf.d/99force-ipv4

Options de configuration Acquire::ForceIPv4 et Acquire::ForceIPv6 ont été ajoutés à la version 0.9.7.9 ~ exp1 (voir bug 611891 ) qui est disponible depuis Ubuntu Saucy (publié dans Octobre 2013) et Debian Jessie (sortie en avril 2015).

324
mmoya

Comme Gilles dit , utilisez gai.conf. Remarques:

  1. Cela fonctionne à un niveau bien inférieur (DNS et réseau IP) qu'APT, donc cela changera la façon dont tout votre réseau d'applications - au moins, tout cela utilisez getaddrinfo.
  2. Avant de modifier votre gai.conf, vous devez le sauvegarder et le lire (ne vous inquiétez pas, c'est court). Les modifications ci-dessous sont probablement déjà mentionnées dans votre fichier actuel; si le fichier actuel indique quelque chose de différent de ce qui est mentionné ci-dessous, vous devriez probablement préférer ce qui se trouve dans votre fichier actuel.

Mais si c'est ce que vous voulez (ce qui est probablement le cas), continuons. Disons que nous avons deux hôtes www.he.net et www.ripe.net:

$ Host www.he.net
www.he.net is an alias for he.net.
he.net has address 216.218.186.2
he.net has IPv6 address 2001:470:0:76::2

$ Host www.ripe.net
www.ripe.net has address 193.0.6.139
www.ripe.net has IPv6 address 2001:67c:2e8:22::c100:68b

Cas 1: préférez IPV4 pour tous les hôtes

Ajouter à /etc/gai.conf la ligne suivante:

precedence ::ffff:0:0/96  100

Après avoir enregistré le fichier modifié (pas besoin de redémarrer), vous devriez voir des applications de mise en réseau (par exemple, telnet) utilisant IPV4: par exemple,

$ telnet www.ripe.net 81
Trying 193.0.6.139...
^C
$ telnet www.he.net 81
Trying 216.218.186.2...

Cas 2: préférez IPV6 pour des hôtes spécifiques

Si nous voulons préférer IPV6 uniquement pour www.he.net ou son réseau, nous pouvons ajouter un masque/préfixe pour tout ou partie de son adresse IPV6 à /etc/gai.conf. Par exemple, la ligne suivante:

precedence 2001:470::/32 100

(après avoir enregistré le fichier édité) produit

$ telnet www.ripe.net 81
Trying 193.0.6.139...
^C
$ telnet www.he.net 81
Trying 2001:470:0:76::2...
^C

Cas 3: préférez IPV4 pour des hôtes spécifiques

Si nous inversons le masque, l'inverse sera-t-il vrai? Selon @GrueMaster, en ajoutant

precedence 2001:470::/96 100

travaillé pour lui après avoir désactivé IPV6 pour security.ubuntu.com (sinon ça cale pour toujours).


Voir également:

84
Lmwangi

Vous pouvez configurer apt-cacher-ng sur une machine de rechange pour agir en tant que proxy/cache pour tous vos hôtes. Vous pouvez forcer la configuration à n'utiliser que des hôtes spécifiques ou utiliser l'astuce/etc/hosts suggérée par @badp sur cette seule machine.

apt-get install apt-cacher-ng

Une fois que vous avez installé apt-cache-ng, il vous suffit de supprimer la ligne suivante (avec l'adresse IP/le nom d'hôte modifié pour pointer vers votre machine à cacher) dans / etc/apt/apt.conf.d/90httpproxy =

Acquire::http { Proxy "http://[192.168.1.254]:3142"; };

J'utilise cette configuration pour réduire l'utilisation de la bande passante, mais cela devrait contourner votre problème. Malheureusement, je ne suis pas au courant d'un moyen de désactiver directement les recherches ipv6 pour apt-get lui-même.

10
Richm

Vous pouvez contourner ce problème en configurant un serveur proxy DNS qui a supprimé les réponses ip6.

5
pjc50

Que diriez-vous d'ajouter une ligne dans /etc/hosts remplacer les adresses pertinentes? par exemple.,

130.89.149.226  ftp.debian.org      
195.20.242.89   security.debian.org 
4
badp

Détournement d'un vieux sujet, mais récemment confronté au même problème. Donc, sur la base des conseils donnés ci-dessus et de la sortie de Host et whois:

# Host security.debian.org
security.debian.org has address 212.211.132.250
security.debian.org has address 195.20.242.89
security.debian.org has address 212.211.132.32
security.debian.org has IPv6 address 2001:8d8:580:400:6564:a62:0:2
security.debian.org has IPv6 address 2001:a78:5:0:216:35ff:fe7f:be4f
security.debian.org has IPv6 address 2001:a78:5:1:216:35ff:fe7f:6ceb

Problème résolu d'une manière légèrement différente - abaissé la priorité des réseaux IPv6 qui contiennent security.debian.org dans /etc/gai.conf:

# Make IPv6 for security.debian.org undesirable
precedence 2001:8d8:580::/48    5
precedence 2001:a78:5::/48      5

Ainsi, IPv6 est toujours préféré, sauf pour security.debian.org .

1
Timur Bakeyev

Depuis le 8 octobre 2014, j'ai eu le même problème, en essayant de mettre à jour Debian derrière un proxy sur le réseau local. Dans l'espoir que cela sera pertinent pour les autres, je poste ma réponse ici. Comme d'autres l'ont mentionné, l'édition de /etc/hosts Est une chose à laquelle il faut faire attention.

Mais personnellement, je voulais juste faire la mise à jour.

Contenu de /etc/apt/sources.list lors de la mise à jour (c'était différent avant la mise à jour ..):

deb http://http.debian.net/debian/ testing main
deb-src http://http.debian.net/debian/ testing main

deb http://mirrors.kernel.org/debian/ wheezy main
deb-src http://mirrors.kernel.org/debian/ wheezy main

deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main

Contenu de /etc/apt/apt.conf:

Acquire::http::proxy "http://192.168.1.10:7777/";
Acquire::http::Timeout "10";
Acquire::ftp::Timeout "10";

Ajout à/etc/hosts:

#Workaround for making apt-get work (08-10-2014)
195.20.242.89 security.debian.org
130.89.148.12 ftp.debian.org

Maintenant, exécuter apt-get update ; apt-get upgrade En tant que root a bien fonctionné.

Comme mentionné dans d'autres réponses, utilisez, exécutez la commande Host sur le domaine pour obtenir l'IP correcte à insérer dans le fichier hosts.

Exemple:

$ Host ftp.debian.org
ftp.debian.org has address 130.89.148.12

Cela a mis à jour le système avec succès vers Debian GNU/Linux testing (jessie). Vous ne voudrez peut-être pas exécuter avec les référentiels de test, puis supprimez-le simplement des sources. Les référentiels de test vous donnent des mises à jour plus récentes de plusieurs packages, mais ne sont pas considérés comme stables.

1
NordicViking

J'ai trouvé une bien meilleure façon de procéder. Ouvrez votre sources.list fichier et notez les noms d'hôte des dépôts. Obtenez leurs IPv4 adresses, puis modifiez sources.list avec les adresses IPv4 plutôt que les noms d'hôte. Apt-get devrait maintenant contacter les référentiels sur les adresses IPv4 que vous avez spécifiées, en contournant IPv6.

Il y a l'inconvénient que les repos ont généralement une sorte d'équilibrage de charge et/ou de géolocalisation IP, que cette méthode contourne bien sûr. Cependant, cela ne devrait pas avoir d'importance si seulement quelques personnes le font. Si vous trouvez qu'un miroir est lent, essayez d'obtenir une autre adresse IP de dépôt (par exemple, en utilisant un service de ping en ligne) et utilisez-la.

0
D. Strout