Оригинальная ссылка:Блокируйте надоедливую рекламу с помощью Envoy и AdGuard Home
Обычно, когда мы пользуемся Интернетом, оператор широкополосного доступа назначает нам DNS-сервер. Этот DNS обычно является самым быстрым и ближайшим сервером, но есть много проблем, таких как:
- Доступ к некоторым веб-сервисам медленный, например к сервису Apple iCloud.
- Меня больше беспокоят вопросы безопасности, и я надеюсь, что вы сможете получить доступ к безопасным веб-сайтам, настроив DNS.
- Устали от перенаправления на заполненный рекламой интерфейс каждый раз, когда вы вводите неправильный URL-адрес.
В настоящее время нам необходимо настроить DNS.Пользовательский DNS может не только ускорить открытие веб-страниц, но и повысить безопасность просмотра веб-страниц. Что еще более важно, если вы использовалиGoogle Chrome
, вы должны знать, что Google ограничит расширение «блокировки рекламы» в будущем.Чтобы решить эту проблему, вы можете только установить глобальный блокировщик рекламного ПО или блокировать рекламу непосредственно с уровня DNS-сервера (если вы не хотите сменить браузер).
AdGuard HomeЭто общесетевое программное обеспечение для блокировки рекламы и предотвращения отслеживания, которое может блокировать доменные имена, связанные с рекламой и отслеживанием, и указывать на пустые хосты (черные дыры DNS). Проще говоря, это публичный DNS-сервис с открытым исходным кодом, разработанный на языке Go, поддерживающий родительский контроль и фильтрацию рекламы! Дело в том, что он также поддерживаетDNS over TLS
иDNS over HTTPS
, который может работать на x86 Linux, Raspberry Pi или черезDocker
Развернуто на Synology NAS.
1. Установка AdGuard Home
Способ установки AdGuard Home зависит от используемой вами платформы, его бинарные файлы находятся по адресуКоманда GitHub.com/AD guard…, вы можете загрузить последнюю версию в соответствии с вашей платформой. Способ установки для MacOS следующий:
# 下载 AdGuard Home
$ wget https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.98.1/AdGuardHome_MacOS.zip
# 解压并进入 AdGuardHome_MacOS 目录
$ unzip AdGuardHome_MacOS.zip && cd AdGuardHome_MacOS
# 将二进制文件拷贝到 $PATH
$ cp ./AdGuardHome /usr/local/bin/
# 创建 Launch Daemon 的 plist 文件并启动服务
$ AdGuardHome -s install
Теперь вы можете увидеть информацию о конфигурации и статусе сервиса:
$ sudo launchctl list AdGuardHome
{
"StandardOutPath" = "/var/log/AdGuardHome.stdout.log";
"LimitLoadToSessionType" = "System";
"StandardErrorPath" = "/var/log/AdGuardHome.stderr.log";
"Label" = "AdGuardHome";
"TimeOut" = 30;
"OnDemand" = false;
"LastExitStatus" = 0;
"PID" = 1464;
"Program" = "/usr/local/bin/AdGuardHome";
"ProgramArguments" = (
"/usr/local/bin/AdGuardHome";
"-s";
"run";
);
};
plist-файл в/Library/LaunchDaemons/
Под содержанием:
$ cat /Library/LaunchDaemons/AdGuardHome.plist
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd" >
<plist version='1.0'>
<dict>
<key>Label</key><string>AdGuardHome</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/AdGuardHome</string>
<string>-s</string>
<string>run</string>
</array>
<key>WorkingDirectory</key><string>/Users/freya/Downloads/Compressed/AdGuardHome_MacOS</string>
<key>SessionCreate</key><false/>
<key>KeepAlive</key><true/>
<key>RunAtLoad</key><true/>
<key>Disabled</key><false/>
<key>StandardOutPath</key>
<string>/var/log/AdGuardHome.stdout.log</string>
<key>StandardErrorPath</key>
<string>/var/log/AdGuardHome.stderr.log</string>
</dict>
</plist>
Учащиеся, не знакомые с Launch Daemon, могут обратиться кЗапустите Daemon/Agent для Mac OS X.
Проверьте номер порта:
$ sudo lsof -iTCP -sTCP:LISTEN -P -n|grep AdGuard
AdGuardHo 9990 root 3u IPv6 0xb76d091ec878f951 0t0 TCP *:3000 (LISTEN)
Откройте браузер и введите URLhttp://127.0.0.1:3000/
Это дает вам доступ к интерфейсу управления AdGuard Home.
Нажмите «Начать настройку», а затем установите порт для веб-интерфейса управления и службы DNS.
Нажмите «Далее», чтобы установить имя пользователя и пароль.
Наконец, нажмите «Далее», и все готово.
На приборной панели мы можем видеть количество DNS-запросов, сайты, заблокированные фильтром, адреса клиентов, запрашивающих DNS-запросы, и многое другое.
Теперь проверьте номер порта, интерфейс управления станет портом, который вы только что установили, и будет дополнительный порт для службы DNS:
$ sudo lsof -iTCP -sTCP:LISTEN -P -n|grep AdGuard
AdGuardHo 10619 root 11u IPv6 0xb76d091eb6671751 0t0 TCP *:53 (LISTEN)
AdGuardHo 10619 root 12u IPv6 0xb76d091ebc3c7751 0t0 TCP *:5300 (LISTEN)
$ sudo lsof -iUDP -P -n|grep AdGuard
AdGuardHo 10619 root 10u IPv6 0xb76d091eb89601c1 0t0 UDP *:53
2. Оптимизация конфигурации
Конфигурация по умолчанию относительно проста, чтобы сильнее блокировать рекламу, мы можем оптимизировать конфигурацию.
Общие настройки
Отметьте [Использовать фильтры и файлы Hosts для блокировки указанных доменов], [Использовать AdGuard для просмотра безопасных веб-сервисов] и [Принудительно использовать безопасный поиск]. Если вы хотите заблокировать сайты для взрослых, вы также можете установить флажок [Использовать службу родительского контроля AdGuard].
фильтр
Хотя сам AdGuard предоставляетAdGuard
,AdAway
Однако в Китае это немного неудобно, если вы хотите добиться более совершенной блокировки рекламы, вам нужно добавить свои собственные правила, AdGuard может быть совместим.Adblock
синтаксис. Самые известные правила фильтрацииEasyListподдерживается командой Adblock Plus, и правила фильтрации частоtxt
файл, дата последнего обновления правила отображается в начале файла.
Рекомендуемые правила фильтрации рекламы:
- EasyList China: главное правило фильтрации отечественной рекламы на сайте.
- EasyPrivacy: EasyPrivacy — это защита конфиденциальности, вас нельзя отслеживать.
- CJX's Annoyance List: фильтрует надоедливую саморекламу и дополняет правила конфиденциальности EasyPrivacy.
- Правила очистки рекламы: фильтрация рекламы для большинства видеосайтов в Китае.
- I don't care about cookies: меня не интересуют файлы cookie, блокировать предупреждения, связанные с файлами cookie, с веб-сайтов.
Если Youku воспроизводит бесконечную загрузку, добавьте правило в пользовательское статическое правило.@@mp4.ts
(См. изображение ниже).
Настройки вышестоящего DNS
Официальное использование по умолчаниюCloudflare
В качестве восходящего сервера DNS поверх HTTPS в Китае может иметь большую задержку при запросе восходящего DNS, и местный DNS может быть добавлен или заменен. Я добавил два набора незагрязняющих DNS от Университета науки и технологий Китая.Каждый раз, когда я запрашиваю, все исходящие DNS будут запрашиваться одновременно, чтобы ускорить разрешение.
журнал запросов
В этом интерфейсе вы можете просмотреть журналы DNS-запросов всех устройств, загрузить весь файл журнала, а также быстро перехватить и освободить доменное имя.
Улучшить число запросов в секунду
Есть два параметра, которые могут значительно улучшить QPS:
-
ratelimit
: Защита от DDoS, количество пакетов в секунду, полученных клиентом. Рекомендуется отключить этот параметр (изменить значение на 0), значение по умолчанию равно 20. -
blocked_response_ttl
: Время кеша TTL, рекомендуется установить его на 60
Путь по умолчанию к файлу конфигурации:/usr/local/bin/AdGuardHome.yaml
3. Используйте Envoy в качестве внешнего прокси
Собственно на этом все и закончилось, но у меня обсессивно-компульсивное расстройство, и я не хочу настраивать интерфейс управления приложением на какой-то странный нестандартный порт. Некоторые люди могут сказать: Тогда почему бы вам не настроить интерфейс управления на порт 80 или 443? Хороший вопрос, потому что на моем компьютере развернуты всякие странные приложения, и есть только один порт 80, которого недостаточно, поэтому я могу рассмотреть только добавление внешнего прокси.
Как фанатик облачных технологий, конечно, выбирайтеEnvoy
Теперь, когда Envoy трудно компилировать, инженеры Tetrate (включая основных участников и сопровождающих Envoy) инициировалиGetEnvoyпроект с целью использования проверенного набора инструментов сборки для сборки Envoy и его распространения через популярные менеджеры пакетов, в том числеHomebrew
. Мы можем установить его напрямую через Homebrew:
$ brew tap tetratelabs/getenvoy
==> Tapping tetratelabs/getenvoy
Cloning into '/usr/local/Homebrew/Library/Taps/tetratelabs/homebrew-getenvoy'...
Tapped 1 formula.
$ brew install envoy
==> Installing envoy from tetratelabs/getenvoy
==> Downloading ...
######################################################################## 100.0%
🍺 /usr/local/Cellar/envoy/1.10.0: 3 files, 27.9MB, built in 13 seconds
$ envoy --version
envoy version: e349fb6139e4b7a59a9a359be0ea45dd61e589c5/1.11.1/clean-getenvoy-930d4a5/RELEASE/BoringSSL
Вот мой файл конфигурации посланника:
static_resources:
listeners:
- address:
# Tells Envoy to listen on 0.0.0.0:80
socket_address:
address: 0.0.0.0
port_value: 80
filter_chains:
# Any requests received on this address are sent through this chain of filters
- filters:
# If the request is HTTP it will pass through this HTTP filter
- name: envoy.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
codec_type: auto
stat_prefix: http
access_log:
name: envoy.file_access_log
typed_config:
"@type": type.googleapis.com/envoy.config.accesslog.v2.FileAccessLog
path: /dev/stdout
route_config:
name: search_route
virtual_hosts:
- name: backend
domains:
- "*"
routes:
- match:
prefix: "/"
route:
cluster: adguard
http_filters:
- name: envoy.router
typed_config: {}
clusters:
- name: adguard
connect_timeout: 1s
type: strict_dns
dns_lookup_family: V4_ONLY
lb_policy: round_robin
load_assignment:
cluster_name: adguard
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 127.0.0.1
port_value: 5300
admin:
access_log_path: "/dev/stdout"
address:
socket_address:
address: 0.0.0.0
port_value: 15001
Создайте plist-файл агента запуска:
$ cat /Library/LaunchAgents/envoy.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>envoy</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/envoy</string>
<string>--config-path</string>
<string>/Users/freya/bin/front-proxy.yaml</string>
</array>
<key>StandardOutPath</key>
<string>/var/log/envoy.stdout.log</string>
<key>StandardErrorPath</key>
<string>/var/log/envoy.stderr.log</string>
<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>Disabled</key>
<false/>
</dict>
</plist>
Загрузите службу посланника:
$ sudo launchctl load /Library/LaunchAgents/envoy.plist
Теперь вы можете передать URL-адрес в браузереhttp://127.0.0.1/
Заходите в интерфейс управления AdGuard Home~
Если в будущем появятся другие неописуемые приложения, их интерфейсы управления могут быть добавлены в бэкэнд envoy по разным URL-путям. Также можно получить доступ к более продвинутому игровому процессу.Prometheus
Для мониторинга путь метрик посланника/stats/prometheus
.
Если вам интересно, почему мой браузер может выводить цветные метрики, пожалуйста, ответьте в фоне официального аккаунта ◉prometheus◉
Наконец, не забудьте установить DNS MacOS на127.0.0.1
, мне не нужно учить этому, верно?
Публичный аккаунт WeChat
Отсканируйте QR-код ниже, чтобы подписаться на официальную учетную запись WeChat, и ответьте на официальную учетную запись ◉Добавить группу◉, чтобы присоединиться к нашей облачной коммуникационной группе и обсудить облачные технологии с Сунь Хунляном, директором Чжаном, Ян Мином и другими важными шишками.