Redirection transparente vers les miroirs locaux

Dans un article précédent nous avons vu comment créer un miroir debian local.

Nous allons maintenant aller plus loin et effectuer une redirection transparente vers ce miroir. Note que dans la suite de cet article quand on utilisera le terme “miroir” il pourra s'agir soit d'un miroir “complet” soit bien d'un miroir partiel (apt-cacher-ng, apt-cacher…), les deux étant fonctionnellement (presque : voir note plus bas :p ) identiques pour ce qui nous intéresse.

L'avantage est donc de n'avoir aucun travail à effectuer sur les postes : ils utilisent toujours les dépots classiques, comme par exemple “ftp.fr.debian.org” mais sont redirigés silencieusement vers le dépôt local, d'où des gains énormes en bande passante et en simplicité.

  • gains en bande passante internet : tout le traffic concernant l'installation/mise a jour ne passe plus par le lien internet mais reste local (seule la mise a jour du depot local de référence va utiliser cette bande passante)
  • gain en mobilité : les ordinateurs portables n'ont pas besoin de changement de configuration lorsqu'ils sont sur le reseau ou lorsque les collaborateurs l'emportent chez eux

Présentation

Nous allons nous baser sur :

  • un proxy web (squid) configuré en mode transparent (peut etre un jour un article la dessus)
  • une réécriture d'URL au sein de ce proxy via jesred
  • tout ce petit monde sera installé comme à l'accoutumée sur une Debian Stable (lenny a l'heure actuellewheezy pour la mise a jour de cet article)

Installation

Cette etape est simple : il suffit d'installer jesred , le module qui nous servira a réécrire les URL au niveau du proxy squid.

apt-get install jesred

Configuration

configuration de squid

Pour activer la réécriture d'URL il faut ajouter des directives dans le fichier de conf de squid ( /etc/squid/squid.conf) :

cat << EOF >> /etc/squid3/squid.conf
# redirection transparente pour apt-cacher debian et ubuntu
redirect_program /usr/lib/squid/jesred
EOF

configuration de jesred

  • On active les logs de reecriture d'URL pour débugguer plus facilement :
    sed -i -e "s,# rewrite_log =,rewrite_log =," /etc/jesred.conf
  • Si vous êtes sous debian wheezy avec squid3 au lieu de squid, adapter les chemins de log :
    sed -i -e "s,/var/log/squid/,/var/log/squid3/," /etc/jesred.conf
  • On ajoute son sous réseau IP dans les ACL de réécriture (adapter a votre réseau : format X.Y.Z.T/masque classique) :
    echo "192.168.0.0/24" >> /etc/jesred.acl
il est possible d'exclure des machines/subnets en utilisant la syntaxe !192.168.0.42/32 par exemple
C'est par exemple une très bonne idée d'exclure le serveur hébergeant le miroir local pour qu'il puisse se mettre à jour sur le dépot externe

Regles de réécriture

On peut maintenant écrire les règles de réécritures désirées (sous forme de regexp), cela se passe dans le fichier /etc/jesred/jesred.rules.

  • Par exemple si comme moi vous avez un miroir local debian partiel :
    # redirection transparente sur le miroir local
    # pour ne PAS rediriger les sources en local (nos miroirs n'ont pas les sources)
    regex ^http://ftp\.[a-z][a-z].debian.org/debian/(dists|pool)/.*/source/(Release|Sources|Sources\.(bz2|gz|diff/.*))$
    regex ^http://ftp\.[a-z][a-z].debian.org/debian/dists/.*/installer-.*/.*$
    # le reste est en local
    regex ^http://ftp\.[a-z][a-z].debian.org/debian/((dists|pool)/.*(udeb|deb|bz2|Packages|Packages.gz|Release|Release.gpg))$ http://debian-mirror.mondomaine.com/debian/\1

    Si vous avez de l'espace disque et que vous avez un miroir complet (incluant les sources), il suffit de retirer les deux premières regexp qui empêchent la réécriture des adresses des paquets source : tout sera alors redirigé vers le miroir local.

  • Le meme principe peu bien sûr etre utilisé pour ldes dépots de securité, archive, backports, … comme le montrent les exemples suivants :
    # on ne redirige pas les sources en local
    regex ^http://security.debian.org/(dists|pool)/.*/source/(Release|Sources|Sources\.(bz2|gz|diff/.*))$
    # mais le reste si
    regex ^http://(security.debian.org/((dists|pool)/.*(deb|bz2|gz|Packages|Packages.gz|Release|Release.gpg|)))$ http://debian-mirror.mondomaine.com/debian-security/\1
    # idem pour les backports
    regex ^http://www.backports.org/debian/(dists|pool)/.*/source/(Release|Sources|Sources\.(bz2|gz|diff/.*))$
    regex ^http://www.backports.org/debian/((dists|pool)/.*(deb|bz2|Contents-.*gz|Packages|Packages.gz|Release|Release.gpg))$ http://debian-mirror.mondomaine.com/debian-backports/\1
  • Le même principe fonctionnerait bien sûr sur un dépot ubuntu en adaptant les URLs, cependant je n'utilise pas un dépot ubuntu complet (moins de postes, et donc moins de besoinse en terme d'installations/MAJs, …) mais un dépot “partiel” utilisant apt-cacher , voici les lignes utilisées pour rediriger toute demande vers l'apt-cacher local (dont l'IP doit bien sur aussi être exclue des ACL de réécriture) pour les principaux dépots utilisés :
    # depots Ubuntu - redirection vers l'apt-cacher ubuntu
    regex ^http://([a-z][a-z]\.archive.ubuntu.com/ubuntu/(dists|pool)/.*(deb|bz2|gz|Release|Release.gpg))$ http://ubuntu-mirror.mondomaine.com:3142/\1
    regex ^http://(security.ubuntu.com/ubuntu/(dists|pool)/.*(deb|bz2|gz|Release|Release.gpg))$ http://ubuntu-mirror.mondomaine.com:3142/\1
    regex ^http://((.*)packages.medibuntu.org/(dists|pool)/.*(deb|bz2|gz|Release|Release.gpg))$ http://ubuntu-mirror.mondomaine.com:3142/\1
    regex ^http://(ppa.launchpad.net/.*/(dists|pool)/.*(deb|bz2|gz|Release|Release.gpg))$ http://ubuntu-mirror.mondomaine.com:3142/\1
    regex ^http://(old-releases.ubuntu.com/ubuntu/(dists|pool)/.*(deb|bz2|gz|Release|Release.gpg))$ http://ubuntu-mirror.mondomaine.com:3142/\1
    regex ^http://(archive.canonical.com/(dists|pool)/.*(deb|bz2|gz|Release|Release.gpg))$ http://ubuntu-mirror.mondomaine.com:3142/\1

    c'est le logiciel apt-cacher qui se charge de distribuer le paquet directement s'il l'a en cache ou qui le récupère avant de le distribuer s'il ne l'a pas en cache. Un jour peut être, un article sur l'installation de ce logiciel apt-cacher ;-) .

  • contrib : il semblerait que pour pouvoir continuer à utiliser l'upgrade-manager Ubuntu il faille les lignes suivantes dans le fichier jesred.rules :
    # I have also added two aborts in order to use upgrade-manager:
    abort .gpg
    abort ReleaseAnnouncement
    abort Index
