Перейти к содержимому

Удалённые блоклисты

Группа может брать записи не из конфига, а из удалённого hosts-списка. Список скачивается один раз, кешируется и дальше используется из кеша.

Terminal window
hostsctl source add \
https://raw.githubusercontent.com/StevenBlack/hosts/master/data/StevenBlack/hosts \
--group ads --rewrite-ip 0.0.0.0 --allow analytics.google.com --update

В конфиге это выглядит так:

- name: ads
enabled: true
source:
url: https://raw.githubusercontent.com/StevenBlack/hosts/master/data/StevenBlack/hosts
rewrite_ip: 0.0.0.0
allow: [analytics.google.com]

--rewrite-ip заменяет адрес у всех записей списка. Большинство блоклистов приходят с 0.0.0.0, некоторые с 127.0.0.1; 0.0.0.0 обычно лучше — соединение с ним падает сразу, а не упирается в то, что слушает на localhost.

--allow — список исключений: имена, которые выбрасываются из скачанного списка. Для нескольких имён повтори флаг.

--file кладёт группу в файл-зону. Зона обязана быть .yaml — обычный hosts-синтаксис source выразить не умеет.

Terminal window
hostsctl source update # все источники
hostsctl source update ads # один
hostsctl source update ads --force # игнорировать кешированный ETag
hostsctl source update --apply # скачать и сразу перерисовать /etc/hosts

Обновление условное: hostsctl хранит ETag рядом с кешем и отправляет If-None-Match, поэтому неизменившийся список стоит один 304 и ноль скачанных байт.

Списки кешируются в ~/.cache/hostsctl/sources/ (или $XDG_CACHE_HOME/hostsctl, или $HOSTSCTL_CACHE).

apply читает только кеш. Это осознанное ограничение: применение конфига должно давать один и тот же файл независимо от того, есть ли сейчас интернет, и не должно зависать из-за медленного хоста с блоклистом. Если у удалённой группы кеша ещё нет, apply пропускает её и предупреждает, называя команду, которая кеш наполнит.

При разборе скачанного списка hostsctl выбрасывает комментарии, localhost, localhost.localdomain, broadcasthost, local и повторяющиеся имена, затем применяет allow и rewrite_ip. Фильтрация происходит и при скачивании, и при рендере, поэтому правка allow в конфиге работает без повторной загрузки.

Terminal window
hostsctl source list
hostsctl search doubleclick # ищет и в кеше, не только в конфиге

source list показывает URL каждого источника, адрес подстановки и список исключений, а также состояние кеша — сколько записей и когда скачано. Ещё он предупредит, если кеш был скачан с другого URL, чем сейчас указан в конфиге.

Terminal window
hostsctl source rm ads # удалит группу и кеш; -y пропускает вопрос

Чтобы сохранить список, но перестать им пользоваться, выключи группу:

Terminal window
hostsctl group disable ads --apply