Linux 路由器项目

作者:David Cinege

如果你构建它,他们就会来... 以下定义可以在 http://www.linuxrouter.org/ 找到;然而,LRP 需要比这更详尽的解释

Linux 路由器项目 (LRP) 名词。一个以网络为中心的 Linux 迷你发行版。LRP 足够小,可以放入单张 1.44MB 软盘中,并且使构建和维护路由器、终端服务器以及典型的嵌入式网络系统变得近乎简单。

LRP 的开始源于我对学习 Linux 的强烈渴望。在破坏了 Slackware 的安装并实际安装了 Debian 1.0 之后,我终于对正在发生的事情有了一些了解。我计划深入研究 TCP/IP 网络,并决定我需要一个专用的互联网连接,为此我需要一个路由器。当然,我可以购买路由器,但这太容易了(而且,我太抠门了)。所以我说,“嘿,让我们自己构建一个。这将是浪费无数时间的好方法——哦,我指的是学习 Linux。”

在我寻找关于使用 Linux 构建路由器的信息的过程中,我实际上找不到任何人制作出我脑海中想的东西。要么他们在硬盘上使用完整的发行版,要么在软盘上使用一些非常小的东西,以至于需要第二台完整的机器来配置磁盘。我决定尝试自己制作这个独立的“迷你系统”。我从 Debian 1.1 的最小基本安装开始,总共约 35MB,然后开始削减(并修复我破坏的东西),直到它降至约 3.2MB。这足够小,可以作为 gzipped initrd 映像放入 1.68MB 软盘中。它并不漂亮,但它确实作为我 33.6K 线路的路由器完成了工作,最终升级到了 ISDN。

几个月后,我想把我制作的东西变成一个更通用的系统供其他人使用。我在 Usenet 和一些私人列表上发出了呼吁,然后开始了一个由少数感兴趣的人组成的邮件列表。剩下的,正如他们所说,就是历史了。该邮件列表现在超过 600 个名字,每天至少有 25 个新的 LRP 下载。这一切都是在 LRP 仍然基本未做广告的情况下发生的。

我单盘的临时解决方案已经演变成一个模块化的微型操作系统。它为几乎任何你想构建的“轻量级”、安全、高效的用途提供了一个有能力的基础平台:从路由器到终端服务器,从迷你 Web 服务器到 DNS 缓存,甚至门铃。(不,我不是在开玩笑。)

LRP 的定义

首先,Linux 路由器非常小。基本根文件系统只有 2.5MB,压缩后只有 830KB。加上内核,它可以轻松放入 1.44MB 软盘中,并留有数百 KB 的空间用于内核模块和其他软件包。Zip 或 LS-120 将提供看似无限的空间。闪存 RAM 也可以使用,像 Sandisk 和 M-Systems 这样的公司生产支持 Linux 的产品。

LRP 的根文件系统包含在一个 gzipped tar 存档中。目录 /etc (etc.lrp)、/var/log (log.lrp) 和 /lib/modules (modules.lrp) 被分解成它们自己的存档,以便于备份。在启动时,Linux 内核在 /dev/ram0 上动态创建一个 MINIX 文件系统,并将其挂载为 / (根)。然后它解压缩根存档 (root.lrp),将其存储在 / 目录中,然后继续执行 linuxrc。linuxrc 设置基本根文件系统(如创建 /dev),然后尝试挂载启动设备并安装任何剩余的软件包(如 etc.lrp、log.lrp 和 modules.lrp)。剩余的启动过程与典型的完整 Debian Linux 安装非常相似。

系统将从 RAM 磁盘固态运行。这意味着你所做的所有更改都必须备份到启动介质。这不是一项困难的任务,因为它完全由脚本自动化,这些脚本可以从 /var/lib/lrpkg 目录中找到的软件包列表文件中重新创建根软件包和附加软件包。lrcfg 是一个菜单系统,为你提供了一个友好的界面,用于软件包备份系统以及配置文件和(最少的)在线帮助。

请注意,LRP 必须从 RAM 运行。只需将根存档和软件包存档转储到硬盘分区并绕过“嵌入式” RAM 磁盘功能即可。

LRP 中包含的内容

如果你应该进入命令行,你会发现 ash 作为你的默认 shell。ash 支持完整的 Bourne shell 脚本,并且几乎整个 LRP 基础都是完全可定制的 shell 脚本。在 shell 级别移动,很难分辨你没有在使用完整的发行版。

一些更精细的细节包括完整的 SysVInit、cron、libc6 (glibc) 和 sed。系统和二进制文件通常与当前的 Debian 版本保持同步更新。超过 60 个命令以最小或模拟形式提供(使用 ash 和 sed):cat、cp、dmesg、dd、grep、cut、passwd、gzip、tar、tail、mnc (mini-netcat) 等。当然,所有标准和许多扩展的网络命令和守护进程也可用:route、netstat、ipfwadm、ipautofw、ipportfw、inetd、telnetd、tftpd、routed 等。Anthony 的编辑器 (ae) 用作你的编辑器。