L'utilisateur averti aura remarqué une légère différence de conmportement entre l'utilisation d'un miroir local complet ou d'un apt-cacher-ng par exemple : notre miroir debian est composé de :
  • http://debian-mirror.mondomaine.com/debian/ pour la copie du miroir classique
  • http://debian-mirror.mondomaine.com/debian-backports/ pour la copie du miroir de backports
  • http://debian-mirror.mondomaine.com/debian-security/ pour la copie du miroir debian-security

en conséquence en ce qui concerne la redirection pour un fichier disons http://ftp.fr.debian.org/debian/dists/wheezy/Release il faut que la redirection s'effectue sur :

  • dans le cas d'un miroir local : http://debian-mirror.mondomaine.com/debian/dists/wheezy/Release
  • dans le cas d'un apt-cacher-ng : http://debian-mirror.mondomaine.com:3142/ftp.fr.debian.org/debian/dists/wheezy/Release

d'ou les différences de parenthésage dans les règles pour faire le match sur l'url complete/partielle et le port : les miroirs partiels ont besoin d'une url complète

Vérification du fonctionnement

Pour prendre en compte ces modifications il faut bien sur faire recharger a squid sa configuration :

/etc/init.d/squid3 reload

Le bon fonctionnement peut etre vérifié en regardant dans le fichier de log /var/log/squid3/jesred-rewrite.log lorsque vous tentez d'installer un paquet, comme par exemple :

1282816088.239 192.168.0.65/- http://ftp.fr.debian.org/debian/pool/main/j/jesred/jesred_1.2pl1-16_amd64.deb http://debian-mirror.mondomaine.com/debian/pool/main/j/jesred/jesred_1.2pl1-16_amd64.deb 9
1282816088.254 192.168.0.65/- http://security.debian.org/pool/updates/main/s/squid/squid-common_2.7.STABLE3-4.1lenny1_all.deb http://debian-mirror.mondomaine.com/debian-security/pool/updates/main/s/squid/squid-common_2.7.STABLE3-4.1lenny1_all.deb 11

Aller un peu plus loin : IPv6

En installant la version “1.2pl1-19” de jesred disponible sur la debian testing/unstable à l'heure ou j'écris ces lignes : https://packages.debian.org/search?keywords=jesred il est maintenant possible de réécrire les URLs pour des clients utilisant de l'IPv6 (pas en proxy transparent cependant ;-) ) : voici à quoi ressemble un fichier /etc/jesred.acl comportant des IPv4 et des IPv6 :

192.168.0.0/24
192.168.1.0/24
192.168.2.0/24

# merci le backport de la version wheezy 1.2pl1-19 pour le support d'ipv6 =)
2a01:e32:833f:e2a:2::/112
2a01:e32:833f:e2a:3::/112
2a01:e32:833f:e2a:4::/112
sysadmin/mirror_redirect_squid.txt · Dernière modification: 2014/10/28 18:33 par james
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0