IPv6 yöntemini kullanmak için apt-get * not * ifadesini kullanın


239

Çalıştığım ISS, sonunda IPv6 internete bağlanmak için hazırlık aşamasında bir iç IPv6 ağı kuruyor. Sonuç olarak, bu ağdaki sunucuların birçoğu şimdi varsayılan olarak IPv6 adresi üzerinden security.debian.org adresine bağlanmayı deniyor apt-get updateve bu da her türlü güncellemeyi indirirken uzun bir zaman aşımı süresi beklemek zorunda kalmamamla sonuçlanıyor .

IPv4'ü tercih etmenin veya tamamen IPv6'yı yoksaymanın uygun olduğunu söylemenin bir yolu var mı?


3
Bu hemen bir yönlendirme arızasıyla geri dönmemeli mi?
pjc50

7
Hayır, iç ağlarının birden fazla alt ağ arasında yönlendirme yapması (ve ana bilgisayarların varsayılan IPv6 ağ geçidi vardır) ancak dış dünyaya IPv6 bağlantısı olmaması tamamen mümkündür.
Andrew Medico

5
Orada kurmak için bir yol muhtemelen /etc/gai.confböylece security.debian.org'AAA kaydının önce döndürülür A kaydını s, ama ben o dosyaya koymak için tam bilmiyorum.
Gilles

3
@AndrewMedico - ama ağlarının varsayılan ağ geçitleri harici ipV6 bağlantısı olmadığını bilmemeli ve kenardaki giden girişimi oldukça hızlı bir şekilde reddetmeli mi? Bence burada bir sorunun yanı sıra sorulan bir ağ sorunu var.
Michael Kohne

7
Uç yönlendiriciyi / güvenlik duvarını / soruna neden olan şeyi düzeltmek, bunun üstesinden gelmenin "en iyi" yoludur. Bu olmalıdır ICMP hedef ulaşılamaz paket iade. Bu ya gerçekleşmiyor ya da bir şey onu engelliyor. Her iki durumda da, sorun ağınızdaki çalışanlara bildirilmelidir.
Michael Hampton

Yanıtlar:


319

-o Acquire::ForceIPv4=trueÇalışırken ekle apt-get.

Ayarı kalıcı kılmak istiyorsanız, sadece /etc/apt/apt.conf.d/99force-ipv4 oluşturun ve ekleyinAcquire::ForceIPv4 "true"; :

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

Yapılandırma seçenekleri Acquire::ForceIPv4ve Ubuntu Saucy'den ( Ekim 2013'te piyasaya sürülen) ve Debian Jessie'den (Nisan 2015'te piyasaya sürülen) beri mevcut olan 0.9.7.9 ~ exp1 sürümüne (bkz. Hata 611891 ) Acquire::ForceIPv6eklendi .


7
Buna "kabul edilen" i taşımak; Orijinal 30 puanlık cevap mükemmel doğru ise bu seçeneği sağlarken, çok daha geniş bir ölçekte uygulanabilir olduğunu sadece apt-get kısıtlar.
Shadur

Lütfen cevabınızda doğru bir şekilde açıklayıcı olun. -o Acquire :: ForceIPv4 = true, kullanıcının ipv4 kullanmasına izin verme komutunun eklenmesidir
Kendrick

Cevap Kendrick'in önerisini takiben güncellendi cevap
mmoya

1
Geri kalanımdan bakılırsa şöyle apt.confyazmanız gerekir: Acquire::ForceIPv4 "true";(çift tırnak)
mirabilos

6
@ ZAB çünkü dosyaya yazma erişiminiz sudo echo 'test' > fileyoksa, yönlendirme kullanıcı izinleriyle yürütüldüğü için
çalışmaz

81

