第五章 配置TCP/IP网络
在本章中,我们将讨论在机器上设置TCP/IP网络所要经历的所有步骤。我们将从IP地址的分
配开始,逐步描述TCP/IP网络接口的配置过程,并且介绍几个在解决网络安装问题时非常有
用的工具。
本章所述的大多数工作通常你只需要做一次。而后,仅当你要向网络中增加新系统时,或者
当你完全重新配置你的系统时,你才会接触许多配置文件。然而,有些用于配置TCP/IP的命
令必须在系统每次引导时都要执行之。这通常是通过在系统的/etc/rc脚本中调用它们来做的
。
一般地,这个过程的网络专有部分包括在称为rc.net或rc.inet的脚本中。有时,你也会看到
名为rc.inet1和rc.inet2的两个脚本文件,前一个用于初始化网络的核心部分,而后者启动
基本的网络服务和应用程序。在本章下面,我将注重讨论后者的概念。
下面,我将讨论执行rc.inet1的作用结果,而应用程序将在后面章节中讨论。在读完本章以
后,你将建立起在计算机上正确配置TCP/IP的一个命令顺序。然后,你应该替换计算机上rc
.inet1里的任何例子命令、确信rc.inet1在系统引导时被执行,并重新引导你的机器。随着
你中意的Linux版本而来的网络rc脚本会给你一个很好的例子。
5.1 安装proc文件系统
有些Net-2版本的配置工具要依赖proc文件系统来与内核进行通信。这是一个使用像文件系统
似的机制以允许对内核运行时信息进行访问的接口。当加载时,你可以象使用任何其它文件
系统一样地列出文件、或显示它们的内容。典型的项包括含有系统平均负载的loadavg文件、
或显示当前核心内存以及交换使用情况的meminfo。
对于此,网络代码添加了net目录。它含有许多文件,这些文件显示象内核ARP表格、TCP连接
状态,以及路由[选择]表。许多网络管理工具从这些文件中取得它们的信息。
Proc文件系统(或者也以procfs而著称)通常在系统引导时被加载到/proc目录上。最好的办
法是将下面几行增加到/etc/fstab之中:
# procfs mont point:
none /proc proc defaults
并且从你的/etc/rc脚本中执行“mount /proc” 。
缺省地,现在procfs被配置进大多数的内核中。如果procfs不在你的内核中,你会得到象这
样的消息:“mount: fs type procfs not supported by kernel”(“加载:内核不支持文
件系统类型procfs”)。你就必须重新编译内核并且在问及procfs支持时回答“yes”。
5.2 安装执行文件
如果你正在使用一个打包之前的(未打包的)Linux发布版本,它将很可能包括主要的网络应
用程序以及实用工具和附带的一组例子文件。你可能必须得到和安装新工具的唯一情况是当
你安装了一个新的内核版本。由于它们有时在内核的网络层中含有更改的情况,你将需要更
新基本配置工具。这起码包括重新编译,但有时也可能需要获得最新的执行文件组。这些通
常和内核一起发行,以文档的形式打包并切称为net-XXX.tar.gz,这里XXX是版本号。与Lin
ux 1.0相匹配的是0 .32b,在本书写作时的最新内核(1.1.12及以后)需要0.32d。
如果你想自己编译并且安装标准TCP/IP网络应用程序的话,你可以从许多Linux FTP服务器上
获得原程序。这些是或多或少从Net-BSD或其它原程序经过大量修正的程序版本。其它的应用
程序,比如Xmosaic、xarchie、或Gopher以及IRC客户程序必须分别地获得。其中大多数程序
如果按照说明编译,则与盒装版本的一样。
官方的Net-3的FTP站点是sunacm.swan.ac.uk,镜象站点在sunsite.unc.edu下的system/Net
work/sunacm。最新的Net-2e补丁程序以及执行程序在ftp.aris.com。Matthias Urlichs的起
源于BSD网络代码的程序在ftp.ira.uka.de.in /pub/system/linux/上有。
5.3 另一个例子
在本书的余下部分,让我介绍一个新的例子,这个例子要比Groucho Marx大学的例子简单,
并且可能更加接近你实际要遇到的问题。考虑虚拟酿酒厂(Virtual Brewery),一个小型的
酿造―正如名称指出的那样--虚拟啤酒的公司。为了更有效地管理好他们的生意,虚拟酿酒
人想要将他们的计算机连网,这些正好都是运行bright and shiny 1.0(明亮与闪耀1.0)的
PC机。
在同一楼层上恰好穿过大厅的地方,有一家工作与之相近的葡萄酿酒厂。他们有一个自己的
以太网。很自然地,一旦他们的网络开始正常运作时,这两家公司就想将他们的网络连接起
来。作为第一步,他们想要设置一台用于在这两个子网之间转发数据报的网关主机。接下来
,他们也想有一个与外界世界联系的UUCP链接,通过这个连接,他们就能交换邮件和news了
。最后,他们也希望安装一个SLIP连接以便有时能连接到Internet上。
5.4 设置主机名(hostname)
绝大多数情况下―如果不是全部的话,网络应用程序要依赖于合理地设置本地主机名。这通
常是在引导过程通过执行hostname命令来完成的。如要将主机名设置成name的话,它的调用
如
# hostname name
使用一个与任何域名都无关的任意的主机名也是常有的事。例如,虚拟酿酒厂的主机可能叫
做vale.vbrew.com、vlager.vbrew.com等等。这些是它们正式的、全资域名。它们的本地主
机名将是这个名字的第一部分,如vale。然而,由于本地主机名常常用来查找主机的IP地址
,你就必须确信解析库能够查找到该主机的IP地址。这通常意味着你必须将这个名字写入/e
tc/hosts中(见下面)。
有些人建议使用domainname命令来设置内核意义上的域名为FQDN的余下部分。这样的话,你
可以组合hostname和domainname的输出来再次得到FQDN。然而,这最多对了一半。Domainna
me一般用来设置主机的NIS域,这可能与你的主机所属的DNS域完全不同。NIS将在第十章中讨
论。
5.5 分配IP地址
如果在你的主机上为单机操作配置连网软件(例如,为了能够运行INN网络新闻软件),你可
以安全地跳过本节,因为你只需要为回送(loopback)接口分配一个接口,它总是127.0.0.
1。
而对于象以太网那样的真实网络来说,事情就有一些复杂。如果你想将你的主机连接到一个
现成的网络上,你就必须要求该网的管理员给你一个这个网络的IP地址。当整个网络都是由
你自己来设定时,你就必须按如下描述自己来分配IP地址。
在一个本地网络内的主机通常应该有相同的逻辑IP网络地址。因此,你必须分配一个IP网络
地址。如果你有几个物理网络,你或者必须给它们分配不同的网络号(网络地址),或者使
用子网技术将你的IP地址范围分割成几个子网。
如果你的网络没有连接到Internet上,你可以自由地选择任何(合法的)网络地址。你只须
确信选择了A类、B类或C类中的一种,否则的话事情可能会工作得不正常。然而,如果你打算
近期连接Internet,你现在就得获取一个正式的(官方的)IP地址。进行的最佳方法是是请
求你的网络服务提供商帮助你。如果你想获取一个网络地址只是因为万一某天你可能连上In
ternet,从hostmaster@internic.net要一张网络地址申请表。
为了操作几个以太网(或其它网络,一旦有了驱动程序),你必须将你的网络分隔成子网。
注意,只有当你有多个广播网络(broadcast network)时,你才需要应用子网技术;点对点
的连接不算在内。例如,如果你有一个以太网,并且有一个或多个SLIP链接到外部世界,你
无需分割你的网络。其理由将在第7章中给出。
作为一个例子,酿酒厂的网络管理人员向NIC申请了一个B类网络号,得到191.72.0.0。为适
应两个以太网,她决定使用主机部分的8个比特作为额外的子网比特位。主机部分剩余的8个
比特,允许每个子网有254台主机。然后,她将子网号1给了酿酒厂、子网号2给了葡萄酒厂。
这样他们的网络地址分别为191.72.1.0和191.72.2.0。子网掩码是255.255.255.0。
在两个网络之间的网关vlager,在它们两边都分配给它主机号1,这分别给了它IP地址191.7
2.1.1和191.72.2.1。图5.1 示出了这两个子网和网关。
注意,在这个例子中,我使用了一个B类网络来使得事情简单化;而一个C类网络将更现实些
。有了新的网络代码,子网的分割并不限于字节边界,所以,即使是一个C类网络也可以分割
成几个子网。例如,你可以使用2比特的主机部分作为网络掩码,就可得到四个可能的子网,
每个子网可以有64台主机。[1]
5.6 编写hosts和networks文件
在把你的网络分成子网以后,你应该使用/etc/hosts文件为某些简单的主机名解析作些准备
。如果你不打算使用DNS或NIS来作地址解析,你就必须将所有的主机名写入hosts文件中。
图5.1 虚拟酿酒厂和虚拟葡萄酒厂―两个子网。
即使你在正常操作期间想运行DNS或NIS,你仍然会将一些主机名写入/etc/hosts文件中。一
个原因是,即使没有网络接口正在运行,你还是会想有一些名字解析功能,例如,在系统引
导期间。这不但是为了方便,而且也允许你在rc.inet脚本中使用符号主机名。这样,当更改
IP地址时,你只需将更新过的hosts文件拷贝到所有机器上并且重新启动机器即可。而无需去
分别编辑大量的rc文件。通常,你应该将所有本地主机名和地址放入hosts,加入用到的任何
网关和NIS服务器的名称和地址。[2]
同样,在最初的测试阶段,你应该确信你的解析器只使用到hosts文件中的信息。你的DNS或
NIS软件