<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>https://wiki.golem.linux.it/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Roberto</id>
	<title>GolemWiki - Contributi utente [it]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.golem.linux.it/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Roberto"/>
	<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/Speciale:Contributi/Roberto"/>
	<updated>2026-06-09T13:47:35Z</updated>
	<subtitle>Contributi utente</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://wiki.golem.linux.it/index.php?title=Apt-cacher&amp;diff=5892</id>
		<title>Apt-cacher</title>
		<link rel="alternate" type="text/html" href="https://wiki.golem.linux.it/index.php?title=Apt-cacher&amp;diff=5892"/>
		<updated>2012-11-14T00:20:46Z</updated>

		<summary type="html">&lt;p&gt;Roberto: /* dhcpd */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cos'è APT-Cacher? =&lt;br /&gt;
&lt;br /&gt;
Quanto ci si trova a gestire (aggiornare/installare) numerosi computer che utilizzano con la stessa distribuzione può essere conveniente configurare una macchina che funga da cache dei repository all'interno della nostra rete locale. In questo modo il pacchetto che si desidera installare viene scaricato dalla rete esterna solo la prima volta, le richieste successive saranno soddisfatte dal server di cache della nostra LAN.&lt;br /&gt;
&lt;br /&gt;
Il programma che riesce ad eseguire tale compito è: '''apt-cacher-ng'''.&lt;br /&gt;
&lt;br /&gt;
È presente nei repositori ufficiali di Debian, Ubuntu ed in [https://aur.archlinux.org/packages/apt-cacher-ng/ AUR] per gli utenti Arch Linux.&lt;br /&gt;
&lt;br /&gt;
NB: apt-cacher-ng può essere installato su qualsiasi computer della LAN. Nel caso in cui però sia installato sul gateway della rete si può scegliere di affiancargli un [[#Transparent_Proxy|transparent proxy]] così da permettere alla cache di funzionare senza bisogno effettuare modifiche sul lato client.&lt;br /&gt;
&lt;br /&gt;
= Installazione =&lt;br /&gt;
&lt;br /&gt;
* Debian e Ubuntu&lt;br /&gt;
 $ sudo apt-get install apt-cacher-ng&lt;br /&gt;
&lt;br /&gt;
* Arch Linux&lt;br /&gt;
 # yaout -S apt-cacher-ng&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configurazione lato server =&lt;br /&gt;
&lt;br /&gt;
Su Debian ed Ubuntu non appena terminata l'installazione dell'apt-cacher-ng il demone risulta già configurato ed attivo.&lt;br /&gt;
&lt;br /&gt;
* Su Arch Linux la prima volta che vogliamo abilitare il servizio dovremo eseguire i seguenti comandi:&lt;br /&gt;
&lt;br /&gt;
 # systemctl enable apt-cacher-ng.service&lt;br /&gt;
 # systemctl start apt-cacher-ng.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Configurazione lato client =&lt;br /&gt;
&lt;br /&gt;
* Debian/Ubuntu&lt;br /&gt;
Editare il file /etc/apt/apt.conf.d/02proxy aggiungendo la seguente linea:&lt;br /&gt;
 Acquire::http { Proxy &amp;quot;http://your-apt-cacher-ng-server:3142&amp;quot;; };&lt;br /&gt;
&lt;br /&gt;
* Arch Linux&lt;br /&gt;
Editare il file ''/etc/pacman.d/mirrorlist'' aggiungendo l'indirizzo del proxy a quello del mirror che solitamente è usato per scaricare i pacchetti, es.:&lt;br /&gt;
&lt;br /&gt;
 Server = http://mi.mirror.garr.it/mirrors/archlinux/$repo/os/$arch&lt;br /&gt;
&lt;br /&gt;
Diventerà&lt;br /&gt;
&lt;br /&gt;
 Server = http://127.0.0.1:3142/mi.mirror.garr.it/mirrors/archlinux/$repo/os/$arch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Transparent Proxy =&lt;br /&gt;
&lt;br /&gt;
Affinché un proxy possa essere utilizzato in maniera trasparente (senza dover configurare niente) dai client della LAN è necessario che il traffico che si vuole cachare passi fisicamente dalla macchina in cui è in ascolto il proxy (es. il gateway).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configurazione ==&lt;br /&gt;
&lt;br /&gt;
Per realizzare il transparent proxy si consiglia di procurarsi un computer munito di 2 schede ethernet, una per il collegamento alla rete esterna (Internet) mediante un router e l'altra per condividere la connessione con la rete interna (LAN).&lt;br /&gt;
Sarà necessario installare i seguenti programmi: dhcp server (es.: isc-dhcp-server, udhcpd...), squid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Schede di rete ===&lt;br /&gt;
eth0 sarà l'interfaccia con la quale ci collegheremo ad Internet, è configurata per ricevere l'IP dal dhcp del router.&lt;br /&gt;
&lt;br /&gt;
eth1 è l'interfaccia con IP statico (nell'esempio è stato scelto l'indirizzo 192.168.5.1) con la quale condivideremo la connessione sulla LAN.&lt;br /&gt;
&lt;br /&gt;
* Su Debian/Ubuntu editare il file ''/etc/network/interfaces''&lt;br /&gt;
&lt;br /&gt;
 auto eth0&lt;br /&gt;
 allow-hotplug eth0&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
&lt;br /&gt;
 auto eth1&lt;br /&gt;
 iface eth1 inet static&lt;br /&gt;
 address 192.168.5.1&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Su Arch Linux&lt;br /&gt;
&lt;br /&gt;
 # cp /etc/network.d/examples/ethernet-dhcp /etc/network.d/eth0-dhcp&lt;br /&gt;
&lt;br /&gt;
Creare il file ''/etc/network.d/eth1-static'' ed editarlo come segue:&lt;br /&gt;
 CONNECTION='ethernet'&lt;br /&gt;
 DESCRIPTION='static ethernet connection'&lt;br /&gt;
 INTERFACE='eth1'&lt;br /&gt;
 IP='static'&lt;br /&gt;
 ADDR='192.168.5.1'&lt;br /&gt;
 SKIPNOCARRIER='yes'&lt;br /&gt;
 &lt;br /&gt;
Aggiungere le due nuove configurazioni di rete nel file ''/etc/conf.d/netcfg''&lt;br /&gt;
&lt;br /&gt;
 NETWORKS=(eth1-static @eth0-dhcp)&lt;br /&gt;
&lt;br /&gt;
Controllare che in ''/etc/rc.conf'' sia presente alla voce DAEMONS &lt;br /&gt;
&lt;br /&gt;
 net-profiles&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== dhcpd ===&lt;br /&gt;
Per facilitare la connessione dei client si consiglia di installare un server dhcp che stia in ascolto sull'interfaccia eth1.&lt;br /&gt;
&lt;br /&gt;
* Debian/Ubuntu&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install isc-dhcp-server&lt;br /&gt;
&lt;br /&gt;
* Arch Linux&lt;br /&gt;
&lt;br /&gt;
 # pacman -S dhcp&lt;br /&gt;
 # systemctl enable dhcpd4.service&lt;br /&gt;
&lt;br /&gt;
Editare ''/etc/dhcpd.conf'' aggiungendo la configurazione per la rete interna (eth1); es.:&lt;br /&gt;
&lt;br /&gt;
 subnet 192.168.5.0 netmask 255.255.255.0 {&lt;br /&gt;
 range 192.168.5.100  192.168.5.200;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Squid ===&lt;br /&gt;
Squid è il server proxy, dovrà occuparsi di ridirigere verso apt-cacher-ng tutte le richieste di pacchetti .deb&lt;br /&gt;
&lt;br /&gt;
* Debian/Ubuntu&lt;br /&gt;
 $ sudo apt-get install squid&lt;br /&gt;
&lt;br /&gt;
* Arch Linux&lt;br /&gt;
 # yaourt -S squid&lt;br /&gt;
 # systemctl enable squid.service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Su Debian/Ubuntu editate il file ''/etc/squid.conf'', mentre su Arch Linux ''/etc/squid/squid.conf''. Modificate la riga http_port 3128 aggiungendo ''transparent'' alla fine:&lt;br /&gt;
&lt;br /&gt;
 http_port 3128 transparent&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In oltre devono essere aggiunte le seguenti linee tra quelle che incominciano per ''acl'' e quelle che incominciano con ''http_access''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cache_peer localhost parent 3142 7 proxy-only no-query no-netdb-exchange connect-timeout=15&amp;lt;br&amp;gt;&lt;br /&gt;
acl aptget browser -i apt-get apt-http apt-cacher apt-proxy&amp;lt;br&amp;gt;&lt;br /&gt;
acl deburl urlpath_regex /(Packages|Sources|Release|Translations-.*)\(.(gpg|gz|bz2))?$ /pool/.*/.deb$ /(Sources|Packages).diff/ /dists/[^/]*/[^/]*/(binary-.*|source)/.&amp;lt;br&amp;gt;&lt;br /&gt;
cache_peer_access localhost allow aptget&amp;lt;br&amp;gt;&lt;br /&gt;
cache_peer_access localhost allow deburl&amp;lt;br&amp;gt;&lt;br /&gt;
cache_peer_access localhost deny all&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
=== Jesred ===&lt;br /&gt;
Redirigiamo le richieste dei pacchetti deb da squid verso apt-cacher-ng.&lt;br /&gt;
&lt;br /&gt;
Editare il file /etc/jesred.conf&lt;br /&gt;
&lt;br /&gt;
allow = /etc/jesred.acl&lt;br /&gt;
rules = /etc/jesred.rules&lt;br /&gt;
redirect_log = /var/log/squid/jesred-redirect.log&lt;br /&gt;
rewrite_log = /var/log/squid/jesred-rewrite.log&lt;br /&gt;
&lt;br /&gt;
Il file /etc/jesred.rules&lt;br /&gt;
&lt;br /&gt;
 regex ^http://((.*)/debian/(dists|pool)/.*)$ http://127.0.0.1:3142/\1&lt;br /&gt;
 regex ^http://((.*)/ubuntu/(dists|pool)/.*)$ http://127.0.0.1:3142/\1&lt;br /&gt;
 regex ^http://((.*)/debian//(dists|pool)/.*)$ http://127.0.0.1:3142/\1&lt;br /&gt;
 regex ^http://((.*)/ubuntu//(dists|pool)/.*)$ http://127.0.0.1:3142/\1&lt;br /&gt;
&lt;br /&gt;
 ##upgrade-manager necessita anche queste due regole:&lt;br /&gt;
 abort .gpg&lt;br /&gt;
 abort ReleaseAnnouncement&lt;br /&gt;
&lt;br /&gt;
Decommentare dal file /etc/jesred.acl la linea&lt;br /&gt;
&lt;br /&gt;
# 0.0.0.0/0&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Firewall ===&lt;br /&gt;
&lt;br /&gt;
NB: il firewall di Linux è iptables, normalmente è installato di default in tutte le distribuzioni, se non lo fosse sarà necessario installarlo.&lt;br /&gt;
&lt;br /&gt;
Abilitare il forward dei pacchetti assicurandoci che nel file ''/etc/sysctl.conf'' sia presente questa riga:&lt;br /&gt;
 &lt;br /&gt;
 net.ipv4.ip_forward = 1&lt;br /&gt;
&lt;br /&gt;
A seguire le regole per realizzare uno script per iptables, si consiglia di salvarle in un file (es. /etc/[http://golem.linux.it/files/fw_proxy.sh fw_proxy.sh]).&lt;br /&gt;
&lt;br /&gt;
Di dargli i permessi di esecuzione:&lt;br /&gt;
&lt;br /&gt;
 $ sudo chmod a+x /etc/fw_proxy.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
E di farle caricare in automatico all'avvio aggiungendo al file ''/etc/rc.local'' la riga&lt;br /&gt;
&lt;br /&gt;
 /bin/sh /etc/fw_proxy.sh&lt;br /&gt;
&lt;br /&gt;
in alternativa si può salvarle la configurazione di iptables con gli appositi strumenti della vostra distribuzione, es.:&lt;br /&gt;
&lt;br /&gt;
* Arch Linux&lt;br /&gt;
 # sh /etc/fw_proxy.sh&lt;br /&gt;
 # iptables-save &amp;gt; /etc/iptables/iptables.rules&lt;br /&gt;
 # systemctl enable iptables.service&lt;br /&gt;
&lt;br /&gt;
====Script per il Firewall====&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #  squid server IP&lt;br /&gt;
 SQUID_SERVER=&amp;quot;192.168.5.1&amp;quot;&lt;br /&gt;
 # Interface connected to Internet&lt;br /&gt;
 INTERNET=&amp;quot;eth0&amp;quot;&lt;br /&gt;
 # Interface connected to LAN&lt;br /&gt;
 LAN_IN=&amp;quot;eth1&amp;quot;&lt;br /&gt;
 # Squid port&lt;br /&gt;
 SQUID_PORT=&amp;quot;3128&amp;quot;&lt;br /&gt;
 # DO NOT MODIFY BELOW&lt;br /&gt;
 # Clean old firewall&lt;br /&gt;
 iptables -F&lt;br /&gt;
 iptables -X&lt;br /&gt;
 iptables -t nat -F&lt;br /&gt;
 iptables -t nat -X&lt;br /&gt;
 iptables -t mangle -F&lt;br /&gt;
 iptables -t mangle -X&lt;br /&gt;
 # Load IPTABLES modules for NAT and IP conntrack support&lt;br /&gt;
 modprobe ip_conntrack&lt;br /&gt;
 modprobe ip_conntrack_ftp&lt;br /&gt;
 # For win xp ftp client&lt;br /&gt;
 #modprobe ip_nat_ftp&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
 # Setting default filter policy&lt;br /&gt;
 iptables -P INPUT DROP&lt;br /&gt;
 iptables -P OUTPUT ACCEPT&lt;br /&gt;
 # Unlimited access to loop back&lt;br /&gt;
 iptables -A INPUT -i lo -j ACCEPT&lt;br /&gt;
 iptables -A OUTPUT -o lo -j ACCEPT&lt;br /&gt;
 # Allow UDP, DNS and Passive FTP&lt;br /&gt;
 iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 # set this system as a router for Rest of LAN&lt;br /&gt;
 iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE&lt;br /&gt;
 iptables --append FORWARD --in-interface $LAN_IN -j ACCEPT&lt;br /&gt;
 # unlimited access to LAN&lt;br /&gt;
 iptables -A INPUT -i $LAN_IN -j ACCEPT&lt;br /&gt;
 iptables -A OUTPUT -o $LAN_IN -j ACCEPT&lt;br /&gt;
 # DNAT port 80 request comming from LAN systems to squid 3128 ($SQUID_PORT) aka transparent proxy&lt;br /&gt;
 iptables -t nat -A PREROUTING -i $LAN_IN -p tcp --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT&lt;br /&gt;
 # if it is same system&lt;br /&gt;
 iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT&lt;br /&gt;
 # DROP everything and Log it&lt;br /&gt;
 iptables -A INPUT -j LOG&lt;br /&gt;
 iptables -A INPUT -j DROP&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
	</entry>
</feed>