Automatisiertes Auswählen von Paketquellen

DNS Round Robin

In den meisten Fällen gibt es zu einem Servernamen genau eine IP-Adresse (oder je eine IPv4- und eine IPv6-Adresse). Stärker in Anspruch genommene Dienste verteilen die Last aber oftmals auf mehr als eine Maschine. In solchen Fällen werden gerne mehr als eine IP-Adresse pro Servernamen zurückgegeben. Daraufhin wählt das Programm, welches eine Verbindung aufbauen möchte, willkürlich eine der zur Auswahl stehenden IP-Adressen aus. Auf diese Weise kann die Last zwischen mehreren (identisch konfigurierten) Servern aufgeteilt werden.

Ein bekanntes Beispiel eines solchen Falles im Kontext von Debian Paketspiegeln ist ftp.us.debian.org. Aufgrund der Größe der USA wird die Last des dortigen primären Debian-Paketmirrors auf drei Server aufgeteilt.

IP-Verteilung des primären Debian-Paketmirrors für die USA
$ host ftp.us.debian.org
ftp.us.debian.org has address 64.50.236.52
ftp.us.debian.org has address 128.61.240.89
ftp.us.debian.org has address 64.50.233.100
ftp.us.debian.org has IPv6 address 2610:148:1f10:3::89
$

Auch wenn es vier IP-Adressen sind, handelt es sich jedoch nur um drei Server. Sowohl die IPv6-Adresse 2610:148:1f10:3::89, als auch die IPv4-Adresse 128.61.240.89 gehören zum Server debian.gtisc.gatech.edu.

Paketquellen über GeoIP auswählen

Bei diesem Verfahren wird einer IP-Adresse ein geographischer Standort zugeordnet. Die Genauigkeit dieser Funktion schwankt je nach Internet-Anbieter, Datenbank und eingesetztem Verfahren.

Zu beachten ist dabei, dass der angegebene Standort nicht notwendigerweise dem tatsächlichen Standort des Rechners mit dieser IP-Adresse entspricht. Meistens ist das der Standort des Providers, von dem Sie diese IP-Adresse bezogen haben bzw. der diese IP-Adresse vergeben hat.

geoiptool.png
Figure 1. Standortlokalisierung über das GeoIP Tool [geoiptool]

Eine Offline-Zuordnung ermöglicht beispielsweise das Paket 'geoip-database' [Debian-Paket-geoip-database]. Es enthält eine entsprechende Datenbank mit stets bestehenden, festen IP-Adressen. Darüberhinaus existieren jedoch auch deutlich exaktere Alternativen.

Diese Funktionalitat lässt sich nutzen, um anhand der anfragenden IP-Adresse automatisiert einen geographisch nahen Paketmirror zu finden. Bei Debian ist dies an mehreren Stellen im Einsatz.

Immer per GeoIP: Security-Updates

Security-Updates kommen bei Debian nicht über das normale Spiegelnetzwerk, welches regulär nur alle sechs Stunden aktualisiert wird. Stattdessen besteht ein separates Spiegelnetzwerk unter dem Hostnamen security.debian.org, das nur nach Bedarf aktualisiert wird. Dieses Spiegelnetzwerk verwendet immer GeoIP per DNS und gibt stets eine Liste von Paketspiegeln auf demselben Kontinent zurück, auf dem Sie sich netztechnisch gerade aufhalten.

GeoIP per DNS

Mit dem Hostnamen cdn.debian.net[1] erreichen Sie seit vielen Jahren (fast) immer einen offiziellen Debian-Spiegelserver in ihrer Nähe. cdn.debian.net war daher für einige Jahre die Voreinstellung im Debian-Installer, wenn Sie nicht explizit einen anderen Paketmirror ausgewählt haben.

Die Nähe wird bei diesem System über die Quell-IP der DNS-Anfrage bestimmt und hängt somit auch davon ab, wo der zwischenspeichernde DNS-Server steht, an den die DNS-Anfrage gesendet wurde. Netzwerktechnisch betrachtet stehen diese DNS-Server im Normalfall immer unweit des anfragenden Rechners.

Da hier die Auswahl des Paketmirrors bereits auf DNS-Ebene passiert, funktioniert diese Methode nicht nur mit HTTP, sondern auch mit FTP und theoretisch sogar auch mit rsync. Allerdings bieten nicht alle Paketmirror den Inhalt auch per rsync an. Somit funktioniert cdn.debian.net stets zuverlässig mit HTTP als auch mit FTP in der /etc/apt/sources.list. Nachfolgendes Beispiel zeigt Eintragungen für Debian 'Wheezy' mit HTTP wie auch FTP:

deb http://cdn.debian.net/debian/ wheezy main contrib non-free
deb ftp://cdn.debian.net/debian/ wheezy main contrib non-free

