- 主题:从零开始实现一个DNS服务器的难度大么?
DNS服务器原理是不是很简单?
收到udp请求,响应一个udp数据包?
--
FROM 115.221.249.*
是的
【 在 sataMXH 的大作中提到: 】
: DNS服务器原理是不是很简单?
: 收到udp请求,响应一个udp数据包?
--
FROM 222.71.112.*
没啥难度,不过很少有人自建dns了吧?
【 在 sataMXH 的大作中提到: 】
: DNS服务器原理是不是很简单?
: 收到udp请求,响应一个udp数据包?
:
--
FROM 111.198.227.*
你实现过哪些网络协议呢
【 在 zdx 的大作中提到: 】
: 没啥难度,不过很少有人自建dns了吧?
--
FROM 115.221.254.*
听说协议很复杂
【 在 sataMXH 的大作中提到: 】
: DNS服务器原理是不是很简单?
: 收到udp请求,响应一个udp数据包?
: --
:
发自「今日水木 on iPhone 12 Pro」
--
FROM 58.37.94.*
类似实现一个大数据库的高速查询
【 在 sataMXH 的大作中提到: 】
:
: DNS服务器原理是不是很简单?
: 收到udp请求,响应一个udp数据包?
:
#发自zSMTH@如有雷同 纯属巧合
--
FROM 223.72.80.*
只要最基本功能简单跑起来不难,大部分工作是协议字段解包打包。两三天时间差不多
进阶的就没边了,完整的协议其实挺复杂的。请求类型非常多,单个请求可能包含多个子请求,udp包长度处理,要不要recursive,边界条件多容易有漏洞。刨去协议层面,看你的需求类型以及规模,性能层面又是另一类问题了
有一些开源实现可参考,除了bind外还有几个更轻量级的可能更合适
【 在 sataMXH 的大作中提到: 】
:
: DNS服务器原理是不是很简单?
: 收到udp请求,响应一个udp数据包?
:
--
FROM 123.112.64.*
以自己以前实现过的转发过滤+各种特殊操作的dns转发器来简单说下吧
1.网络层面确实简单, 毕竟是UDP不需要麻烦epoll什么的, 当然极少大包的情况客户端会通过TCP请求但不实现也没啥.
但是当有很多客户端或者客户端请求速度快的时候, 就要分清楚, 上游dns响应过来的包应该转发给谁.
也就是说需要实现一个查找表.
2.另外一个层面就是协议解析了, dns使用了二进制协议, 而且每个8位的字节还可能被掰开用, 刚接触可能有点绕.
略读一下rfc, 大致记住请求包响应包大概什么就行了.
实际去操作dns包的时候建议直接用c-ares的两个很短的头文件就可以了, 各种定义也都有了
最后加上一点C语言的功底, 熟悉一天两天的, 一个dns转发器就实现了
然后就可以在上面实现广告过滤啊分流啊等功能
如果要实现递归服务器的话就要一层层去权威dns那里去查询了, 而不能仅用一个上游dns服务器.
实现起来也不麻烦
【 在 sataMXH 的大作中提到: 】
: DNS服务器原理是不是很简单?
: 收到udp请求,响应一个udp数据包?
:
--
FROM 51.81.85.*
如果只是满足基本使用的要求,不太难。
收到包按协议规范解析就行,常用那几种类型报文能处理就行,遇到没处理过的类型就记日志慢慢补充。
说难也挺难做完整支持的,从零开发一个dns产品是挺难的。其实还有基于tcp的dns需要支持,现在也有http dns,还有智能dns要支持,权威和递归dns也是不一样的思路,配置文件你要自定义还是兼容bind,性能不考虑不行吧,不能比bind差吧,上DPDK后还有各种优化。
这个现在基本就是各大云厂商在做。
【 在 sataMXH 的大作中提到: 】
: DNS服务器原理是不是很简单?
: 收到udp请求,响应一个udp数据包?
: --
:
发自「今日水木 on IN2020」
--
FROM 115.171.216.*
没有做过都觉得容易。
--
FROM 221.220.150.*