it-swarm.it

Convinci apt-get * not * per usare il metodo IPv6

L'ISP a cui lavoro sta configurando una rete IPv6 interna in preparazione per eventualmente collegarsi a Internet IPv6. Di conseguenza, molti server in questa rete ora provano a connettersi a security.debian.org tramite il suo indirizzo IPv6 per impostazione predefinita quando eseguono apt-get update e ciò si traduce nel dover attendere un lungo timeout ogni volta che sto scaricando aggiornamenti di qualsiasi tipo.

C'è un modo per dire a apt di preferire IPv4 o ignorare del tutto IPv6?

245
Shadur

Inserisci -o Acquire::ForceIPv4=true durante l'esecuzione apt-get.

Se vuoi rendere persistente l'impostazione basta creare /etc/apt/apt.conf.d/99force-ipv4 e inserire Acquire::ForceIPv4 "true"; dentro:

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

Opzioni di configurazione Acquire::ForceIPv4 e Acquire::ForceIPv6 sono stati aggiunti alla versione 0.9.7.9 ~ exp1 (vedi bug 611891 ) che è disponibile da Ubuntu Saucy (rilasciato in Ottobre 2013) e Debian Jessie (rilasciato ad aprile 2015).

324
mmoya

Come dice Gilles , usa gai.conf. Appunti:

  1. Funziona a un livello molto più basso (rete DNS e IP) rispetto a APT, quindi cambierà il modo in cui tutta la tua rete di applicazioni - almeno, tutto ciò usa getaddrinfo.
  2. Prima di modificare il tuo gai.conf, dovresti eseguirne il backup e anche leggerlo (non preoccuparti, è breve). Le modifiche seguenti sono probabilmente già menzionate nel tuo file corrente; se il file corrente indica qualcosa di diverso da quanto indicato di seguito, probabilmente dovresti preferire ciò che è nel tuo file corrente.

Ma se questo è quello che vuoi (che probabilmente è), procediamo. Supponiamo di avere due host www.he.net e 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

Caso 1: preferisci IPV4 per tutti gli host

Aggiungi a /etc/gai.conf la seguente riga:

precedence ::ffff:0:0/96  100

Dopo aver salvato il file modificato (non è necessario riavviare), dovresti vedere le app di rete (ad es. telnet) utilizzando IPV4: ad es.

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

Caso 2: preferisci IPV6 per host specifici

Se vogliamo preferire IPV6 solo per www.he.net o la sua rete, possiamo aggiungere a maschera/prefisso per tutti, o solo una parte, del suo indirizzo IPV6 a /etc/gai.conf. Ad esempio, la seguente riga:

precedence 2001:470::/32 100

(dopo aver salvato il file modificato) produce

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

Caso 3: preferisci IPV4 per host specifici

Se invertiamo la maschera, sarà vero il contrario? Secondo @GrueMaster, in aggiunta

precedence 2001:470::/96 100

ha funzionato per lui dopo aver disabilitato IPV6 per security.ubuntu.com (altrimenti si blocca per sempre).


Guarda anche:

84
Lmwangi

Puoi impostare apt-cacher-ng su una macchina di riserva per agire come proxy/cache per tutti i tuoi host. Puoi forzare la configurazione a usare solo host specifici o usare il trucco/etc/hosts suggerito da @badp su quella macchina.

apt-get install apt-cacher-ng

Una volta che hai configurato apt-cache-ng devi solo eliminare la seguente riga (con indirizzo IP/nome host modificato per puntare alla tua macchina cache) in / etc/apt/apt.conf.d/90httpproxy =

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

Uso questa configurazione per ridurre l'utilizzo della larghezza di banda, ma dovrebbe risolvere il problema. Purtroppo non sono a conoscenza di un modo per disabilitare direttamente le ricerche ipv6 per apt-get stesso.

10
Richm

È possibile aggirare il problema configurando un server proxy DNS che ha eliminato le risposte ip6.

5
pjc50

Che ne dici di aggiungere una riga in /etc/hosts sovrascrivendo gli indirizzi pertinenti? per esempio.,

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

Dirottamento di un vecchio argomento, ma recentemente affrontato con lo stesso problema. Quindi, in base ai consigli sopra riportati e all'output di Host e 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

Risolto problema in un modo leggermente diverso - abbassata la precedenza delle reti IPv6 che contengono security.debian.org in /etc/gai.conf:

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

Quindi, IPv6 è ancora preferito tranne security.debian.org .

1
Timur Bakeyev

Dall'8 ottobre 2014, ho avuto lo stesso problema, cercando di aggiornare debian dietro un proxy sulla rete locale. Nella speranza che sia pertinente per gli altri, inserisco la mia risposta qui. Come altri hanno già detto, la modifica di /etc/hosts È qualcosa con cui bisogna fare attenzione.

Ma personalmente volevo solo fare l'aggiornamento.

Contenuto di /etc/apt/sources.list durante l'aggiornamento (era diverso prima dell'aggiornamento ..):

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

Contenuto di /etc/apt/apt.conf:

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

Aggiunta a/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

Ora, eseguire apt-get update ; apt-get upgrade Come root ha funzionato bene.

Come menzionato in altre risposte, utilizzare, eseguire il comando Host sul dominio per ottenere l'IP corretto da inserire nel file hosts.

Esempio:

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

Ciò ha aggiornato correttamente il sistema a Debian GNU/Linux testing (jessie). Potresti non voler eseguire con i repository di test, quindi rimuoverlo semplicemente dai sorgenti. I repository di test offrono aggiornamenti più recenti di diversi pacchetti, ma non sono considerati stabili.

1
NordicViking

Ho trovato un modo molto migliore per farlo. Apri il tuo sources.list file e annotare i nomi host dei repository. Ottieni i loro indirizzi IPv4, quindi modifica sources.list con gli indirizzi IPv4 anziché i nomi host. Apt-get dovrebbe ora contattare i repository sugli indirizzi IPv4 specificati, ignorando IPv6.

Lo svantaggio è che i repository hanno in genere una sorta di bilanciamento del carico e/o impostazione della geolocalizzazione IP, che questo metodo ovviamente ignora. Tuttavia, non dovrebbe importare se solo poche persone lo stanno facendo. Se trovi che un mirror è lento, prova a ottenere un altro indirizzo IP repository (ad esempio, utilizzando un servizio ping online) e usalo.

0
D. Strout