通过互联网升级 Linux
作为一家提供软件国际化服务的企业,我们在马萨诸塞州西部运营着一家小型办公室,并在中国台湾台北市拥有一家小型姊妹公司。我们还需要为远程工作的工程师提供分布式软件开发环境。虽然我们的带宽需求不大,但我们确实需要可靠的电子邮件、Web、新闻和 FTP 服务。该连接主要用于提供办公室内部到互联网的连接,并且必须在 24/7 的基础上为远程用户的外部访问提供可用性。
该网络由各种 UNIX 工作站和运行 Windows 95 和 Windows NT 的 PC 组成,用于软件开发和支持以及常用的办公应用程序。我们使用运行在基于 Intel 的 PC 上的 Linux 作为我们的网络服务器,因为它提供了最具成本效益的小型企业网络服务器解决方案之一。该网络使用来自 192.168.*.* 块的专用 C 类互联网地址,因为它没有直接连接到互联网。
我们的内部 Linux 服务器,配备 Pentium 133MHz 处理器、Adaptec 2940 SCSI 卡、一堆 SCSI 驱动器和一个 4mm DAT 磁带驱动器,构成了我们计算基础设施的骨干。作为一个邮件枢纽,它为网络上运行的邮件客户端应用程序提供 POP3 和 SMTP 支持。通过运行 Samba,它充当基于 Windows 的 PC 的网络文件服务器。最后,它使用 BIND 提供域名解析服务。
这台“动态二人组”中的第二台 Linux 服务器,是一台旧的 486 PC,配备 500MB 硬盘和单色显示器,是我们的外部网关机器。它通过与本地互联网服务提供商的持久 PPP 连接(静态 IP 地址,通过 28.8K 拨号电话线)将我们连接到互联网。这台机器还充当拨入服务器和防火墙。它提供往返内部邮件枢纽的电子邮件中继和垃圾邮件过滤器。这台机器还提供 HTTP、FTP 和 NNTP 代理服务,以允许内部用户访问这些互联网资源。
这两台 Linux 机器都运行 Debian 1.3 版本。在互联网防火墙机器上,您希望精确控制机器上加载的软件。您希望使用完成工作所需的最低限度的软件,不多不少。由于这台机器要进行远程管理,因此更重要的是,它可以轻松地根据需要升级各个软件包,而无需为新的操作系统版本进行冷安装。Debian 的 dselect/dpkg 软件管理系统在这种情况下非常理想。我们可以轻松选择运行系统所需的软件,并且知道所有先决条件软件包都已包含在内。此外,Debian 大量的软件包几乎包含了我们所需的一切,并且采用了方便的 dpkg 格式。
Debian Linux 可以从 http://www.debian.org/ 或许多镜像站点免费下载。在我们的案例中,我们从 Linux Software Labs 购买了一张 CD-ROM,这也让我们能够轻松地为 Debian 项目做出贡献,我们非常感谢他们的工作。
台北办公室使用 Linux 网关连接到互联网,但配置却大相径庭。我们从台湾 ISP 处获得了一个 C 类地址块,他们宣布了一条通往这些地址的路由。网关机器运行着一个公共可访问的 FTP 服务器、HTTP 服务器和邮件枢纽,以及作为我们在台湾域的主要公共域名服务器——所有这些都使用一个非常旧版本的 Caldera Linux。
当美国办公室的服务器机器上的操作系统升级以利用 Linux 2.0 中的新功能时,似乎是升级台湾系统以及重新配置网络以更紧密地匹配美国办公室网络的好时机。
虽然该项目看起来足够简单,但问题是这项工作必须从太平洋彼岸一万英里之外通过互联网完成。
远程升级 Linux 机器,尤其是跨越大洋,需要一些提前规划。我们需要处理的一些问题是
使用哪个 Linux?
安全问题是什么?
我们是要设置私有网络和公共网络吗?
我们对第一个问题的选择是继续使用 Debian Linux 1.3 版本。它与我们在马萨诸塞州运行的版本相同,因此我们基本上可以安装美国系统上的副本,为台湾的不同名称和地址重新配置它,然后一切就绪。
由于升级要通过互联网完成,因此安全是一个主要问题。我们需要从美国到台湾的安全连接,以便登录名和密码不会泄露给互联网窃听者和以太网嗅探器;因此,我们选择了 Secure Shell (SSH) 软件包。由于美国的出口限制,我们无法直接从马萨诸塞州上传软件,因此我们从台湾 FTP 站点将 SSH 软件包的源代码下载到台北办公室的 Linux 机器上。然后我们编译并安装了它,以便安装/升级可以安全地进行。
虽然我们的美国设置只需要服务于内部网络,但我们的台湾业务部门决定他们需要设置一个区域以允许公共 Web 和 FTP 访问。为了在不损害内部网络安全的情况下做到这一点,必须以稍微不同的方式进行设置。
台湾的 C 类地址块(由他们的 ISP 分配)被内部机器和防火墙使用。我们设计了一个网络设置,包括使用这些地址创建的公共可访问网络,供公共 HTTP 和 FTP 服务器使用。其余机器连接到私有网络,再次使用来自 192.168.*.* 块的地址,就像在美国办公室一样。然后,防火墙机器配置了第二个以太网接口:一个将外部 PPP 连接连接到公共可用网络,另一个连接到私有网络。然后,我们使用 Linux 内核的 IP 防火墙功能来保持网络流量在其所属的位置。
台湾办公室已经有一台名为“dragon”的可运行网关 PC。我们没有在使用它来提供连接时升级它,而是将第二台机器“dolphin”确定为新的网关机器。这样,我们可以确保升级成功后再将其投入使用,并且在升级失败的情况下,它为我们提供了一个后备位置。由于 dragon 的名称和地址在我们的控制范围之外的 DNS 映射中,并且过去与本地 ISP 的协调已被证明是不方便的,因此我们必须在继续之前交换机器的身份。
由于新的 dragon 将为公共网络和私有网络提供服务,因此安装了两张网卡。选择了简单的跳线式 NE-2000 兼容卡,以便可以轻松配置其 IRQ。为了让我们的系统管理员通过互联网登录到 dolphin,我们在其上安装了一个最简化的 Caldera Linux 系统。最后,dolphin 连接到本地网络。
由于新的防火墙机器不再充当网络的邮件枢纽,因此指定了一台现有的运行 Linux 的服务器“elephant”。Sendmail 和 POP3 服务器安装在 elephant 上。Dragon 被重新配置为中继进出域的电子邮件,而不是充当枢纽。Elephant 也被配置为充当内部网络的 DNS 服务器,dragon 作为转发器,因为 elephant 将不再直接连接到互联网。反过来,dragon 被配置为继续充当域对外部世界的主要 DNS 服务器,同时使用 elephant 作为其解析器。这样,只有公共可访问的机器名称和地址才能从互联网上看到,而 dragon 将继续能够解析所有内部地址,包括公共地址和私有地址。
在进行远程升级时,会出现两个问题
必须尽可能避免中断互联网访问。
必须有人员在场充当远程助手,以应对不太可能发生的新机器在升级过程中挂起或变得无法访问或无法启动的情况。
为了避免中断,我们决定在台湾的周末进行升级。由于马萨诸塞州和台北之间存在完全 12 小时的时差,因此商定升级将于美国东部时间星期五晚上 8 点或台湾时间星期六上午 8 点开始。在机器准备好重启之前,工作人员不必在台湾办公室上班。
在此之前,来自马萨诸塞州机器的 root、/usr 和 /var 文件系统的 gzipped tar 文件已在台北时间星期五晚上通过 FTP 下载到台湾办公室。下载、构建和安装 SSH 的练习也是在这个时候完成的。
美国升级人员和台湾工作人员之间的沟通是必要的。为了避免拨打昂贵的长途电话(尽管我们仍然产生了 200 多美元的电话费),除非必要,否则我们决定尽可能使用计算机通信。延迟排除了电子邮件作为可能的选择。我们选择在 talk 工作时使用 talk,否则使用 write。
我们首先向目标机器的磁盘添加分区。为了容纳新的 root、/usr 和 /var 文件系统,使用 fdisk 创建了三个新分区。接下来,需要重新启动以确保新的标签生效,以便可以创建新的文件系统并恢复 tar 文件。我们使用 rdev 在内核中设置新的根设备,以便它准备好启动新安装的操作系统。然后我们需要本地化机器,更改机器的名称和地址以匹配台北办公室网络。
在这项工作的中间某个时候,台北时间是中午。在向美国升级人员发送警告说明后,告知他们如果发生故障,一个小时内没有人会在那里重启机器,台湾工作人员就去吃午饭了。
台北人员从午餐回来后,又过了两个小时,事情才几乎准备就绪。DNS 映射从 dragon 复制过来,因此机器可以准备好直接作为域的主要域名服务器。
那时,dolphin 被重新启动到新安装的系统中——一切似乎都很好。此时马萨诸塞州也已经是第二天早上 3 点了。我们现在准备将新的 dragon 连接到互联网。
首要任务是在执行物理切换之前切换旧 dragon 和新 dragon 的名称和 IP 地址。文件 /etc/hosts、/etc/hostname 和 /etc/init.d/network 都包含对需要更改的主机名和 IP 地址的引用。完成后,调制解调器从旧 dragon 上拔下并插入新 dragon,是时候全力以赴了。
Dragon 通过专用租用线路连接到 ISP。它的调制解调器设计用于 2/4 线租用线路电路,并且是只要插入电话线就会自动连接到 ISP 的类型。
我们屏住呼吸,等待新的 dragon 连接。但我们得到的却是一些屏幕的错误消息。Dragon 的调制解调器有一个大型 LCD 显示屏,指示调制解调器已在线,因此问题一定出在配置中。此时马萨诸塞州是凌晨 4 点。
我们将一切切换回原样,以便我们的升级人员可以登录并找到问题。但我们现在意识到,我们必须让我们的升级人员去睡觉,因为他在打字时打瞌睡。我们决定第二天早上台北时间继续升级。
幸运的是,事实证明问题很简单:我们没有正确配置路由表。在修复此问题后,新的 dragon 能够顺利启动,我们能够在那天晚上早些时候派遣我们的升级人员去睡觉。
在我们的升级人员去睡觉并且我们启动并运行系统后,是时候确保每个人的 Web 浏览器和电子邮件继续工作了。由于内部网络现在位于私有 IP 上,因此所有内部 UNIX 和 Windows 计算机的 IP 地址都必须更改为 192.168.*.*。Web 浏览器还必须重新配置为在 dragon 的新私有 IP 地址上查找 Web 代理服务器。最后,必须重新配置电子邮件客户端以从新的邮件服务器 elephant 查找 POP3 服务器。
由于从互联网访问内部网络是通过使用一次性密码,因此必须检查此特定系统。最后,我们还希望从网络的公共端提供网页服务,因此在防火墙工具包配置中插入了一个插件,用于运行 IIS(Internet Information Server)的 Windows NT 机器。有一段时间,该插件无法可靠地工作——也就是说,直到我们发现我们不小心弄乱了名称表。修复该问题后,我们拥有了台北办公室所需的所有工作部件。
我们最终希望用 IP 伪装替换 fwtk。这使得从内部网络访问网络更加方便。我们确实有一个测试网络,它一切正常,因此我们将在不久的将来在马萨诸塞州办公室部署它。我们希望能够为公司、测试和内部用途制作多个公共 Web 服务器。这些可以是 UNIX 或 Windows NT 机器。Linux 内核的 IP 转发功能应该可以使此过程相当轻松。