As Gilles diyor , kullanmak gai.conf. Notlar:

  1. Bu, APT'den çok daha düşük bir seviyede çalışır (DNS ve IP ağı), bu nedenle tüm uygulamalarınızın ağını değiştirir - en azından hepsini kullanır getaddrinfo.
  2. Düzenlemeden önce gai.confonu yedeklemeli ve ayrıca okumalısın (endişelenme, kısa). Aşağıdaki düzenlemeler muhtemelen mevcut dosyanızda zaten belirtilmiştir; Geçerli dosya aşağıda belirtilenlerden farklı bir şey gösteriyorsa, büyük olasılıkla mevcut dosyanızdakileri tercih etmelisiniz.

Ama istediğin buysa (muhtemelen olanı), devam edelim. Diyelim ki iki ana makinemiz var www.he.netve 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

Durum 1: tüm ana bilgisayarlar için IPV4'ü tercih edin

/etc/gai.confAşağıdaki satıra ekle :

precedence ::ffff:0:0/96  100

Düzenlenmiş dosyayı kaydettikten sonra (yeniden başlatmaya gerek kalmaz), telnetIPV4 kullanarak ağ uygulamaları (örn. ) Görmelisiniz:

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

Durum 2: IPV6'yı belirli ana bilgisayarlar için tercih et

IPV6'yı yalnızca www.he.netağında veya ağında tercih etmek istiyorsak , IPV6 adresinin tümü veya yalnızca bir kısmı için maske / ön ek ekleyebiliriz /etc/gai.conf. Örneğin, şu satır:

precedence 2001:470::/32 100

(düzenlenen dosyayı kaydettikten sonra) üretir

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

Durum 3: IPV4'ü belirli ana bilgisayarlar için tercih et

Maskeyi ters çevirirsek tersi geçerli olur mu? @GrueMaster'a göre, ekleme

precedence 2001:470::/96 100

IPV6'yı devre dışı bıraktıktan sonra onun için çalıştı security.ubuntu.com(aksi halde sonsuza dek durur).


Ayrıca bakınız:


Belki de yukarıdaki bağlantıların ortadan kalkması durumunda içeriği özetleyebilir misiniz?
Faheem Mitha

Öyleyse, belirli bir ad veya en azından belirli bir adres (aralık) için IPv6'yı devre dışı bırakma sözdizimi nedir? Bunu gönderinize eklerseniz, buradaki en iyi cevap bu olacaktır.
Gilles

Teşekkürler. #security.debian.org has IPv6 address 2610:148:1f10:3::73 \n #security.debian.org has IPv6 address 2001:4f8:8:36::6 \n precedence 2001:4f8::/96 100 \n precedence 2610:148::/96 100 /Etc/gai.conf dosyasına 2 satır ekledim ve apt-get update şimdi mükemmel çalışıyor.
don

10

Sen kurulum olabilir apt-cacher-ng Tüm ana bilgisayarlarınız için bir proxy / önbellek olarak hareket etmek yedek bir makine üzerinde. Yapılandırmayı yalnızca belirli ana bilgisayarları kullanmaya zorlayabilir veya bu makinede @ badp tarafından önerilen / etc / hosts numarasını kullanabilirsiniz.

apt-get install apt-cacher-ng

Apt-cache-ng kurulumunuz yapıldıktan sonra /etc/apt/apt.conf.d/90httpproxy dosyasına aşağıdaki satırı (önbellek makinenizi gösterecek şekilde değiştirilmiş IP adresi / ana bilgisayar adı değiştirilmiş) bırakmanız yeterlidir.

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

Bant genişliği kullanımını azaltmak için bu ayarı kullanıyorum, ancak sorununuzu çözmesi gerekiyor. Ne yazık ki apt-get'in kendisi için ipv6 aramalarını doğrudan devre dışı bırakmanın bir yolunun farkında değilim.


Yine de mükemmel bir çözüm değil, fakat elde edebileceği kadar iyi. Teşekkürler.
Shadur

5

IP6 yanıtlarını bırakan bir DNS proxy sunucusu kurarak bu sorunu çözebilirsiniz.


