apt-cacher-ng — кэширующий HTTP-прокси для пакетных менеджеров семейства Debian. Он встаёт между машинами и зеркалом репозитория: первый клиент скачивает пакет и оставляет его в локальном хранилище, а следующие получают тот же файл из сети без обращения к интернету. В квартире с тремя компьютерами это экономит гигабайты, в офисе — ещё и время обновлений. Ниже установка, конфигурация, подключение клиентов и честный разбор ограничений.
Как работает кэш
APT умеет ходить через обычный HTTP-прокси, и apt-cacher-ng пользуется этим без изменения клиента. Запрос на http://deb.debian.org/debian/... приходит на порт 3142, прокси ищет файл по URL в своём каталоге и либо отдаёт готовую копию, либо загружает её с зеркала. Ключом служит адрес и имя файла, поэтому разные версии пакетов хранятся раздельно.
- Первый запрос — промах, файл скачивается и сохраняется.
- Повторный запрос с любой машины — попадание, трафик не расходуется.
- Метаданные
PackagesиReleaseтоже кэшируются, но обновляются по своим правилам. - Файлы с одинаковым содержимым и разными именами могут храниться дважды.
- HTTPS-запросы проходят туннелем и не кэшируются — это важное ограничение.
Для дома достаточно сервера с диском на 20–50 ГБ. Кэш можно удалить в любой момент: пакеты всегда доступны на зеркале.
Установка и запуск
Пакет есть в Debian, Ubuntu и производных. После установки служба запускается сама, но включать автозапуск лучше явно. Проверьте, что порт слушается и в журнале нет ошибок прав доступа.
sudo apt install apt-cacher-ng
sudo systemctl enable --now apt-cacher-ng
systemctl status apt-cacher-ng --no-pager
sudo ss -ltnp | grep 3142
По умолчанию каталог кэша — /var/cache/apt-cacher-ng, журналы лежат в /var/log/apt-cacher-ng. Убедитесь, что на разделе с кэшем достаточно места: при активном обновлении нескольких дистрибутивов объём растёт быстро.
Настройка сервера
Основной файл — /etc/apt-cacher-ng/acng.conf. Параметры читаются построчно, регистр в именах директив важен. Минимальная конфигурация для домашней сети выглядит так:
Port: 3142
BindAddress: 0.0.0.0
CacheDir: /var/cache/apt-cacher-ng
LogDir: /var/log/apt-cacher-ng
AdminAuth: admin:changeme
ExThreshold: 30
BindAddress ограничивает интерфейс прослушивания: если сервер имеет выход в интернет, лучше указать адрес локальной сети, а не все интерфейсы. AdminAuth закрывает веб-отчёт паролем, но передаётся он без шифрования, поэтому страницу дополнительно ограничивают файрволом. ExThreshold задаёт порог устаревания в днях, после которого файлы становятся кандидатами на удаление.
После правки конфигурации службу перезапускают. Синтаксис проверяется при старте: если процесс не поднялся, смотрите journalctl -u apt-cacher-ng.
sudo systemctl restart apt-cacher-ng
sudo journalctl -u apt-cacher-ng -n 30 --no-pager
Подключение клиентов
На каждой машине достаточно одного файла в /etc/apt/apt.conf.d/. Имя начинается с цифр, чтобы настройка применялась раньше остальных. Локальные адреса исключают из прокси, иначе запросы к самому серверу могут зациклиться.
Acquire::http::Proxy "http://192.168.1.10:3142";
Acquire::http::Proxy::localhost "DIRECT";
Acquire::https::Proxy "DIRECT";
Файл удобно создать одной командой и сразу проверить результат. Не редактируйте /etc/apt/apt.conf напрямую: при обновлении пакетов его проще потерять.
echo 'Acquire::http::Proxy "http://192.168.1.10:3142";' | sudo tee /etc/apt/apt.conf.d/01proxy
apt-config dump | grep -i proxy
Клиенты должны видеть сервер по сети и не иметь собственного прокси, который перехватит запрос. Если машина получает настройки по DHCP, прокси для APT всё равно задаётся отдельно: это не системный прокси браузера.
Проверка попаданий
Сначала убедитесь, что прокси отвечает на прямой запрос. Затем выполните обновление индексов и установите пакет, который уже есть в кэше: в журнале появится запись о попадании. Заголовок X-Cache в ответе тоже показывает результат.
curl -sI -x http://192.168.1.10:3142 http://deb.debian.org/debian/dists/stable/Release
sudo apt update
sudo tail -n 50 /var/log/apt-cacher-ng/apt-cacher.log
sudo du -sh /var/cache/apt-cacher-ng
В журнале видны URL, код ответа и размер, а счётчики попаданий и промахов удобнее смотреть в веб-отчёте. Если попаданий нет, клиенты ходят мимо или репозиторий использует HTTPS. Веб-отчёт на http://192.168.1.10:3142/acng-report.html показывает суммарный объём и распределение по хостам, но требует введённых учётных данных.
Обслуживание и очистка
Кэш не требует сложного ухода: достаточно следить за свободным местом и периодически удалять устаревшие файлы. Порог ExThreshold делает это автоматически, а веб-интерфейс позволяет запустить очистку вручную.
sudo du -h --max-depth=1 /var/cache/apt-cacher-ng | sort -h
sudo systemctl status apt-cacher-ng --no-pager
sudo journalctl -u apt-cacher-ng --since "24 hours ago" --no-pager
Если диск заполнен, удалите каталог кэша целиком и создайте его заново с правами пользователя apt-cacher-ng. Резервная копия кэша бессмысленна: его содержимое восстановится из репозиториев.
Ограничения и безопасность
Главное ограничение — HTTPS. APT открывает к прокси туннель CONNECT, внутри которого трафик шифрован, поэтому кэшировать его нельзя. Многие современные зеркала и корпоративные репозитории работают по HTTPS, и для них прокси работает как обычный переходник без экономии. Проверьте схему в /etc/apt/sources.list и файлах sources.list.d: записи с http:// кэшируются, с https:// — нет.
Второй момент — доступ. Прокси не аутентифицирует клиентов, поэтому открытый порт 3142 в интернете превращает сервер в открытый релей. Ограничьте его локальной подсетью через файрвол и не публикуйте наружу. Если сервер одновременно является клиентом, исключите localhost из прокси, чтобы не создавать петлю.
Диагностика
Если apt update зависает, проверьте, слушается ли порт и проходит ли прямой запрос через прокси. Ошибка 403 обычно означает запрет в конфигурации или блокировку по шаблону, 502 — недоступность зеркала. Клиент, который не видит прокси, чаще всего имеет другой файл настроек с более высоким приоритетом.
sudo ss -ltnp | grep 3142
curl -v -x http://192.168.1.10:3142 http://deb.debian.org/debian/dists/stable/Release -o /dev/null
sudo grep -iE "error|warn" /var/log/apt-cacher-ng/apt-cacher.log | tail -n 20
Для проверки конкретного пакета запросите его URL через прокси дважды: первый ответ будет загружен с зеркала, второй — отдан из кэша. Разница по времени и заголовкам покажет, работает ли схема.
Чек-лист
- Служба включена в автозапуск и слушает только локальный интерфейс.
- Клиенты настроены через отдельный файл
apt.conf.d. - В журнале есть попадания, а не только промахи.
- На разделе кэша достаточно свободного места.
- Порт 3142 закрыт файрволом от внешней сети.
- Источники по HTTPS учтены в ожиданиях по экономии.
Итог
apt-cacher-ng — простой и предсказуемый способ сократить трафик при обновлении нескольких Debian-систем. Он не требует агентов на клиентах, переживает перезагрузки и легко обслуживается. Главное — заранее принять, что кэшируются только HTTP-источники, а сам прокси должен быть доступен исключительно доверенной сети. Для дома и небольшого офиса этого более чем достаточно.