为什么我构建了自己的自制 Linux 路由器

还没有读者喜欢这篇文章。
Is Occupy Wall St. really an "open source protest?"

Opensource.com

在过去的几个月里,我一直在谈论使用标准的 Linux 发行版作为路由器。我曾在 Ars Technica 上写过关于它的文章,我在 Great Wide Open 上做过一次演讲,下周我将在 SouthEast LinuxFest 上再做一次。我必须告诉你,自制路由器是我写过和做过的最具争议的主题之一——有些人喜欢这个想法,但那些不喜欢的人似乎真的、*真的*讨厌它。

公平地说,从通用服务器发行版设置你自己的路由器不是一个适合所有人的项目。无论是在构建过程中还是在完成后,它肯定都不友好。虽然它不是非常 *复杂*,但它绝对是 *神秘* 的,而且一路没有任何指导。如果你还没有非常丰富的 Linux 经验,你可能会感到非常困惑(甚至可能会骂几句)。一旦你完成了构建,你也不会得到一个功能非常丰富的构建版本——除非你对你的构建做了比我更多的努力,否则你不会有花哨的服务质量功能,使用情况图表,或者除了一个简陋的(虽然 *极其* 高性能)路由器之外的任何东西,它可以分配 IP 地址,解析 DNS 记录,连接到互联网,并使数据包到达它们应该去的地方。

我不反对任何人指出这些问题。实际上,我 *自己* 也指出了所有这些问题,而且通常在最开始的几个段落中。但最让我摇头的常见抱怨是,“这会非常不安全,会被 root,这就是为什么你应该运行一个专门构建的路由器发行版。”等等——*什么?*

好吧,让我们谈谈安全问题。安全不是你在事后才附加的东西,也不是用几千行代码构建的东西。安全是一种心态,也是一种 *设计*——它是你从一开始就构建的东西。提高安全性实际上是我首先构建自己的简陋 Linux 路由器的全部原因。

我的职业迫使我对信息安全保持警惕,这就是为什么我首先要构建一个简陋的 Linux 路由器。专有的路由器固件通常要几个月甚至几年才会升级——而且当它 *确实* 升级时,更多的是为了在 UI 中添加一些花哨的东西——更有可能引入 *更多* 的错误——而不是为了修复安全问题。开源固件的情况也好不到哪里去。DD-WRT 是最受欢迎的之一,虽然它每隔几周就会有一个新的(而且错误百出的)测试版发布,但该项目已经八年没有发布过 *稳定* 版本了。八年!pfSense 几乎是业界的宠儿,这是理所当然的——但它仍然是一个庞大而复杂的活动部件堆栈,带有 Web 界面、漂亮的图表以及用于切换的零碎,你永远不可能真正 *知道* 它在做什么——你在 Web UI 中单击这些框,然后假设它正在执行你告诉它的操作,这已经与底层配置的现实相去甚远。而且,在发布固件更新之间也需要几个月(甚至更长时间),而且(同样)不能真正保证更新不会更改 UI 和功能的主要部分,而不仅仅是修复错误。

对于很多人——以及企业,不要误会我的意思——这完全没问题。但对于我自己的个人网络,这已经不够好了。我想要一些 *最简单* 的东西,我可以了解实际配置的每一寸,因为我都是自己编写的。我想要 *真正* 频繁的安全更新,以及主要发行版带来的那种质量保证和测试。那些小型专业路由器发行版必然会落后。

这就是我的 自制路由器 的由来。不,它并不比路由器发行版“更不安全”——它的活动部件要少得多 *得多*,而且我对 *所有* 这些部件都非常了解。除了我实际的配置文件之外,它的每一部分都会每天自动获得安全更新。如果 dhcpd 中存在次要安全问题,它的补丁不会排队等待,直到“有足够的东西可以进行完整的固件升级发布”。它会 *立即* 通过 unattended-upgrades 服务自动获取并修补。

