Я провел некоторое исследование по ряду решений, и некоторые разработчики Ubuntu придумали конфигурацию прокси (на основе Squid) для 10.04 и более поздних версий. Это называется squid-deb-proxy
. Это только требует, чтобы машина действовала как сервер. Крупные организации обычно используют собственные полные зеркала, но для большинства людей достаточно зеркалирования по требованию.
Почему squid-deb-proxy?
- Нет редактирования файлов на стороне клиента.
- Используйте zeroconf так, чтобы клиенты были "нулевым конфигом"
- Используйте существующее твердое решение для прокси вместо написания нового инструмента.
- Легко настроить для типичного администратора Linux.
Конфигурация сервера
На компьютере, на котором вы хотите действовать как сервер, установите инструмент с:
sudo apt-get install squid-deb-proxy avahi-utils
Теперь запустите сервисные биты:
sudo start squid-deb-proxy
И биты авахи (вам это не нужно, если вы используете версию 12.04+):
sudo start squid-deb-proxy-avahi
Это позволит установить прокси-сервер (который по умолчанию прослушивает порт 8000) и инструменты avahi, необходимые серверу для рекламы себя в сети через zeroconf.
Конфиг клиента
На каждом из компьютеров , на которых вы хотите использовать кеш (клиенты и сам сервер, чтобы он тоже мог использовать кеш), вам необходимо установить инструмент на стороне клиента, который позволит автоматически искать сервер, чтобы они щелкнули здесь :
или через командную строку:
sudo apt-get install squid-deb-proxy-client
Необязательно : Для максимальной эффективности вы должны настроить один компьютер на автоматическую загрузку обновлений, чтобы, когда это требуется другим вашим машинам, он уже находился в кэше. Вы можете сделать это, зайдя в «Система-> Администрирование-> Диспетчер обновлений», затем нажмите кнопку «Настройки ...», на вкладке «Обновление» установите его для автоматической загрузки всех обновлений.
Кэширование сторонних источников
По умолчанию кеш настроен только на кеш официальных репозиториев Ubuntu. Чтобы добавить больше, вам нужно добавить их в список источников по адресу /etc/squid-deb-proxy/mirror-dstdomain.acl
. Здесь вы можете добавить ppa.launchpad.net или другие сервисы, которые вы можете использовать. После внесения изменений в этот файл вы должны запустить его, sudo restart squid-deb-proxy
чтобы изменения вступили в силу.
Ручная настройка
Если по какой-либо причине вы не хотите использовать zeroconf (по сетевым причинам и т. Д.), Вы можете вручную настроить клиент для использования прокси, отредактировав /etc/apt/apt.conf
и добавив следующий раздел (замените 0.0.0.0 на IP-адрес сервера ):
Acquire {
Retries "0";
HTTP { Proxy "http://0.0.0.0:8000"; };
};
Брандмауэр
В случае, если вы используете брандмауэр, avahi использует 5353 по адресам 224.0.0.0/4 и требует правила, которое выглядит следующим образом:
# Specifically port 5353 which avahi uses
-A INPUT -i eth2 -d 224.0.0.0/4 --dport 5353 -j ACCEPT
# OR
# Wide open so all local broadcasting works
-A INPUT -i eth2 -d 224.0.0.0/4 -j ACCEPT
Далее вам нужно открыть TCP-порт 8000 для фактической связи через прокси. Что-то более или менее подобное:
-A INPUT -i eth2 -p tcp -m tcp --dport 8000 -d 192.168.0.1 -s 192.168.0.0/24 --syn -j ACCEPT
Эти правила только для того, чтобы помочь вам. Они, вероятно, не будут соответствовать вашим настройкам один к одному. (т.е. неправильный интерфейс, неправильные IP-адреса частной сети и т. д.)
Подтверждая это работает
Сначала подключите журнал на сервере, чтобы вы могли на него посмотреть: tail -F /var/log/squid-deb-proxy/access.log
а затем запустите обновление на любом компьютере, на котором установлен клиент; журнал должен начать прокручиваться с такими записями:
1307310795.647 32 192.168.1.106 TCP_MISS/302 768 GET http://us.archive.ubuntu.com/ubuntu/dists/natty-proposed/universe/i18n/Translation-en.xz - DIRECT/141.210.26.10 text/html
1307310795.683 34 192.168.1.106 TCP_MISS/302 752 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/main/i18n/Translation-en_US.lzma - DIRECT/141.210.26.10 text/html
1307310795.716 32 192.168.1.106 TCP_MISS/302 746 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/main/i18n/Translation-en.lzma - DIRECT/141.210.26.10 text/html
1307310795.750 32 192.168.1.106 TCP_MISS/302 764 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/multiverse/i18n/Translation-en_US.lzma - DIRECT/141.210.26.10 text/html
1307310795.784 32 192.168.1.106 TCP_MISS/302 758 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/multiverse/i18n/Translation-en.lzma - DIRECT/141.210.26.10 text/html
1307310795.817 32 192.168.1.106 TCP_MISS/404 657 GET http://us.archive.ubuntu.com/dists/natty-proposed/multiverse/i18n/Translation-en_US.xz - DIRECT/141.210.26.10 text/html
Это означает, что клиенты видят кеш, но пропускают его, что ожидается, поскольку он еще ничего не кешировал. Каждый последующий запуск должен отображаться как TCP_HIT. Вы можете найти сами файлы кеша squid в /var/cache/squid-deb-proxy
.
Используй это
С этого момента все машины в вашей сети будут проверять кэш, прежде чем отправлять пакеты во внешнюю сеть. Если будут доступны новые пакеты, то первая машина загрузит их из сети, после чего последующие запросы на этот пакет будут поступать с сервера на клиенты.
СДЕЛАТЬ
Нам по-прежнему нужно разрешить apt просто использовать объявленный кеш в сети из коробки и по умолчанию, чтобы вам не нужно было устанавливать клиентскую часть. Нам также нужно исправить ошибку, из-за которой у 403-го deb нет в списке зеркал.