Yerel çözümleyiciniz hala AAAA kaydını almaya çalışmıyor mu? Ve zaman aşımı?
Mikel

4

/etc/hostsİlgili adresleri geçersiz kılmak için bir satır eklemeye ne dersiniz ? Örneğin,

130.89.149.226  ftp.debian.org      
195.20.242.89   security.debian.org 

13
Kesinlikle başka bir yolun olmadığı ortaya çıktığında bu çözümü son için saklayacağım; Ben gerçekten yığılan sevmiyorum /etc/hostskendimi ait değil IP adresleri ile.
Shadur

@Shadur Evet, amacınızı tamamen görebiliyorum :)
badp

Not: Bunların çevrilmesi gerekiyor, bu yüzden IP sonra ana bilgisayar adı
Mike T

1

Eski konuyu ele geçirmek, ancak son zamanlarda aynı sorunla karşılaştık. Bu nedenle, yukarıda verilen tavsiyelere ve ev sahibi ile whois çıkışına dayanarak :

# 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

Sorunu biraz farklı bir şekilde çözdüm - /etc/gai.conf adresinde security.debian.org içeren IPv6 ağlarının önceliğini düşürdüm :

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

Bu nedenle, security.debian.org dışında IPv6 hala tercih edilmektedir .


1

08 Ekim 2014 itibariyle, yerel ağdaki bir proxy arkasındaki debian'ı güncellemeye çalışırken aynı sorunu yaşadım. Bunun başkaları ile alakalı olacağını umarak yanıtımı buraya yazıyorum. Diğerlerinin de söylediği gibi, düzenleme /etc/hostsyapılması gereken bir şeydir.

Ancak şahsen ben sadece güncellemenin yapılmasını istedim.

Güncelleme yapılırken /etc/apt/sources.list içeriği (güncellemeden önce farklıydı ..):

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

/Etc/apt/apt.conf içeriği:

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

/ Etc / hosts dosyasına ek olarak:

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

Şimdi apt-get update ; apt-get upgradekök olarak çalışmak iyi çalıştı.

Diğer cevaplarda belirtildiği gibi, hosts dosyasına yerleştirmek için doğru ipi almak için etki alanındaki host komutunu kullanın.

Örnek:

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

Bu sistem başarıyla güncellendi Debian GNU/Linux testing (jessie). Test havuzları ile çalışmak istemeyebilir, daha sonra kaynaklardan kaldırabilirsiniz. Test havuzları size birkaç paketin daha yeni güncellemelerini verir, ancak kararlı olarak kabul edilmez.


Yine, hostsdosyayı değiştirmek oldukça düşük kaliteli bir çözümdür.
Shadur

0

Bunu yapmanın daha iyi bir yolunu buldum. sources.listDosyanızı açın ve depoların ana bilgisayar adlarını not alın. IPv4 adreslerini alın , ardından sources.listana bilgisayar adları yerine IPv4 adresleriyle düzenleyin . Apt-get şimdi IPv6'yı atlayarak, belirttiğiniz IPv4 adresleri üzerindeki depolarla iletişim kurmalıdır.

Repoların, genellikle bu yöntemin atladığı, bir çeşit yük dengeleme ve / veya IP konum belirlemesi kurmasının dezavantajı vardır. Ancak, sadece birkaç kişinin yapması önemli değil. Bir yansımayı yavaş bulursanız, başka bir repo IP adresi almayı deneyin (örneğin, çevrimiçi bir ping hizmeti kullanarak) ve bunu kullanın.


2
Bu, aslında, zaten tarif ettiğiniz nedenlerden dolayı gerçekten kötü bir çözüm.
Shadur

-4

Bu sizin için çalışıyorsa deneyebilirsiniz

user@ubuntuvm:~$ sudo bash
root@ubuntuvm:~# echo 1 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6 

-> arayüz adınızı değiştirin


Bu istediğimden farklı bir soru için bir çözüm.
Shadur
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.