我不必担心是否因为忘记单击正确的复选框而意外地将 Web 界面暴露给外部世界——*没有* Web 界面。同样,我也不必担心 Web 界面中的 *错误* 是否会在我选中某个复选框的情况下执行类似的操作——因为没有复选框,我所做的配置是实际服务的 *真正* 配置,而不是一个抽象的、简化的版本,必须由几千行 PHP 代码来翻译,而审查这些代码的人要少几个数量级。

因此,这让我们回到了自制路由器适合或不适合哪些人的话题。它适合一位不熟悉命令行级别的 Linux 网络(包括 dhcpd、iptables 和 bind)的繁忙管理员吗?可能不适合——他们没有时间处理所有这些。它适合一个不是对这些东西感兴趣的业余爱好者的家庭用户吗?同样,可能不适合——他们会对配置的神秘性(虽然最终很简单)感到沮丧。

自制 Linux 路由器 *确实* 适合一个真正对这些东西如何在底层工作感兴趣的业余爱好者或初级系统管理员。设置和管理它会教会你很多东西。它也很适合一个已经了解大部分系统并且只需要复习一两件事才能感到舒适的资深系统管理员——原始性能简直令人惊叹,而且系统的简单性将使这位资深系统管理员可以自由地以他们已经非常舒适的方式来管理和备份它。最后,它非常适合那些非常担心安全的人(不幸的是,也像我一样),因为其精简的特性使他们绝对 *确定* 他们了解它在做什么和不做什么,并在规划安全设置时相应地进行计划。

如果你是一位感兴趣的业余爱好者或系统管理员,并且认为这听起来像是你想要深入研究的项目——或者甚至认为这听起来完全疯狂,但可能会有趣地 *思考* 一个小时——请今年来北卡罗来纳州夏洛特的 SouthEast LinuxFest!该活动于 6 月 10 日至 12 日举行,我的演讲应该在 6 月 11 日星期六上午 9 点至 10 点 举行。

Jim Salter
我是一名位于南卡罗来纳州哥伦比亚市的雇佣系统管理员。我对开源软件的第一次真正实践经验是在 90 年代末和 2000 年代初期在 FreeBSD Web 服务器上运行 Apache。从那时起,我转向 Samba、BIND、qmail、postfix 以及任何其他引起我注意的东西。

16 条评论

很棒的文章,Jim!对我来说正合时宜。多年来,我一直积极避免构建自己的路由器,因为我宁愿拥有一个不需要维护的东西。我可以管理它,但我在工作中花足够多的时间与计算机争论,我不一定想在家里这样做(或者至少我想按照我自己的方式去做)。但我越来越对我的路由器最近的 DD-WRT 构建的错误感到沮丧,你的帖子又一次推动我咬紧牙关,自己制作一个。

很棒的文章,Jim。虽然我使用 IPFire;但我理解你为什么选择自制的方式。以它自己的方式简单而优雅。你知道你知晓的那种交易。我喜欢它!

谢谢 Jim。我已经运行 DD-WRT 几个月了,阅读你的文章后,也许我应该重新考虑一下。我有一些备用硬件。这是一个及时的话题,我真希望我能去 Southeast Linux Fest 听你的演讲。你给了我一些需要思考的东西。你使用哪种 Linux?

我个人使用 Ubuntu,Don - 部分原因是我更喜欢 Debian 包管理,部分原因是 Ubuntu 提供具有明确支持周期的 LTS 版本。我喜欢知道 14.04 LTS 是在 2014 年 4 月发布的,将在 2019 年 4 月到期,这意味着在 2016 年 4 月我可以选择是否查看升级到 16.04 LTS,如果我选择不升级,在 2018 年 4 月,我有一年的时间需要迁移到 18.04 LTS。

回复 作者:Don Watkins

太棒了(鼓掌)。
1997年我用Slackware构建了我的第一个Linux路由器/家庭服务器。当时,Red Hat的更新速度跟不上,我可以使用Slackware构建脚本来编译更新和补丁。我使用仲裁让我和我兄弟共享一个56K调制解调器。这并不漂亮,但至少我们俩可以同时浏览互联网。随着我的升级,我不再需要仲裁,Fedora从Red Hat分离出来,并且升级速度比我用构建脚本的速度还快。我切换到了Fedora,并将我的服务器用作虚拟环境和DVR(Mythtv)。我在2010年买了一台不错的i3,它使用CPU的图形功能,配备10G内存,并且运行良好。我raid了系统驱动器,并为录音配备了一个驱动器。如果我可以降低功耗并保持虚拟机和DVR的运行,那将是我唯一担心的事情。但是,BIND,dhcpd和iptables(使用firewalld实现,全新的学习体验)。我还为了好玩实现了ipv6 natting。并且最近开始实施AD,明年将在Fedora上实现Samba。到目前为止,了解iptables是最有用的(firewalld只是一种设置它的方法,并且可以用来自动设置紧急模式)

我强烈建议,如果你正在运行自己的服务器,安装类似ossec的东西,不一定非得是这个,但需要某种解决方案来处理攻击,并动态地用阻止或临时丢弃来响应。

甚至没有运行在“通用服务器发行版”上,多年来,我运行一个基于Linux From Scratch(一台机器,我根据书中的说明手动编译所有东西)构建的路由器,它运行良好,从未失败,但管理或做任何花哨的事情都很痛苦。对于我的下一个路由器,我切换到了pfSense,为了方便和易于更新。

去看看BSDRP吧... 它是为任何和你持有相同观点的人制作的。而且就性能而言,它是一头野兽。

很棒的文章。很久以前我就感到沮丧,并在一个旧的Fedora Core release 4盒子上做了类似的事情。我很惊讶它有多么实用。已经运行了大约10年。但是,我需要分解并升级它。因为它有点耗电,并且使用标准IDE驱动器。IDE驱动器的寿命就是这样,是时候了。重新设置感觉就像心爱的宠物去世一样。这篇文章很棒,因为我可以看到我需要去哪里。很棒的工作伙计们!感谢你们的激励。

我的也相当耗电,但由于我将它用作DVR和家庭服务器,我不确定升级后能有多大改善。诚然,我的比你的新得多,但我不想在升级效率时失去功能。

回复 作者:rwilcher

我的自制产品运行功率为9.2W,通过将其插入Kill-A-Watr进行测量。

回复 作者:Jeff Sadowski (未验证)

我也决定自己构建。我还买了一台Lamobo R1,因为我确实不信任Intel架构。我运行一个最小的Debian 8系统,带有4.5.5内核,我杀死了大多数服务,包括视频和wifi(另一台机器,一个经过严重修改的openwrt给我提供wifi)。我在那里运行我的VPN IPsec服务器+asterisk+防火墙+NAT+DHCP+一个带有RPZ的DNS服务器,它可以切断恶意软件和广告。我还通过dnscrypt与外界通信,因此我的DNS请求无法被记录/修改。我偶尔也会在上面运行tor服务。我不向外界公开任何服务,除了IPsec。即使通过SSH登录或使用voIP服务,我也必须通过VPN进入。我对设置非常满意,并且所有更新都已完成。

如果你想要强大而安全的软件,你可能会对两个基于Ada的项目感兴趣

* Ironsides (https://news.ycombinator.com/item?id=7553019) 一个“权威/递归DNS服务器对”,使用SPARK正式验证 (一个用于正式检查Ada程序的工具, 参见 http://www.spark-2014.org/)

* ADHCP (https://www.codelabs.ch/adhcp/), 一个用Ada编写的DHCP实现

老实说,我从未亲自使用过这些工具,也不知道它们是否得到了积极的维护,但通常平均的Ada程序比平均的C程序错误要少得多,而且通常bug很容易被语言默认插入的检查捕获(例如,你不能有“缓冲区溢出”在堆栈上静默粉碎)。根据网站,Ironsides应该被正式证明是免受缓冲区溢出、未初始化的变量和其他便利设施的影响。

你是最棒的!

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.