Eine tatsächliche Nähe zum zurückgegebenen Paketmirror ist jedoch nicht immer gegeben. Zeitweise funktioniert dieser Dienst in manchen Ländern auch weniger gut. Nachfolgend sehen Sie einige Beispiele für ausgewählte Regionen. Das erste Beispiel stammt aus Deutschland:

Erreichbarkeit des Paketmirrors cdn.debian.net von Deutschland aus
$ host cdn.debian.net
cdn.debian.net is an alias for deb.cdn.araki.net.
deb.cdn.araki.net has address 137.226.34.42
deb.cdn.araki.net has address 129.143.116.10
deb.cdn.araki.net has address 195.71.68.86
$

In Frankreich bekommen Sie ggf. die folgende Ausgabe:

Erreichbarkeit des Paketmirrors cdn.debian.net von Frankreich aus
$ host cdn.debian.net
cdn.debian.net is an alias for deb.cdn.araki.net.
deb.cdn.araki.net has address 91.121.124.139
$

Ein Beispiel aus Schweden:

Erreichbarkeit des Paketmirrors cdn.debian.net von Schweden aus
$ host cdn.debian.net
cdn.debian.net is an alias for deb.cdn.araki.net.
deb.cdn.araki.net has address 213.129.232.18
$

Machen Sie die Anfrage hingegen aus Großbritannien, kann es so aussehen:

Erreichbarkeit des Paketmirrors cdn.debian.net von Großbritannien aus
$ host cdn.debian.net
cdn.debian.net is an alias for deb.cdn.araki.net.
deb.cdn.araki.net has address 83.142.228.128
$

Für die Schweiz sah es zum Zeitpunkt unserer Recherche leider etwas enttäuschend aus. Der Dienst war nicht verfügbar — wie man sieht, funktionert der Dienst eben nicht überall perfekt.

Erreichbarkeit des Paketmirrors cdn.debian.net von der Schweiz aus
$ host cdn.debian.net
Host cdn.debian.net not found: 3(NXDOMAIN)
$

GeoIP per HTTP-Redirect

Raphael Geissert hat den Debian Redirector [Debian-Redirector] entwickelt, der eine Alternative zu cdn.debian.net darstellt. Ursprünglich lief dieser Dienst unter der URL http://http.debian.net/ außerhalb der Debian-internen Infrastruktur. Seit Mai 2015 ist der Dienst auf Debian-eigene Server umgezogen und dort unter http://httpredir.debian.org/ zu erreichen. Die ursprüngliche Adresse http://http.debian.net/ leitet seitdem automatisch auf http://httpredir.debian.org/ um. Tragen Sie als Paketquelle http://httpredir.debian.org/debian/ ein, sendet APT zuerst eine HTTP-Anfrage an httpredir.debian.org und bekommt als Antwort eine Weiterleitung an den eigentlichen Paketmirror. Die nachfolgende Ausschnitt zeigt den Eintrag für Debian 7 'Wheezy' in der Datei /etc/apt/sources.list:

deb http://httpredir.debian.org/debian/ wheezy main contrib non-free

Interessant ist auch die Netzwerkkommunikation, die (unbemerkt) im Hintergrund abläuft. Wir zeigen das anhand eines Beispiels aus der Schweiz genauer. Zur Analyse kommt das Kommando GET aus dem Paket 'libwww-perl' zum Einsatz. Zu sehen ist, dass die Anfrage an httpredir.debian.org aufgelöst wird und eine Weiterleitung (Redirect) zum Debian-Paketmirror an der ETH Zürich erfolgt.

Auswertung der Netzwerkkommunikation bei der Auflösung der IP
$ GET -SUsed http://httpredir.debian.org/debian/
GET http://httpredir.debian.org/debian/
User-Agent: lwp-request/6.03 libwww-perl/6.04

302 Found
Connection: close
Date: Thu, 10 Jul 2014 00:32:59 GMT
Location: http://debian.ethz.ch/debian/
Vary: Accept-Encoding
Content-Length: 0
Content-Type: text/plain
Client-Date: Thu, 10 Jul 2014 00:32:59 GMT
Client-Peer: 46.4.205.44:80
Client-Response-Num: 1

GET http://debian.ethz.ch/debian/
User-Agent: lwp-request/6.03 libwww-perl/6.04

200 OK
Connection: close
Date: Thu, 10 Jul 2014 00:32:59 GMT
Server: Apache/2.2.22 (Debian)
Vary: Accept-Encoding
Content-Type: text/html;charset=UTF-8
Client-Date: Thu, 10 Jul 2014 00:32:59 GMT
Client-Peer: 129.132.53.171:80
Client-Response-Num: 1
Client-Transfer-Encoding: chunked
Title: Index of /debian
$

