Расширенное применение dnscrypt-proxy + dnsmasq — интеллектуальная разгрузка DoH/DoT
Расширенное применение dnscrypt-proxy + dnsmasq — интеллектуальная разгрузка DoH/DoT

Предисловие

Обычный DNS не имеет возможностей шифрования. По умолчанию все запросы передаются в виде открытого текста UDP. Конечно, некоторые возвращаемые байты, которые слишком велики, будут усечены и использованы для передачи TCP (повторная попытка). in TCP режим), но все это обычный текст; для некоторых бизнес-сценариев с высокими требованиями безопасности, чтобы избежать угроз безопасности, вызванных перехватом, загрязнением и т. д. DNS; over HTTPS (DoH) и DNS over TLS(DoT)Это пригодилось。в то же времяHTTPDNSЭто также позволяет избежать проблемы перехвата данных оператором.,Основной принцип — обойти LDNS, предоставляемый интернет-провайдером, и напрямую запросить службу HTTPDNS.,иметьПредотвращение захвата доменного имени、Точное планирование и другие функции,Но он в основном нацелен на сценарии мобильных приложений.,Процесс анализа выглядит следующим образом:

Возвращаясь к теме, dnscrypt-proxy, как служба пересылки DNS DoH/DoT, сотрудничает с основными публичными службами DoH/DoT, которые уже существуют в отрасли, чтобы легко реализовать зашифрованную передачу DNS.

На этом основании,Также необходимо перенаправить отечественные и зарубежные доменные имена на разные DoH/DoTанализировать.,Повысить эффективность и точность анализа.,используется здесьdnsmasq+ dnscrypt-proxyвыполнить,Архитектура следующая:

Установка и настройка dnsmasq здесь не будут подробно описываться.,Можно обратиться кПредыдущая статья

1. Установите dnscrypt-прокси.

1. Установка исходного кода программного обеспечения.

В хранилищах программного обеспечения каждого дистрибутива в основном будет встроен dnscrypt-proxy. Этот метод установки также рекомендуется использовать в первую очередь, и служба systemd будет записана автоматически.

Дистрибутив

Команда установки

Arch

pacman -Sy dnscrypt-proxy/yay -Sy dnscrypt-proxy

CentOS/RedHat

yum install -y dnscrypt-proxy

Debian/Ubuntu

apt-get install -y dnscrypt-proxy

2. Бинарная установка

(1) Получить

приезжатьreleasesСтраница загрузки последней версии:

Язык кода:shell
копировать
cd /opt  #Принято помещать его в каталог /opt. Вы также можете поместить его в каталог /etc или в другие каталоги.
wget https://github.com/DNSCrypt/dnscrypt-proxy/releases/download/2.1.2/dnscrypt-proxy-linux_x86_64-2.1.2.tar.gz

По состоянию на ноябрь 2022 г. последняя версия — 2.1.2.

(2) Распаковка и мягкая ссылка
Язык кода:shell
копировать
tar xvf dnscrypt-proxy-linux_x86_64-2.1.2.tar.gz
mv linux-x86_64 dnscrypt-proxy
cd dnscrypt-proxy
ln -sf /opt/dnscrypt-proxy/dnscrypt-proxy /usr/sbin/dnscrypt-proxy
  • Переименуйте, чтобы улучшить читаемость. После распаковки вы увидите в каталоге исполняемый файл dnscrypt-proxy и несколько примеров файлов конфигурации.
  • Мягкая ссылка исполняемого файла на каталог PATH.
(3) Написать службу systemd
Язык кода:shell
копировать
vim /etc/systemd/system/dnscrypt-proxy.service

Напишите следующее содержание:

Язык кода:shell
копировать
[Unit]
Description=Encrypted/authenticated DNS proxy
ConditionFileIsExecutable=/usr/sbin/dnscrypt-proxy

