为什么我构建了自己的自制 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 网络服务器上运行 Apache。从那时起,我转向了 Samba、BIND、qmail、postfix 以及其他任何引起我注意的东西。

16 条评论

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

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

谢谢吉姆。我现在已经运行 DD-WRT 好几个月了,在阅读了您的文章后,也许我应该重新考虑一下。我有一些备用硬件。这是一个及时的话题,我希望我能去 Southeast Linux Fest 听您的演讲。您给了我一些值得思考的事情。您使用哪种 Linux 版本?

唐,我个人使用 Ubuntu - 部分原因是我更喜欢 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 路由器/家庭服务器。当时 redhat 跟不上更新,我可以使用 slackware 构建脚本来编译更新和补丁。我使用仲裁来允许我和我的兄弟共享一个 56K 调制解调器。它并不漂亮,但嘿,至少我们俩可以同时浏览互联网。当我升级时,我不再需要仲裁,并且 Fedora 从 redhat 分离出来,并且升级速度比我跟上构建脚本的速度还要快。我切换到 fedora 并将我的服务器用作虚拟环境和 DVR (Mythtv)。我在 2010 年购买了一台不错的 i3,它使用 CPU 的显卡,配备 10GB 内存,并且运行良好。我raid了系统驱动器,并有一个驱动器用于录制。如果我可以降低功耗并保持 vm 和 DVR 是我唯一需要平衡的事情,我害怕搞砸它。但是,BIND、dhcpd 和 iptables(用 firewalld 实现,全新的学习体验)。我还实现了 ipv6 natting 以供娱乐。最近开始在 fedora 中实现 AD 和 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 程序的平均错误要少得多,并且通常错误很容易被语言默认插入的检查捕获(例如,您不能有“缓冲区溢出”来静默地破坏堆栈)。根据网站,Ironsides 应该被正式证明可以免受缓冲区溢出、未初始化的变量和其他便利设施的影响。

你是最棒的!

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.