这是有望成为系列赛的第一场比赛。我想要强调的是那些被广泛使用的项目,甚至到了成为关键基础设施的一部分,但仍然是有小的(通常是无人赞助的)开发团队的小项目。我们从采访西蒙·凯利开始这一系列节目。
Dnsmasq是互联网上的无名英雄之一:这是一款使用非常广泛的小软件,但开发团队非常小,而且没有公司的支持。它用作各种家庭市场路由器以及其他设备上的DHCP和缓存DNS服务器,并且是libvirt(扩展为OpenStack)的默认DHCP和DNS缓存服务器。几年前,我联系了“dnsmasq”的作者西蒙·凯利(Simon Kelley),问他是否愿意接受采访。他是,但是我的博客在那个时候并不处于可维护的位置,所以它被推迟了。我最近又联系了他,我们设法做到了这一点。本次采访是在2017年12月10日通过电子邮件进行的。
西蒙,谢谢你(当你可以编程的时候)从你的日程安排中抽出时间来回答我的问题。这是一个相当荣幸的事情,我希望你们喜欢下面的问题。
你挠的是什么痒,也就是说,你对dnsmasq的初衷和需求是什么?
很久以前,大约在世纪之交,我有一台运行Linux的PC,通过拨号调制解调器进行网络连接。如果PC没有连接到网络,那么Netscape Navigator将立即返回一个错误,因为执行DNS查询的UDP数据包得到了一个“没有到主机的路由”错误。然后我得到了一台二手486笔记本电脑,我发现我可以把它连接到我的PC上,并给它一个网络连接,使用一种叫做IP伪装(后来变成NAT)的神奇东西。但是,当桌面上的Netscape将UDP DNS查询发送到ISP时,它会到达桌面,在那里它会蒸发,Netscape会挂起很长一段时间(它是单线程的,至少在DNS代码中是这样)。我想改掉那个讨厌的行为。IP伪装的使用就是DNSmasq名称的来源。
不是我的问题--我发现过一次Linux内核错误,那是在控制ARP缓存的API中。这个错误很久以前就被修复了,但从某种意义上说,dnsmasq中的变通方法仍然存在。它很难找到,因为它是断断续续的,很难复制,花了很长时间才考虑到问题可能不是我的,而是在内核中。
相关:在修复错误(由您发现或报告)时,您最感兴趣的是什么?“当我写下那个错误时,我在想什么”的那一刻?
这样的事很多。我曾经发现一个“&;”与“&;”的混淆,通过代码和检查,没有人发现这是一个功能错误。
您是否曾因测试而在其他DHCP和DNS产品/库中发现错误?最有趣的是什么?如果你愿意,可以自由地与他人分享。
在打印机、扫描仪和一般物联网设备中有很多DHCP客户端,它们的行为很糟糕,需要解决办法。英特尔在PXE实现中产生了一些可怕的错误,这些错误进入了Netboot ROM,并且从未得到更新。
当你学习DHCP和DNS的新手时,你最大的“你一定是在开玩笑”的时刻是什么,和/或你最大的“我希望我开始的时候就知道了”的时刻是什么?
一直让我感到有趣的是,DNS数据包的格式-它的大小被限制为适合UDP数据包-在计算查询中的问题数量时浪费了16位。在DNS的整个生命周期中,这被限制为恰好为1,因此这16位完全被浪费了。一般说来,DNS是一个令人惊讶的不明确和晦涩的领域,它已经存在很久了,是由长期存在并伴随着它长大的人开发的。他们倾向于极大地低估他们在写RFC时所假定的隐含知识的大小。至于我希望我知道的是什么:我希望我能更早地找到RFC,它是最初三个DNSSEC RFC的勘误表;我很难找到几个bug。
当您发现dnsmasq被用作OpenStack的默认转发器/DHCP服务器时,您有何反应?在世界上最知名的开源项目之一中使用您的项目是什么感觉?
这发生在dnsmasq被整合到Android之后,所以在进入这个星球上的大多数智能手机之后,它是一种反高潮。
除了OpenStack,您听说过的dnsmasq还有哪些最有趣的用例?
我从一个为跨洋水手提供卫星互联网的人那里拿了一些补丁。带宽成本足够高,以至于它需要审计几乎每个发送和接收的字节,包括DNS解析。
您是否曾经从使用过dnsmasq的路由器制造商那里获得过贡献(代码或其他)?
可能吧,但我不记得有什么重要的代码。康卡斯特花了我一年的时间来实现DNSSEC,这对他们来说是很好的。
这是为了解决他们的特殊问题而打补丁的人,他们不会考虑让它变得普遍,或者通常是有用的。
你能谈谈你拒绝的一项重要或困难的贡献吗?原因是什么?-来自我的同事埃里克·邓肯(Eric Duncan)电子邮件:@eduncan911。
一次又一次发生的事情是改变从上游名称服务器收到“无这样的域”回复时的行为。人们希望通过让dnsmasq在第一个返回NXDOMAIN的上游服务器时继续尝试另一个上游服务器来实现本地DNS攻击,但在我看来这似乎是一件非常糟糕的事情:NXDOMAIN是一个无效的答案,而不是返回的失败。
你有一群稳定的贡献者吗,或者基本上只有你一个人(偶尔还有其他贡献者)?
您在邮件列表上相当活跃。2017年第二季度,229条信息中有近80条来自您。你在这个项目上花了多少时间(编码和帮助用户)?
非常多变,而且比我以前少了。我曾经在一家对自由和开放源码软件非常友好的雇主那里工作。我大部分时间都坐在电脑前,我的老板很高兴我把时间花在了dnsmasq上。现在,我是半退休的,我每天都在做其他的事情,所以我不得不腾出时间坐下来做dnsmasq。
自托管设置在Github等人之前就存在了,或者至少在他们可见并被认为是可靠的之前就存在了。它起作用了,所以我从来没有激活能来移动它。我是一个系统管理员,我喜欢有一个主人来做我的事情,我自己的方式。
您的常见问题解答说它可以在Linux、*BSD和嵌入式系统上运行。你听说过使用Dnsmasq的最有趣的平台是什么?
Dnsmasq git存储库中的提交1发生在2004年1月22日,并称它是“dnsmasq-2.0.tar.gz的导入”。您的第一个公开版本(0.4版)是什么时候发布的?那之前你做了多长时间?
大约在2000年左右。1.x系列中有相当多的版本,它们都是在添加DHCP服务器之前发布的。当我搬到吉特的时候,这似乎不值得加进去。
就像所有有15年历史的代码一样,有一些深刻的设计决策和权衡很难改变,但不一定再有意义了。我想做一个3.0版来解决这些问题,但我不确定我是否还有足够的决心去做这件事。
关于谷歌最近贡献的安全修复,你知道他们正在开发dnsmasq吗,或者这些修复是出人意料的吗?
他们在开始之前没有告诉我他们正在开发dnsmasq,但是一旦他们发现了漏洞,他们就会在公开之前很好地告诉我。在这样的情况下会发生一大堆事情,谷歌安全人员真的很擅长帮助解决这个问题。很多事情都在帮助发行版提前准备好打补丁的软件包:我花了很多精力帮助人们将补丁移植到旧版本。
是否采取了任何步骤来进行全面审计,或者这就是谷歌所做的吗?
多年来,在谷歌做这件事之前,已经进行了相当多的审计。SuSE做了一次,Mozilla基金会赞助了一次。谷歌的人使用模糊来寻找审计遗漏的漏洞-这是非常令人印象深刻的。
我计划使用谷歌的服务对新版本进行持续的模糊处理。
在dnsmasq路线图上有什么重要的东西吗?是否有可以添加的内容,或者您现在是否涵盖了所有的DNS/DHCP规范?
我没有涵盖全部规范--美国专利商标法[版]。注意:独特的卖点]是覆盖我的用户需要的部分,而不会带来其他所有东西的膨胀。我猜IPv6地址/名称管理领域仍有可能出现新东西。IPv6总有一天会接管世界,不是吗?
你有没有Patreon、Flattr或其他人们可以捐款的资金来源?
我希望这能帮上忙。请随时提出更多问题,或要求澄清所有答案。
到此为止吧!我非常感谢西蒙抽出时间来做这件事。如果你有问题,可以在评论中提问。
感谢我的妻子校对,感谢我在New Context的同事对问题的想法和反馈。我们在招人!这是一个很好的工作场所!