Von Vorteil ist hier die höhere Genauigkeit. Die GeoIP kann nicht nur auf den zwischenspeichernden DNS-Servern, sondern auch auf den anfragenden Rechner selbst angewendet werden. Dabei wird auch das genutzte Netzwerkprotokoll berücksichtigt. Nutzen Sie IPv6, erhalten Sie dann eine Empfehlung für einen passenden, IPv6-fähigen Paketmirror in ihrer Nähe [Debian-Mirror-Doku].

Desweiteren kann der Redirect auch in Abhängigkeit der angefragten Datei passieren. So werden z.B. Anfragen nach Paketen aus dem Bereich 'Backports' nur an Paketmirrors weitergeleitet, die auch die Paketquellen für 'Backports' spiegeln[2]. Darüber hinaus muss die Paketquelle nicht auf jeden Paketspiegel unter dem gleichen Pfad liegen. Möglich sind z.B. statt der Empfehlung /debian/ auch /pub/debian/ oder /mirror/debian/.

Das Verfahren mit HTTP-Weiterleitungen hat jedoch auch Nachteile. Einerseits funktioniert es ausschließlich per HTTP (oder HTTPS), da FTP keine Weiterleitungen kennt. Aus dieser Einschränkung leitet sich auch der Hostname httpredir.debian.org ab. Andererseits werden pro Paketliste sowie pro heruntergeladenem Paket stets zwei HTTP-Anfragen gesendet.

Da sich dieses Verfahren trotz der o.g. Einschränkung in der Praxis als zuverlässiger, flexibler, genauer und leichter wartbar erwies[3], setzt es sich gegenüber dem Dienst cdn.debian.net und somit innerhalb von Debian immer mehr als Voreinstellung durch.

Automatische Paketmirror-Auswahl per Mirror-Liste

APT kann seit Version 0.8 (ca. Ende 2010, ab Debian 6 'Squeeze' und Ubuntu 10.10 'Maverick Meerkat') über das Schlüsselwort mirror in der Datei /etc/apt/sources.list seine Paketquelle aus einer Liste von Paketspiegeln aussuchen [Vogt-Apt-Mirror].

Offizielle Mirror-Listen im passenden Format gibt es bisher jedoch nur von Ubuntu. Für Ubuntu 12.04 LTS 'Precise Pangolin' sieht der Eintrag für generell gut erreichbare Paketmirrors wie folgt aus:

deb mirror://mirrors.ubuntu.com/mirrors.txt precise main restricted universe multiverse

In diesem Fall wird z.B. beim Aufruf von apt-get update zunächst die Mirror-Liste unter http://mirrors.ubuntu.com/mirrors.txt heruntergeladen. In dieser Datei stehen die Basis-URLs mehrerer Paketquellen. Danach sucht sich APT per Zufall eine der dieser Paketquellen aus und lädt von dort die spezifizierten Paketlisten herunter.

Clientseitig nutzt dieses Verfahren keinerlei GeoIP-Informationen, sondern wählt pro Maschine einen zufälligen Paketspiegel aus. Zunächst deutet o.g. URL auf eine simple Textdatei hin. Diese Datei wird jedoch bei jedem Aufruf automatisch neu generiert und — ähnlich wie die Weiterleitungen beim Debian Redirector — je nach anfragender IP dynamisch mit URLs anderer Spiegel gefüllt. Laden Sie diese Datei aus der Schweiz herunter, kann sie z.B. so aussehen:

http://ubuntu.ethz.ch/ubuntu/
http://archive.ubuntu.csg.uzh.ch/ubuntu/
http://mirror.switch.ch/ftp/mirror/ubuntu/
http://archive.ubuntu.com/ubuntu/

Aus Österreich sieht die Liste dagegen z.B. so aus:

http://ubuntu.lagis.at/ubuntu/
http://ubuntu.inode.at/ubuntu/
http://ubuntu.uni-klu.ac.at/ubuntu/
http://gd.tuwien.ac.at/opsys/linux/ubuntu/archive/
http://archive.ubuntu.com/ubuntu/

Erfragen Sie die Liste in Deutschland oder Frankreich, kommen sogar noch deutlich mehr Paketspiegel zur Auswahl. Eine Abfrage von einem Server, der bei dem deutschen Internetdienstleister Hetzner gehostet wird, ergab 34 aufgelistete Paketspiegel[4].

Auffällig ist allerdings, dass als letzter Paketmirror in dieser Liste jeweils immer auch noch archive.ubuntu.com angegeben wird. Unter diesem Hostnamen sind per DNS Round Robin wiederum zur Zeit sechs verschiedene Server von Canonical erreichbar.

