Обычный 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 здесь не будут подробно описываться.,Можно обратиться кПредыдущая статья。
В хранилищах программного обеспечения каждого дистрибутива в основном будет встроен 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 |
приезжатьreleasesСтраница загрузки последней версии:
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.
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
vim /etc/systemd/system/dnscrypt-proxy.service
Напишите следующее содержание:
[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:
systemctl daemon-reload
Автозапуск при загрузке:
systemctl enable dnscrypt-proxy.service
в каталогеexample-dnscrypt-proxy.toml
это основной файл конфигурации,Скопируйте его как официальный файл конфигурации:
cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml
Вы можете запустить его на переднем плане, прежде чем запускать его через systemctl:
./dnscrypt-proxy "-config" "dnscrypt-proxy.toml"
Проверьте, нормальный ли анализ:
./dnscrypt-proxy -resolve google.com
Адрес можно разрешить обычным образом. Судя по журналам, по умолчанию будет запрошен встроенный сервер DoH, поскольку большинство серверов DoH находятся за границей. Если вы находитесь в Китае, основной гарантией в настоящее время является научный доступ в Интернет. .
dnscrypt-proxyОфициальный предоставляетсяСписок услуг(Возможно, вам понадобится доступ к Интернету с научной точки зрения, чтобы открыть его в стране.),Вы можете произвольно выбрать сервер, используемый вышестоящим DNS, из списка поддерживаемых.
В настоящее время в Китае поддерживаются только серверы DoH Alibaba и Университета Цинхуа:
При этом также предусмотрен метод поиска по карте, и на карте будут отмечены поддерживаемые точки:
Удобно выберите ближайший к вам восходящий сервер DoH.
В зависимости от требований внутреннего и зарубежного распространения необходимо написать два файла конфигурации: один для зарубежных стран и один для внутренних.
dnscrypt-proxy.toml
Большинство встроенных функций нам не нужны,Здесь будетdnscrypt-proxy.toml
переписано как:
# 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 = ''
server_names
это определенный восходящий потокDoH/DoTсервер,Не могу написать произвольно,нужно поддержатьСписок услугв。Пучокdnscrypt-proxy.toml
Сделать копию:
cp dnscrypt-proxy.toml dnscrypt-proxy-foreign.toml
Воляserver_names
Сменить на иностранныйDoH/DoTсервер,и измените порт прослушивания,Модифицированный пример выглядит следующим образом,Другие места удалять не нужно:
listen_addresses = ['0.0.0.0:25533']
server_names = ['cloudflare','google']
Внутренняя конфигурация была записана в systemd, поэтому внешняя конфигурация такая же и требует процесса для мониторинга и запуска.
vim /etc/systemd/system/dnscrypt-proxy-foreign.service
Напишите следующее содержание:
[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:
systemctl daemon-reload
Автозапуск при загрузке:
systemctl enable dnscrypt-proxy-foreign.service
Загрузите файл конфигурации toml дома и за границей соответственно, и соответствующая служба systemd будет написана. Затем запустите и проверьте, соответствует ли он ожиданиям.
systemctl start dnscrypt-proxy.service
systemctl start dnscrypt-proxy-foreign.service
Служба прослушивает и работает нормально, мониторинг 5533 используется для внутренних доменных имен, а мониторинг 25533 используется для иностранных доменных имен.
В настоящее время нет отечественных и зарубежных интеллектуальных дистрибутивов. Во-первых, отдельно проверьте, нормально ли анализируются оба сервиса.
Просмотрите файл журнала синтаксического анализа:
tail -f /var/log/dnscrypt-proxy/query.log
Команда dig проверяет восходящий DNS, используемый для разрешения различных портов:
dig qcloud.com @192.168.1.72 -p 5533 +short
dig youtube.com @192.168.1.72 -p 25533 +short
На данный момент это показывает, что обе службы работают хорошо.
Если dnsmasq еще не установлен и не настроен,Можно ссылатьсяПредыдущая статья,прямойприезжать Делатьприезжатьdnsmasq-china-list
этот шагвыполнитьdnsmasqОтклонение размеров внутри страны и за рубежом。
После этого просто измените исходящий DNS на машине, на которой работает dnscrypt-proxy. Если dnsmasq и dnscrypt-proxy работают на одном компьютере, измените его на локальный адрес.
одомашненныйDohнеобходимо изменитьdnsmasq-china-list
внутриaccelerated-domains.china.conf
,Замените IP на внутренний адрес прослушивания DoH:
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:
потому чтоresolv.conf
Невозможно указать порт,нужно быть внутриdnsmasq.conf
Определить восходящий потокDNSдля зарубежных странDoHадрес прослушивания。так/etc/resolv.conf
Напишите здесь местный адрес,dnsmasq.conf
добавить одинприезжатьиностранныйDoHНастройка адреса прослушивания:
$ 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
План расширения, основанный на #(2), не является обязательным. Вы можете выбрать один из двух. Он подходит для ситуаций, когда dnsmasq и dnscrypt-proxy работают на разных машинах.
Если ты не хочешь быть тамdnsmasq.conf
вобозначениеserverдля зарубежных странDoHадрес,Но непосредственно в/etc/resolv.conf
настраивать,Затем просто задайте в dnscrypt-proxyмашине правило для порта DNAT 53 на внешний порт прослушивания DoH:
#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
Содержимое файла следующее:
nameserver 192.168.1.72
Используйте любой компьютер интрасети, чтобы изменить разрешение DNS на адрес компьютера dnsmasq, а затем получить доступ к внутренним и внешним доменным именам для тестирования и проверки.
машина | роль/услуга |
---|---|
192.168.1.71 | Клиент, DNS указывает на dnsmasq |
192.168.1.72 | dnscrypt-proxy |
192.168.1.73 | dnsmasq |
Если вы создадите его точно в соответствии с моей конфигурацией выше, соответствующий путь к файлу журнала будет следующим:
/var/log/dnsmasq.log
/var/log/dnscrypt-proxy/query.log
Используйте dig для проверки и прослушивания вывода соответствующего файла журнала:
Можно ясно видеть, что для разрешения внутреннего доменного имени dnsmasq перенаправляет его во внутренний восходящий DoH dnscrypt-proxy, а для разрешения внешнего доменного имени он пересылает его во внешний восходящий DoH. Записи кэша контролируются dnsmasq и. повторные запросы напрямую попадают в кеш и возвращаются клиенту.
dig github.com
В качестве примера проверки:
Разверните захват пакетов на компьютерах dnsmasq и dnscrypt-proxy одновременно:
машина dnsmasq:
tcpdump -i any -nn -s 0 port 53 or port 5533 or port 25533 or port 443 -v -w dnsmasq.pcap
dnscrypt-прокси-машина:
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 пересылает его на внешний сервер 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-версией: