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

目前还没有读者喜欢这个。
Is Occupy Wall St. really an "open source protest?"

Opensource.com

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

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

我不反对任何人指出任何这些。事实上,我自己就指出了所有这些,而且通常是在前几段中。但是,让我摇头的是常见的抱怨:“这将非常不安全,并且会让你被 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 条评论

很棒的文章,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 路由器/家庭服务器。当时,redhat 没有跟上更新的步伐,我可以使用 slackware 构建脚本来编译更新和补丁。我使用仲裁来允许我和我的兄弟共享一个 56K 调制解调器。它并不漂亮,但至少我们俩可以同时浏览互联网。当我升级时,我不再需要仲裁,并且 Fedora 从 redhat 中分离出来,并且升级速度比我跟上构建脚本的速度还要快。我切换到 fedora 并使用我的服务器作为虚拟环境和 DVR (Mythtv)。我在 2010 年购买了一个体面的 i3,它使用来自 CPU 的图形以及 10GB 的内存,并且它工作得相当好。我raid了系统驱动器并为录音提供了一个驱动器。如果我可以降低功耗并保持 vm 和 DVR,那就是我害怕搞砸的唯一平衡行为。但是,BIND、dhcpd 和 iptables(使用 firewalld 实现的全新学习体验)。我还为了好玩而实现了 ipv6 natting。最近开始在 fedora 中实施带有 samba 的 AD,明年即将推出。了解 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 经过正式验证(SPARK 是一个用于正式检查 Ada 程序的工具,请参阅 http://www.spark-2014.org/)

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

老实说,我从未自己使用过这些工具,我也不知道它们维护得有多频繁,但通常平均 Ada 程序比平均 C 程序的错误少得多,并且通常错误很容易被该语言默认插入的检查捕获(例如,你不能有一个“缓冲区溢出”,它会默默地粉碎堆栈)。根据该网站,Ironsides 应该被正式证明没有缓冲区溢出、未初始化的变量和其他便利设施。

你太棒了!

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