Alternativ zum dynamisch generierten mirrors.txt können Sie bei Ubuntu auch eine Paketspiegel-Liste per Land angeben. Für Deutschland gibt es eine Liste von deutschen Ubuntu-Paketspiegeln unter http://mirrors.ubuntu.com/DE.txt. Diese verwenden Sie z.B. für Ubuntu 14.04 LTS 'Trusty Tahr' wie folgt in der /etc/apt/sources.list:

deb mirror://mirrors.ubuntu.com/DE.txt trusty main restricted universe multiverse

Wenn Sie möchten, können Sie dieses Feature von APT natürlich auch nutzen, um eine Liste ihrer favorisierten Paketspiegel selbst zusammenzustellen — auch unter Debian.

Unter https://www.debian-paketmanagement.de/hetzner-mirrors.txt haben wir z.B. eine Liste von Paketspiegeln für Debian erstellt, die alle bei dem deutschen Internetdienstleister Hetzner gehostet sind (ohne Gewähr) und somit für andere ebenfalls dort gehostete Server nicht mit ins Trafficvolumen zählen. Der passende Eintrag in der /etc/apt/sources.list sind dann so aus:

deb mirror://www.debian-paketmanagement.de/hetzner-mirrors.txt wheezy main contrib non-free

Welcher Paketmirror wird schlussendlich benutzt?

Egal, ob Sie eine der o.g. Methoden zur automatischen Auswahl des Paketspiegels verwendet haben oder ob Sie einen bestimmten Hostnamen in ihrer /etc/apt/sources.list eingetragen haben — oft stellt sich die Frage: Von welchem Paketspiegel bezieht APT denn nun die Paketlisten und Pakete tatsächlich? APT gibt diese Information leider nicht allzu leicht preis.

Falls einem der schlussendlich verwendeten Hostnamen mehr als eine IP zugewiesen ist, wird eine davon zufällig ausgewählt. APT und aptitude verwenden diese IP-Adresse intern, zeigen sie aber erst dann an, wenn Sie eines der Programme zur Paketverwaltung benutzen und die zusätzliche Option -o Debug::pkgAcquire::Worker=true verwenden. Damit wird APT sehr gesprächig und zeigt en detail, welche Einstellungen es benutzt. In dem nachfolgendem Beispiel sehen Sie das auszugsweise bei der Installation des Pakets 'netselect-apt'.

Informationen zum tatsächlich genutzten Paketmirror bei der Verwendung von apt-get
# apt-get -o Debug::pkgAcquire::Worker=true install netselect-apt
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  netselect
The following NEW packages will be installed:
  netselect netselect-apt
0 upgraded, 2 newly installed, 0 to remove and 4 not upgraded.
Starting method '/usr/lib/apt/methods/http'
...
  -> http:600%20URI%20Acquire%0aURI:%20http://ftp.ch.debian.org/debian/pool/main/n/netselect/netselect_0.3.ds1-25_amd64.deb%0aFilename:%20/var/cache/apt/archives/partial/netselect_0.3.ds1-25_amd64.deb%0a%0a
  <- http:102%20Status%0aURI:%20http://ftp.ch.debian.org/debian/pool/main/n/netselect/netselect_0.3.ds1-25_amd64.deb%0aMessage:%20Connecting%20to%20ftp.ch.debian.org%20(129.132.53.171)
...
#

Deutlich übersichtlicher ist jedoch die Demo-Seite des Debian Redirectors [Debian-Redirector]. Neben dem aktuellen Standort — hier Berlin — zeigt Auswahl des Paketmirrors über den Debian Redirector [Debian-Redirector] die ausgewählten Paketquellen als Hostname an.

debian net demo.png
Figure 2. Auswahl des Paketmirrors über den Debian Redirector [Debian-Redirector]

Weitere Ansatzpunkte zur Leistungsfähigkeit eines bestimmten Mirrors liefern Ihnen die Werkzeuge netselect bzw. netselect-apt. Beide Programme stellen wir unter Bandbreite zum Paketmirror testen in [am-besten-erreichbaren-paketmirror-finden] ausführlich vor.


1. 'CDN' steht für Content Distribution Network
2. Dies ist nur noch für Debian 6 'Squeeze' relevant. Ab Debian 7 'Wheezy' sind die Backports in den normalen Debian-Paketquellen enthalten.
3. Es ist wesentlich leichter installierbar als ein autoritativer DNS-Server für eine bestimmte Zone und der Quellcode ist per Git verfügbar.
4. Um keine unübersichtlich langen Beispiele abzudrucken, wurden hier absichtlich die beiden Beispiele aus dem deutschsprachigen Raum gewählt, die relativ kurze Listen ergeben.

results matching ""

    No results matching ""