noglitchyo/dealdoh
Composer 安装命令:
composer require noglitchyo/dealdoh
包简介
A simple DNS over HTTPS proxy built on PHP.
README 文档
README
Play with DNS over HTTPS and much more!
Dealdoh is a DNS-over-HTTPS (DoH) proxy and a library around DNS messaging written in PHP.
Overview
This library gives ability to proxy DoH requests and/or to send DNS queries with standard UDP/TCP and various modern and secure DNS protocols like DNSCrypt, DNS-over-HTTPS (DoH), GoogleDNS.
It attempts to achieve the following goals:
- provide high-compatibility with a large variety of DNS protocols.
- provide a well-designed abstraction layer for development around DNS in PHP.
Features
- DoH proxy middleware PSR-15/PSR-7 compliant.
- Create and forward DNS messages to different type of DNS upstream resolvers.
- Forward DNS query through multiple DNS upstream resolvers.
- Compatible with DNS protocols: RFC-1035 (Plain DNS over TCP/UDP), RFC-8484 (DoH), Google DoH API, DNSCrypt
- Abstraction layer around DNS development.
- Parse DNS stamps
Client
dealdoh-client is a CLI utility which offers a ready-to-use implementation of this library to send and forward DNS queries.
Library
Requirements
- PHP 7.3
- Web server
- Optional: HTTPS enabled with valid certificates (self-signed certificates can work but it depends of the DOH client making the queries)
Installation
-
Run
composer require noglitchyo/dealdoh -
DohResolverMiddleware::forward()method consumes PSR-7 ServerRequest. Some compatible implementations which can be used:- https://github.com/Nyholm/psr7 -
composer require nyholm/psr7 - https://github.com/guzzle/psr7 -
composer require guzzle/psr7 - https://github.com/zendframework/zend-diactoros -
composer require zendframework/zend-diactoros
- https://github.com/Nyholm/psr7 -
-
Configure your application to call
DohResolverMiddleware::forward() -
Testing the installation
As recommended in RFC-8484, usually, DoH client/server will send/receive DNS requests on the path: /dns-query.
Your application should be configured to listen on this route.
A large variety of DoH client exists than can be used to test the installation.
-
Using client from Web Browser
Mozilla Firefox provides a Trusted Recursive Resolver who can be configured to query DoH servers. This article from Daniel Stenberg provides a lot of details about TRR and how to configure it. Please check also the browser implementations list.
Example
<?php use GuzzleHttp\Client as GuzzleClient; use Http\Adapter\Guzzle6\Client as GuzzleClientAdapter; use NoGlitchYo\Dealdoh\Dns\Client\DnsCryptClient; use NoGlitchYo\Dealdoh\Dns\Client\DohClient; use NoGlitchYo\Dealdoh\Dns\Client\PlainDnsClient; use NoGlitchYo\Dealdoh\Dns\Resolver\DnsUpstreamPoolResolver; use NoGlitchYo\Dealdoh\Entity\DnsUpstreamPool; use NoGlitchYo\Dealdoh\Mapper\DnsCrypt\AuthenticatedEncryptionMapper; use NoGlitchYo\Dealdoh\Mapper\HttpResponseMapper; use NoGlitchYo\Dealdoh\Mapper\MessageMapper; use NoGlitchYo\Dealdoh\Middleware\DohResolverMiddleware; use NoGlitchYo\Dealdoh\Repository\DnsCrypt\CertificateRepository; use Psr\Http\Message\ResponseInterface; $messageMapper = new MessageMapper(); // Initialize the DNS clients to use with the resolver $dnsClients = [ new DohClient(new GuzzleClientAdapter(new GuzzleClient()), $messageMapper), new PlainDnsClient($messageMapper), new DnsCryptClient(new AuthenticatedEncryptionMapper(), new CertificateRepository(), $messageMapper) ]; // Initialize the list of DNS upstreams to use to resolve the DNS queries $dnsUpstreamPool = new DnsUpstreamPool([ 'dns://8.8.8.8:53', 'https://cloudflare-dns.com/dns-query', 'sdns://AQcAAAAAAAAAFlsyMDAxOmJjODoxODI0OjczODo6MV0gAyfzz5J-mV9G-yOB4Hwcdk7yX12EQs5Iva7kV3oGtlEgMi5kbnNjcnlwdC1jZXJ0LmFjc2Fjc2FyLWFtcy5jb20', ]); // Initialize the DNS resolver with the list of upstreams and the list of clients able to exchange with the upstreams $dnsResolver = new DnsUpstreamPoolResolver($dnsUpstreamPool, $dnsClients); // Create the ResolverMiddleware with the created DnsResolver $dohMiddleware = new DohResolverMiddleware($dnsResolver, $messageMapper, new HttpResponseMapper($messageMapper)); /** @var $response ResponseInterface */ $response = $dohMiddleware->forward(/* Expect a \Psr\Http\Message\RequestInterface object */);
More examples
Checkout some really simple integration examples to get a glimpse on how it can be done:
Testing
If you wish to run the test, checkout the project and run the test with:
composer test
Contributing
Get started here CONTRIBUTING.md.
License
This project is licensed under the MIT License - see the LICENSE.md file for details
Acknowledgments
- https://github.com/reactphp/dns
- https://github.com/mageddo/dns-proxy-server
- https://github.com/facebookexperimental/doh-proxy
- https://github.com/DNSCrypt/dnscrypt-proxy
References
noglitchyo/dealdoh 适用场景与选型建议
noglitchyo/dealdoh 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 146 次下载、GitHub Stars 达 18, 最近一次更新时间为 2019 年 05 月 31 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「dns」 「dns-resolver」 「dns-over-https」 「doh」 「dns-proxy」 「dns-client」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 noglitchyo/dealdoh 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 noglitchyo/dealdoh 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 noglitchyo/dealdoh 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Async DNS resolver for ReactPHP
Async DNS-over-HTTPS resolution for Amp.
Encoder/decoder for google's JSON DNS message format based on libdns
Async DNS resolver for HiblaPHP
An advanced PHP library for email validation with DNS checks and typo suggestions.
Async DNS resolver for ReactPHP
统计信息
- 总下载量: 146
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 18
- 点击次数: 9
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2019-05-31