yswery / dns
纯PHP实现的DNS服务器。
v1.4.1
2020-03-13 21:06 UTC
Requires
- php: ~7.2
- ext-json: *
- ext-simplexml: *
- badcow/dns: ^3.4
- psr/log: ^1.0
- react/datagram: ^1.4
- react/socket: ~1.2
- symfony/console: ^4.3
- symfony/event-dispatcher: ^4.3
- symfony/filesystem: ^4.3
- symfony/property-access: ^4.3
- vanilla/garden-cli: ^2.2
Requires (Dev)
- bamarni/composer-bin-plugin: ^1.3
- friendsofphp/php-cs-fixer: ^2.16
- humbug/box: >=3.6
- php-coveralls/php-coveralls: ~2.1
- phpunit/phpunit: ~7.3
README
PHP DNS服务器
这是一个用纯PHP编写的权威DNS服务器。它将监听默认端口(默认:端口53)并对其具有DNS记录的任何域提供答案。这个类可以用来根据现有的PHP代码动态提供DNS响应。
要求
PHP 7.2+
- 需要加载
sockets
或socket_create
PHP扩展(默认情况下已加载)
示例
以下是DNS服务器使用示例
require_once __DIR__.'/../vendor/autoload.php'; // JsonResolver created and provided with path to file with json dns records $jsonResolver = new yswery\DNS\Resolver\JsonResolver([ '/path/to/zones/example.com.json', '/path/to/zone/test.com.json', ]); // System resolver acting as a fallback to the JsonResolver $systemResolver = new yswery\DNS\Resolver\SystemResolver(); // StackableResolver will try each resolver in order and return the first match $stackableResolver = new yswery\DNS\Resolver\StackableResolver([$jsonResolver, $systemResolver]); // Create the eventDispatcher and add the event subscribers $eventDispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher(); $eventDispatcher->addSubscriber(new \yswery\DNS\Event\Subscriber\EchoLogger()); // Create a new instance of Server class $server = new yswery\DNS\Server($stackableResolver, $eventDispatcher); // Start DNS server $server->start();
运行示例
- 运行
composer install
以安装依赖项 - 运行
php example/example.php
以运行服务器
使用 dig
命令查询服务器以确保其正常运行
$ dig @127.0.0.1 test.com A +short
111.111.111.111
$ dig @127.0.0.1 test.com TXT +short
"Some text."
$ dig @127.0.0.1 test2.com A +short
111.111.111.111
112.112.112.112
区域文件存储
PHP DNS服务器支持四种区域文件格式:Bind、JSON、XML和YAML;每种文件格式都有一个专门的 Resolver
类:分别为 BindResolver
、JsonResolver
、XmlResolver
和 YamlResolver
。示例文件位于 example/
目录中。
JSON区域示例
{ "domain": "example.com.", "default-ttl": 7200, "resource-records": [ { "name": "@", "ttl": 10800, "type": "SOA", "class": "IN", "mname": "example.com.", "rname": "postmaster", "serial": 2, "refresh": 3600, "retry": 7200, "expire": 10800, "minimum": 3600 }, { "type": "A", "address": "12.34.56.78" },{ "type": "A", "address": "90.12.34.56" }, { "type": "AAAA", "address": "2001:acad:ad::32" }, { "name": "www", "type": "cname", "target": "@" }, { "name": "@", "type": "MX", "preference": 15, "exchange": "mail" }, { "name": "*.subdomain", "ttl": 3600, "type": "A", "address": "192.168.1.42" } ] }
运行测试
提供使用PHPUnit的单元测试。一个简单的脚本位于根目录。
- 运行
composer install
以安装PHPUnit和依赖项 - 从根目录运行
vendor/bin/phpunit
以运行测试
构建 .phar
- 运行
composer run-script build-server
以构建 phpdnsserver.phar 文件,输出在 bin 文件夹中。 - 运行
composer run-script build-console
以构建 phpdnscli.phar 文件,输出在 bin 文件夹中。 - 运行
composer run-script build-installer
以构建安装程序。安装程序目前对Windows的支持有限。
运行 .phar 文件
要运行新的 .phar 文件,从发行版中下载它们并将它们移动到所需的文件夹。
phpdnsserver.phar
用于运行 phpdnsserver,默认使用新的文件系统phpdnscli.phar
用于运行命令行命令phpdnsinstaller.phar
作为root创建所需的文件夹和默认配置
支持的命令行选项
--bind:b
- 绑定到特定IP。默认使用0.0.0.0
--port:p
- 绑定到特定端口。默认使用端口53
--config:c
- 指定配置文件。在Windows上默认使用phpdns.json
,在Unix系统上默认使用/etc/phpdns.json
--storage:s
- 指定区域和日志的存储路径。在Unix上默认使用/etc/phpdnsserver
,在Windows上默认使用当前工作目录
支持的记录类型
- A
- NS
- CNAME
- SOA
- PTR
- MX
- TXT
- AAAA
- AXFR
- ANY
- SRV
许可证
MIT许可(MIT)
版权所有(c)2016-2017 Yif Swery
特此授予任何获得此软件及其相关文档副本(“软件”)的人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许提供软件的人使用软件,但受以下条件的约束
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、适用于特定目的和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该责任是基于合同、侵权或其他方式,无论该责任产生于、源于或与软件或软件的使用或其他方式有关。