Actualitzant Debian en una xarxa local amb múltiples màquines

  • warning: tempnam(): open_basedir restriction in effect. File() is not within the allowed path(s): (/srv/www/gilug.org/www/site.tree/) in /srv/www/gilug.org/www/site.tree/public/includes/file.inc on line 802.
  • warning: fopen(): Filename cannot be empty in /srv/www/gilug.org/www/site.tree/public/includes/file.inc on line 803.
  • El fitxer no s'ha pogut crear.

En xarxes locals en les que hi ha vàries màquines que tenen el Sistema Operatiu Debian instal·lat, tant les llistes de paquets com els paquets s'actualitzen diàriament amb les noves versions. Podem estalviar molt d'ample de banda de la nostre connexió a Internet si posem una aplicació que faci de memòria cau d'aquests fitxers. Ara mirarem l'apt-proxy i buscarem diferents opcions de configuració i gestió.

Finalitat

Ens trobem en un escenari en el que hi ha una xarxa local amb vàries màquines Debian GNU/Linux connectades amb un servidor que fa d'enrutador (gateway) cap a Internet. El servidor farà de memòria cau per tal d'estalviar ample de banda i donar velocitat a les descàrregues d'Internet. Per el proxy posarem Squid v2.6, i per la memòria cau de paquets apt-proxy v2. També, com a complement de l'squid, farem un programa redirector escrit en Python.

Començar

Instal.larem en el servidor el paquet apt-proxy i l'squid:

apt-get install apt-proxy squid

Configurarem el apt-proxy editant el fitxer:/etc/apt-proxy/apt-proxy-v2.conf

Les opcions de configuració per defecte solen ser correctes, a més ha de connectar a les adreces de la tarja de la xarxa local i al localhost, hem de triar una ubicació per la memòria cau en una partició que ens quedi molt d'espai lliure, posem l'squid com http_proxyperquè faci la connexió a Internet, i si ens sembla, opcionalment, podem canviar el port tcp/IP:

;; Server IP to listen on
address = 192.168.xx.1 127.0.0.1
;; Server port to listen on
port = 9999
;; Cache directory for apt-proxy
cache_dir = /var/cache/apt-proxy
;; Use HTTP proxy?
http_proxy = localhost:3128

en el mateix fitxer també hem de definir quins repositoris farem servir:

;; Backend servers
[debian]
    backends = http://ftp.fr.debian.org/debian
               http://ftp.de.debian.org/pub/debian
[security]
    backends = http://security.debian.org
[debian-multimedia]
    backends = http://www.debian-multimedia.org

Editem el fitxer /etc/squid/squid.conf

# Squid normally listens to port 3128
# http_port 3128
http_port 192.168.xx.1:3128
http_port 127.0.0.1:3128

Les opcions de configuració per defecte solen ser correctes, a més ha de connectar a les adreces de la tarja de la xarxa local i al localhost.

En en aquest punt tenim configurat el apt-proxy i l'squid, tot seguit veurem diferents opcions de configuració, tant dels clients com del servidor:

Configurar el servidor

Per aquest canviem el fitxer /etc/apt/sources.list i farem que tots els repositoris apuntin a l'apt-proxy.

# updates for "stable
deb http://127.0.0.1:9999/security/ stable/updates main contrib non-free
deb-src http://127.0.0.1:9999/security/ stable/updates main contrib non-free
# Stable
deb http://127.0.0.1:9999/debian/ stable main contrib non-free
deb-src http://127.0.0.1:9999/debian/ stable main contrib non-free
# Testing
deb http://127.0.0.1:9999/security/ testing/updates main contrib non-free
deb-src http://127.0.0.1:9999/security/ testing/updates main contrib non-free
deb http://127.0.0.1:9999/debian/ testing main contrib non-free
deb-src http://127.0.0.1:9999/debian/ testing main contrib non-free
# Unstable
deb http://127.0.0.1:9999/debian/ unstable main contrib non-free
deb-src http://127.0.0.1:9999/debian/ unstable main contrib non-free
# multimedia
deb http://127.0.0.1:9999/debian-multimedia/ stable main
deb http://127.0.0.1:9999/debian-multimedia/ testing main
deb http://127.0.0.1:9999/debian-multimedia/ unstable main
deb-src http://127.0.0.1:9999/debian-multimedia/ unstable main

Observem que el camí de la URL /debian/ es correspon a la expressio entre parentesi [debian] de /etc/apt-proxy/apt-proxy-v2.conf

Guardeu la configuració i sortiu.

Opcions de configuració dels Clients

Tenim vàries opcions de configuració,

  • modificar el sources.list del client perquè apunti al servidor,
  • que l'apt amb un sources.list estàndard faci servir el proxy i sigui aquest el que redirigeixi les peticions,
  • no canviem el client i en el servidor fem que l'squid en mode transparent intercepti la petició i la redirigeixi

1- Modificar el sources.list del client

En el client editarem el fitxer /etc/apt/sources.list i farem que tots els repositoris apuntin a l'apt-proxy.