如果这还不够,你还可以加载 Secure Shell、pppd 2.3.5、Portslave RADIUS 客户端、gated、snmpd 等。附加软件包,如 minicom 和 bash 2.0 也可用。附加软件包安装一次,并在备份时与根存档合并,这与保持 автоном 的完整软件包不同。

Slackware 用户几乎可以手动塞入任何其他东西。请记住,LRP 是真正的 Linux——只是更小。它能够运行完整发行版可以运行的任何东西,前提是有库和空间。

LRP 的用途

按照设计,LRP 旨在用于低级网络应用。在某种程度上,标准的 Linux 2.0 LRP 内核编译了几乎所有网络选项和几个增强补丁(例如,ipportfw)。接下来是基本版本中可用的默认功能的简短列表。理解这些功能适用于 Linux 可以使用的任何接口类型,从调制解调器到无线 T1。

  • 完整的 IP 路由,具有无编号 IP 和多 IP 接口

  • 完整的防火墙和 IP 记帐

  • 流量整形(低速链路)

  • IP 和端口 (TCP/UDP) 重定向,具有透明代理和 IP 负载均衡

  • 扩展的通用 NAT(IP 伪装)作为防火墙规则

  • 媒体不敏感的接口负载均衡 (EQL)

  • RIP、OSPF、BGP 和其他路由协议(通过 gated 和其他软件包)

  • IPX 和 AppleTalk 支持

除了这些核心功能之外,Linux 路由器单元对于许多服务器应用来说也是非常可行的。最流行的应用之一是使用 Portslave RADIUS 客户端软件 (pslave.lrp) 来托管入站互联网接入调制解调器池,这为你提供了像流行的 Livingston Portmaster 系列一样的功能。Bind 已打包 (bind.lrp),并且作为辅助甚至主 DNS 都做得很好。Boa (boa.lrp) 和 thttpd (thttpd.lrp) 都是小型 Web 服务器,可以放入 1.44MB LRP 磁盘中。Apache 虽然现在没有打包,但可以手动安装。

在客户端方面,VNC 软件包将为你提供一个单盘 Windows 终端。XFree86 尚未打包,但肯定会打包,从而可以轻松创建 X 终端。Linux 路由器也是从远程 NFS 或 SMB (Samba) 服务器挂载文件系统的工作站的良好基础。

理解 Linux 路由器不是解决你所有计算需求的方案。如果你是互联网服务提供商,或者作为内核黑客的开发机器,你不会想将其用作你的主要 Web 服务器。但对于备份服务或功能需求非常具体(且管理技能稀缺)的情况,它是一个高效且稳妥的选择。

LRP 的优势

虽然 “最小” 安装的 Debian Linux 可能有超过 5000 个文件,但你很幸运能在功能丰富的 LRP 中突破 500 个。这对管理和安全的影响是显而易见的;整个系统可以在不到一分钟的时间内备份和恢复。

这种最小的占用空间与 RAM 磁盘操作相结合,大大提高了运行性能,并减少了所需的硬件。最普通的 16MHz 386SX,配备 8MB 内存、1.44MB 软盘且没有显卡,就可以满足大多数人对轻量级路由工作的需求。很少有人需要超过 486 级别的 CPU;然而,由于低端奔腾级机器如此便宜,这样做当然是有意义的。

此外,使用这种默认的 RAM 磁盘方法,很难留下无法使用的系统。文件系统损坏?断电重启。一切都崩溃了?断电重启。黑客入侵?安装你的备份(在 30 秒内)并断电重启。

人们似乎忽略的从 RAM 磁盘运行的另一个优势是,通常,它不会损坏。假设你有 250 个工作站,只有一条通往外部世界的路径。你希望这条路径依赖于像硬盘驱动器这样的机械设备吗?可能不想。如果路由器位于你和你的 Quake 游戏之间呢?绝对不想。

与其他 Linux 系统相比,使用 LRP 的许多原因包括:通过使用安全 shell 和安全复制 (ssh, scp) 的高强度加密完全可管理,巨大的路由功能超集和开源。这些是大多数商业解决方案无法企及的。

定位 LRP

到现在,我相信你可能很兴奋地想尝试一下 Linux 路由器。由于现在制作磁盘比以往任何时候都更容易,你应该这样做。

开始所需做的只是在你的启动介质上创建文件系统并安装启动加载程序。最常见的选择是 MS-DOS (FAT) 和 Peter Anvin 的 SysLinux。GRUB 也是一个不错的启动加载程序。LILO 通常是一个较差的选择,因为与前两者不同,它无法动态地按名称搜索内核,如果你更改内核,LRP 不会提供 LILO。默认的 syslinux.cfg 和 syslinux.dpy 文件可在 LRP ftp 站点上找到。

可以在 kernel*.tar.gz 存档中找到支持 LRP 的内核。根据需要选择 FPU(浮点单元)或非 FPU 内核,并将其复制到磁盘中,命名为 “LINUX”。

复制基本软件包和任何其他软件包;root.lrp、etc.lrp 和 log.lrp 是必需的。如果你使用的是带有模块的内核,也需要 modules.lrp,就像提供的 LRP 内核一样。

最后,你必须更新启动时传递给内核的选项,通常称为启动加载程序的 “append” 行。一个示例 syslinux.cfg 文件如下所示

display syslinux.dpy
append=load_ramdisk=1 initrd=root.lrp \
initrd_archive=minix ramdisk_size=4096 \ root=/dev/ram0
boot=/dev/fd0,msdos \
LRP=etc,log,modules

append= 之后的选项对于你使用的任何启动加载程序都是通用的。LRP 特定的选项是

  • initrd_archive=minix:initrd_archive 是内核功能,允许你使用 tar.gz 存档而不是原始映像。为了使用 LRP,需要此内核补丁。

  • boot=/dev/bootdev[,fs]:这是你从中启动的设备名称。它是 linuxrc 将尝试挂载以安装任何剩余软件包的设备。可选地,你可以指定挂载尝试的文件系统。boot 行是半可选的。linuxrc 有一个备份设备列表,可以尝试挂载。它在 /proc/filesystems 中查找可用的文件系统。使用 boot= 可以加快启动过程,并确保在使用奇怪的启动设备时进行挂载。

  • LRP=etc.lrp,log.lrp[,modules.lrp][,package1] [,package2]...:这些是 linuxrc 应尝试在启动时加载的软件包。请记住,root.lrp 由启动加载程序的 initrd 功能加载,因此 etclog 是此处列出的第一个软件包。

如果你的目标只是一个 1.44MB LRP 软盘,FTP 站点包含这样一个磁盘的原始 “傻瓜映像”。它已完全准备好 syslinux 和非 FPU 内核;只需使用 dd、cat 或类似的实用程序将映像写入软盘即可。

准备好你的基础之后,你必须添加所需的内核模块。通常,人们通过启动 LRP 磁盘、挂载第二张软盘、将模块从该软盘复制到 /lib/modules、编辑 /etc/modules,然后使用 lrcfg 备份模块软件包来完成此操作。听起来太难了?请参阅 http://www.linuxrouter.org/modmaker/ 以获取模块生成系统。只需选择你想要的功能和硬件的模块;它将创建一个 modules.lrp,其中包含模块、它们的依赖项以及配置为加载所有模块的 /etc/modules 文件。

启动并登录后,将启动 lrcfg 以帮助你找到需要编辑的文件。基本软件包和附加软件包的配置文件是自文档化的。你应该只需几分钟即可获得一个工作系统。

难度和支持

对于有一定 UNIX 网络经验的人来说,LRP 真的像听起来一样容易。但是,对于缺乏这些基本技能的人来说,可能会有困难。尽管如此,它并不可怕,据了解,普通的 Linux、MS-DOS 或 MS Windows 用户无需任何帮助即可完成整个任务。

邮件列表能够帮助大多数人克服他们遇到的任何障碍。如果一切都失败了,Paul Wouters (paul@xtdnet.nl) 和我目前都为那些需要扩展设置帮助的人提供商业支持。

商业产品

据了解,Linux 路由器在世界各地都在使用。我知道有几位顾问专门使用它为其客户联网。它也正变得在垂直应用中流行,并且已经在控制系统和电力交换站中被发现。

Onyx Systems (http://www.onyxsys.com/) 正在开发一款完全基于 LRP 的中档模块化路由器和终端服务器产品。期待它在本文发表前后出现。这是我发现的使用 Linux 路由器的最具冒险精神的应用(有点像 Cisco 2524 和 Portmaster 3 的混合体)。它也是同类产品中的第一个开源产品——多么令人兴奋!当你需要具有商业支持的可靠硬件时,请记住它。

有传言称,Corel 一直在考虑将 Linux 路由器移植到 ARM 以用于仅 FlashRAM 的 NetWinder。这个项目听起来也有很多可能性。

开发

在撰写本文时,2.9.4 刚刚作为不稳定版本发布,使我们更接近稳定的 3.0 版本。我仍然亲自处理所有核心 LRP 开发,并且可以使用更多人来帮助加快基础开发速度。制作 LRP 软件包非常容易,我希望看到更多人贡献它们。如果你有技能并且有兴趣提供帮助,请加入邮件列表 (linux-router@linuxrouter.org)。

资源

Dave Cinege (dcinege@psychosis.com) 是一名电子和计算机工程师。他缺乏任何甚至略微类似于社交生活的东西。当不进行黑客攻击(这种情况很少见)时,他通常会阅读技术书籍、幽灵传说或争论无政府资本主义的美德。除了有资格成为一个真正可悲的个人(对于不了解的人来说),他是你可能遇到的最多才多艺的人之一。

加载 Disqus 评论