[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/sbin/dnscrypt-proxy "-config" "dnscrypt-proxy.toml"

WorkingDirectory=/opt/dnscrypt-proxy

Restart=always

RestartSec=120
EnvironmentFile=-/etc/sysconfig/dnscrypt-proxy

[Install]
WantedBy=multi-user.target

Перезагрузите демон systemd:

Язык кода:shell
копировать
systemctl daemon-reload

Автозапуск при загрузке:

Язык кода:shell
копировать
systemctl enable dnscrypt-proxy.service

2. Публичные серверы и переписывание конфигурации сервисов

1. Ситуация временного тестового анализа

в каталогеexample-dnscrypt-proxy.tomlэто основной файл конфигурации,Скопируйте его как официальный файл конфигурации:

Язык кода:shell
копировать
cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml

Вы можете запустить его на переднем плане, прежде чем запускать его через systemctl:

Язык кода:shell
копировать
./dnscrypt-proxy "-config" "dnscrypt-proxy.toml"

Проверьте, нормальный ли анализ:

Язык кода:shell
копировать
./dnscrypt-proxy -resolve google.com

Адрес можно разрешить обычным образом. Судя по журналам, по умолчанию будет запрошен встроенный сервер DoH, поскольку большинство серверов DoH находятся за границей. Если вы находитесь в Китае, основной гарантией в настоящее время является научный доступ в Интернет. .

2. Список услуг DoH/DoT

(1)public servers

dnscrypt-proxyОфициальный предоставляетсяСписок услуг(Возможно, вам понадобится доступ к Интернету с научной точки зрения, чтобы открыть его в стране.),Вы можете произвольно выбрать сервер, используемый вышестоящим DNS, из списка поддерживаемых.

В настоящее время в Китае поддерживаются только серверы DoH Alibaba и Университета Цинхуа:

(2)public servers map

При этом также предусмотрен метод поиска по карте, и на карте будут отмечены поддерживаемые точки:

Удобно выберите ближайший к вам восходящий сервер DoH.

3. Перезапись файла конфигурации

В зависимости от требований внутреннего и зарубежного распространения необходимо написать два файла конфигурации: один для зарубежных стран и один для внутренних.

(1) Внутренняя конфигурация

dnscrypt-proxy.tomlБольшинство встроенных функций нам не нужны,Здесь будетdnscrypt-proxy.tomlпереписано как:

Язык кода:shell
копировать
# Empty listen_addresses to use systemd socket activation
listen_addresses = ['0.0.0.0:5533']
server_names = ['alidns-doh','tuna-doh-ipv4']
cache_size = 4096
cache_min_ttl = 2400
cache_max_ttl = 86400
cache_neg_min_ttl = 60
cache_neg_max_ttl = 600
[query_log]
  file = '/var/log/dnscrypt-proxy/query.log'

[nx_log]
  file = '/var/log/dnscrypt-proxy/nx.log'

[sources]
  [sources.'public-resolvers']
  url = 'https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md'
  cache_file = '/var/cache/dnscrypt-proxy/public-resolvers.md'
  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
  refresh_delay = 72
  prefix = ''
  • Адрес прослушивания установлен на 5533 вместо 53, чтобы система не имела встроенной службы DNS и не вызывала конфликтов;
  • server_namesэто определенный восходящий потокDoH/DoTсервер,Не могу написать произвольно,нужно поддержатьСписок услугв。
(2) Конфигурация за рубежом

Пучокdnscrypt-proxy.tomlСделать копию:

Язык кода:shell
копировать
cp dnscrypt-proxy.toml dnscrypt-proxy-foreign.toml

Воляserver_namesСменить на иностранныйDoH/DoTсервер,и измените порт прослушивания,Модифицированный пример выглядит следующим образом,Другие места удалять не нужно:

Язык кода:shell
копировать
listen_addresses = ['0.0.0.0:25533']
server_names = ['cloudflare','google']

4. Напишите системный сервис

Внутренняя конфигурация была записана в systemd, поэтому внешняя конфигурация такая же и требует процесса для мониторинга и запуска.

Язык кода:shell
копировать
vim /etc/systemd/system/dnscrypt-proxy-foreign.service

Напишите следующее содержание:

Язык кода:shell
копировать
[Unit]
Description=Encrypted/authenticated DNS proxy
ConditionFileIsExecutable=/usr/sbin/dnscrypt-proxy

[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/sbin/dnscrypt-proxy "-config" "dnscrypt-proxy-foreign.toml"

WorkingDirectory=/opt/dnscrypt-proxy

Restart=always

RestartSec=120
EnvironmentFile=-/etc/sysconfig/dnscrypt-proxy

[Install]
WantedBy=multi-user.target

Перезагрузите демон systemd:

Язык кода:shell
копировать
systemctl daemon-reload   

Автозапуск при загрузке:

Язык кода:shell
копировать
systemctl enable dnscrypt-proxy-foreign.service

3. Запуск и тестовая проверка

1. Старт

Загрузите файл конфигурации toml дома и за границей соответственно, и соответствующая служба systemd будет написана. Затем запустите и проверьте, соответствует ли он ожиданиям.

Язык кода:shell
копировать
systemctl start dnscrypt-proxy.service
systemctl start dnscrypt-proxy-foreign.service

Служба прослушивает и работает нормально, мониторинг 5533 используется для внутренних доменных имен, а мониторинг 25533 используется для иностранных доменных имен.

2. Тестовая проверка

В настоящее время нет отечественных и зарубежных интеллектуальных дистрибутивов. Во-первых, отдельно проверьте, нормально ли анализируются оба сервиса.

Просмотрите файл журнала синтаксического анализа:

Язык кода:shell
копировать
tail -f /var/log/dnscrypt-proxy/query.log

Команда dig проверяет восходящий DNS, используемый для разрешения различных портов:

Язык кода:shell
копировать
dig qcloud.com @192.168.1.72 -p 5533 +short
dig youtube.com @192.168.1.72 -p 25533 +short

На данный момент это показывает, что обе службы работают хорошо.

4. Dnsmasq реализует интеллектуальное перенаправление отечественных и зарубежных доменных имен.

1. Измените восходящий DNS dnsmasq.

Если dnsmasq еще не установлен и не настроен,Можно ссылатьсяПредыдущая статья,прямойприезжать Делатьприезжатьdnsmasq-china-listэтот шагвыполнитьdnsmasqОтклонение размеров внутри страны и за рубежом。

После этого просто измените исходящий DNS на машине, на которой работает dnscrypt-proxy. Если dnsmasq и dnscrypt-proxy работают на одном компьютере, измените его на локальный адрес.

(1) Укажите внутренний восходящий адрес прослушивания DoH.

одомашненныйDohнеобходимо изменитьdnsmasq-china-listвнутриaccelerated-domains.china.conf,Замените IP на внутренний адрес прослушивания DoH:

Язык кода:shell
копировать
sed -i 's|114.114.114.114|127.0.0.1#5533|g' accelerated-domains.china.conf

Результат после замены следующийserver=/0-100.com/127.0.0.1#5533

Поскольку я запускаю эти две службы независимо в двух системах, я заменил их внутренним адресом прослушивания DoH, соответствующим машине, на которой работает dnscrypt-proxy:

(2) Укажите внешний восходящий адрес прослушивания DoH.

потому чтоresolv.confНевозможно указать порт,нужно быть внутриdnsmasq.confОпределить восходящий потокDNSдля зарубежных странDoHадрес прослушивания。так/etc/resolv.confНапишите здесь местный адрес,dnsmasq.confдобавить одинприезжатьиностранныйDoHНастройка адреса прослушивания:

Язык кода:shell
копировать
$ cat /etc/resolv.conf
nameserver 127.0.0.1
$ cat /etc/dnsmasq.conf
log-queries
log-facility=/var/log/dnsmasq.log
no-hosts
bogus-nxdomain=119.29.29.29
cache-size=1000
port=53
#Ниже приведена добавленная конфигурация. # перед 25533 — это не комментарий, а назначенный порт. Если dnsmasq и dnscrypt-proxy находятся на одном компьютере, замените его на 127.0.0.1#25533.
server=192.168.1.72#25533
(3) правила iptables DNAT

План расширения, основанный на #(2), не является обязательным. Вы можете выбрать один из двух. Он подходит для ситуаций, когда dnsmasq и dnscrypt-proxy работают на разных машинах.

Если ты не хочешь быть тамdnsmasq.confвобозначениеserverдля зарубежных странDoHадрес,Но непосредственно в/etc/resolv.confнастраивать,Затем просто задайте в dnscrypt-proxyмашине правило для порта DNAT 53 на внешний порт прослушивания DoH:

Язык кода:shell
копировать
#192.168.1.72 Заменить IP-адрес внутренней сети dnscrypt-proxymachine
iptables -t nat -A PREROUTING -i ens192 -p tcp --dport 53 -j DNAT --to-destination 192.168.1.72:25533
iptables -t nat -A PREROUTING -i ens192 -p udp --dport 53 -j DNAT --to-destination 192.168.1.72:25533

Изменить сейчасdnsmasqмашинаиз/etc/resolv.confСодержимое файла следующее:

Язык кода:shell
копировать
nameserver 192.168.1.72

2. Проверка сценария интеллектуального перенаправления DoH/DoT

Используйте любой компьютер интрасети, чтобы изменить разрешение DNS на адрес компьютера dnsmasq, а затем получить доступ к внутренним и внешним доменным именам для тестирования и проверки.

машина

роль/услуга

192.168.1.71

Клиент, DNS указывает на dnsmasq

192.168.1.72

dnscrypt-proxy

192.168.1.73

dnsmasq

(1) Проверка журнала

Если вы создадите его точно в соответствии с моей конфигурацией выше, соответствующий путь к файлу журнала будет следующим:

  • dnsmasq queryПуть журнала:/var/log/dnsmasq.log
  • dnscrypt-proxy queryПуть журнала:/var/log/dnscrypt-proxy/query.log

Используйте dig для проверки и прослушивания вывода соответствующего файла журнала:

Можно ясно видеть, что для разрешения внутреннего доменного имени dnsmasq перенаправляет его во внутренний восходящий DoH dnscrypt-proxy, а для разрешения внешнего доменного имени он пересылает его во внешний восходящий DoH. Записи кэша контролируются dnsmasq и. повторные запросы напрямую попадают в кеш и возвращаются клиенту.

(2) Проверка захвата пакетов

dig github.comВ качестве примера проверки:

Разверните захват пакетов на компьютерах dnsmasq и dnscrypt-proxy одновременно:

машина dnsmasq:

Язык кода:shell
копировать
tcpdump -i any -nn -s 0 port 53 or port 5533 or port 25533 or port 443 -v -w dnsmasq.pcap

dnscrypt-прокси-машина:

Язык кода:shell
копировать
tcpdump -i any -nn -s 0 port 53 or port 5533 or port 25533 or port 443 -v -w dnscrypt-proxy.pcap

после Воля.pcapЗагрузка файлаприезжатьместный,Используйте Wireshark для анализа следующим образом:

  • dnsmasq: Пакет №9, получение запроса DNS-запроса от клиента;
  • dnsmasq: пакет № 10, dnsmasq запрашивает восходящий dnscrypt-прокси;
  • dnscrypt-proxy: пакет № 5, dnscrypt-proxy получает запрос DNS от dnsmasq;
  • dnscrypt-proxy: пакет № 6-30, устанавливает трехстороннее TCP-подтверждение и TLS-рукопожатие с восходящим Google DoH, а также шифрует и передает DNS-запросы;
  • dnscrypt-proxy: Пакет №31-33, получите зашифрованные данные ответа;
  • dnscrypt-proxy: Пакет №34, после расшифровки результат будет возвращен в dnsmasq;
  • dnsmasq: Пакет № 11, получен анализатор записи;
  • dnsmasq: Пакет № 12, возвращает результаты клиенту.

Хорошо видно, что после получения запроса dnsmasq пересылает его на внешний сервер DoH для обработки, и этот процесс проходит зашифрованную передачу TLS, что значительно обеспечивает безопасность DNS. После получения запроса и его расшифровки он возвращается клиенту. обычно.

Подвести итог

здесь,dnsmasq+dnscrypt-proxyвыполнитьодомашненныйснаружиDoH/DoTДиверсияанализировать Все завершено。выполнить Принцип тоже очень прост,dnsmasqмашина как вход,использоватьdnsmasq-china-listБелый список доменных имен материкового Китаявыполнить Диверсия Вперед к восходящему течениюdnscrypt-proxyиметь дело с,dnscrypt-proxyПереписываться дальшеизDoH/DoT public Серверы шифруют и пересылают данные для получения результатов анализа.

кроме того,dnscrypte-proxy также имеет возможности балансировки нагрузки.,существоватьtomlпередано в файле конфигурацииlb_strategyСпецификация параметров,Диапазоны параметров могут быть:

  • first:Всегда выбирайте самого быстрого в спискеизсервер
  • p2:перед случайным выбором2Самое быстрое имяизсервер,Параметры по умолчанию
  • ph:существоватьвсесерверсамый быстрый виз Случайный выбор между половиной
  • random:отServerСлучайно выбрано из списка

Настраивайте в соответствии с различными бизнес-сценариями. В то же время вы можете выбрать несколько высококачественных восходящих DoH/DoT, соответствующим образом увеличить количество RS dnscrypte-proxy и улучшить предпочтительные объекты.

Поставляется с PDF-версией:

Расширенное применение dnscrpt-proxy+dnsmasq — разгрузка для реализации DoH и DoT.pdf
Расширенное применение dnscrpt-proxy+dnsmasq — разгрузка для реализации DoH и DoT.pdf(яркая версия).pdf
boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.