# Squid normally listens to port # updates for "stable
deb http://servidor:9999/security/ stable/updates main contrib non-free
deb-src http://servidor:9999/security/ stable/updates main contrib non-free
# Stable
deb http://servidor:9999/debian/ stable main contrib non-free
deb-src http://servidor:9999/debian/ stable main contrib non-free
# Testing
deb http://servidor:9999/security/ testing/updates main contrib non-free
deb-src http://servidor:9999/security/ testing/updates main contrib non-free
deb http://servidor:9999/debian/ testing main contrib non-free
deb-src http://servidor:9999/debian/ testing main contrib non-free
# Unstable
deb http://servidor:9999/debian/ unstable main contrib non-free
deb-src http://servidor:9999/debian/ unstable main contrib non-free
# multimedia
deb http://servidor:9999/debian-multimedia/ stable main
deb http://servidor:9999/debian-multimedia/ testing main
deb http://servidor:9999/debian-multimedia/ unstable main
deb-src http://servidor:9999/debian-multimedia/ unstable main

Guardeu la configuració i sortiu. En aquest cas la configuració és senzilla.

2- No modificar el sources.list del client

No modifiquem el sources.list del client, però afegir el proxy a l'apt.conf del client, i preparem l'squid que fa de redirector

Per exemple, en el client tenim un /etc/apt/sources.list com aquest

En el client editem el fitxer /etc/apt/apt.conf afegint:

Acquire::http::Proxy "http://servidor:3128";

En el servidor hem de fer un programa redirector.

Creem el fitxer /etc/apt-proxy/redirector.py

I creem un altre fitxer /etc/apt-proxy/redirector_class.py

aquest és un programa fet a mida per tal d'aconseguir la màxima velocitat en la conversió d'adreces, aprofita una característica comú en tots els repositoris Debian, que les URLS on es troben els paquets son de la forma:

“http://*/debian/dists/*"“http://*/debian/pool/*"

Podem comprovar aquesta afirmació amb la llista oficial de repositoris Debian worldwide mirror sites.

En comptes d'aquest programa podriem fer servir el jesred, la llista de servidors seria com:

regex ^http://((.*)/debian/(dists|pool)/.*)$    http://localhost:9999/\1
regex ^http://www.debian-multimedia.org/((.*).*)$    http://localhost:9999/debian-multimedia/\1
regex ^http://security.debian.org/((.*).*)$    http://localhost:9999/security/\1

Editem el fitxer /etc/squid/squid.conf per tal de que faci servir el nostre programa redirector, afegim les línies:

url_rewrite_program /etc/apt-proxy/redirector.py
url_rewrite_children 50

Després reiniciem squid:

/etc/init.d/squid restart

I la xarxa ja és a punt per descarregar amb la memòria cau.

3- No modificar el client, en el servidor l'squid fa de redirector i de proxy HTTP transparent

A més de crear els programes redirectors que hem definit en el punt anterior, l'squid ha de configurar-se com a proxy transparent i rebre el tràfec http que vingui de la xarxa local.

Editem el fitxer /etc/squid/squid.conf

# Squid normally listens to port 3128
http_port 192.168.xx.1:3128
http_port 127.0.0.1:3128
http_port 192.168.xx.1:3129 transparent
#
url_rewrite_program /etc/apt-proxy/redirector.py
url_rewrite_children 50

Tornem a reiniciar squid:

/etc/init.d/squid restart

El tallafocs ha de desviar el http que vingui de la xarxa local cap a l'squid, podem afegir l'ordre al tallafocs.

iptables -t nat -A PREROUTING -s 192.168.xx.0/24 -d 0/0 -p tcp --dport 80 -j REDIRECT --to-port 3129

és tot a punt per provar-ho!

Observacions

Amb les configuracions anteriors hem fet una memòria cau que ens serveix per els petits fitxers i imatges que hi ha a les pàgines d'Internet, que les emmagatzema squid ; i també emmagatzemem els fitxers dels paquets Debian que poden tenir una dimensió considerable. I a més a més, si fem la tercera opció de configuració aconseguim que el funcionament de la xarxa sigui totalment transparent.

Referències

apt-proxy HomePage. web oficial apt-proxy

Updating multiple machines on low bandwidth. Configuració de l'apt-proxy, amb alguns comentaris curiosos, com un truc per importar els DVD's de la distribució en un apt-proxy

Transparent Cache/Proxy with Squid. Com configurar squid per proxy transparent

HOWTO: Easy Virtual HTTP Servers using SQUID en aquesta URL he trobat el programa redirector per Squid, que he adaptat per la nostra configuració

Manual de apt. manual oficial Debian de apt

Transparent Proxy with Linux and Squid mini-HOWTO. posar squid en mode transparent (per versions anteriors a la 2.6)

Debian worldwide mirror sites. llista dels repositoris de paquets Debian

Ad Zapping With Squid

Pàgina man apt-proxy.conf

Pàgina man squid.conf

Pàgina man apt.conf