分类: LINUX
2012-12-11 00:13:43
在本章中,我们将引导大家在自己的机器上实施设置 T C P / I P 联 网 的 全 部 必 要 过 程 。 首 先 从 I P 地址的分配入手,再谈谈 T C P / I P 网 络 接 口 的 配 置 , 随 后 针 对 网 络 安 装 过 程 中 容 易 出 现 的 几个问题,为大家介绍几个方便易用的工具。
本章涵括的任务大多只须执行一次。然后,只有在将新系统添加到自己的网络中时, 或重新全盘配置你的整个系统时,才有必要接触到大量的配置文件。但是用于配置 T C P / I P 的命令中,有些是每次启动系统时,都必须执行的。通常从 s y s t e m / e t c / r c 脚 本 中 调 用 这 些 命 令。
注意 系统初始化脚本有两大主要派别:BSD风格和SysV init风格。Res Hat Linux采用 的是修正过的 S y s V风格的初始化进程。这里的 r c 脚本和命名约定引用的是 B S D 风格的 初始化进程。
通常,初始化进程的网络专有部分包含在一个名为 r c . n e t或 r c . i n e t 的 脚 本 中 。 有 时 , 还 可 能看见两个脚本,其名分别为 r c . i n e t 1 和 r c . i n e t 2 , 前 者 初 始 化 联 网 的 内 核 部 分 , 后 者 开 始 基 本 的联网服务和应用。下面的示例中,我们采用的是后一个脚本。
r c . i n e t 1脚 本 执 行 的 动 作 和 应 用 将 留 在 后 续 章 节 中 讨 论 。 本 章 结 束 之 时 , 大 家 应 该 建 立 起 一 序 列 的 命 令 , 这 些 命 令 完 全 能 够 完 成 T C P / I P 联 网 的 配 置 工 作 。 然 后 , 再 用 r c . i n e t 1 中的任何 一个示例命令来替换它们,以保证 r c . i n e t 1 是 在 系 统 启 动 时 执 行 的 , 并 重 新 启 动 你 的 机 器 。 联 网用的 r c 脚本会给你一个较好的示例。
5.1 proc文件系统的设置
N e t - 2发布的版本中,有些配置工具依赖于 p r o c文件系统和内核进行通信(在内核 2 . 2 . x版 本 中 , 联 网 代 码 被 说 成 是 N e t 4 )。 这 是 一 个 接 口 , 它 允 许 通 过 一 个 类 似 文 件 系 统 的 机 制 , 访 问 内核运行时信息。装入时,可像对待其他所有文件系统一样,列出其所有文件,或显示其中 的所有内容。典型的项目有 l o a d a v g 文件(其中包含系统载入平均数)或 m e m i n f o ( 显 示 当 前 的核心内存和交换区的用法)。
所以,联网代码增加网络目录。其中包含大量的文件,分别显示内核 A R P 表、 T C P 连接 状态和路由信息表等等。许多网络管理工具都是从这类文件中获取相关信息的。
p r o c文 件 系 统 ( 或 p r o c f s ) 通 常 在 系 统 启 动 时 被 装 入 / p r o c 。 最 好 的 办 法 是 在 / e t c / f s t a b 中增
加下面的代码:
# procfs mont point:
none / pr oc pr oc def aul t s
然后,再从 / e t c / r c 脚本中执行 m o u n t / p r o c 。
如今, p r o c f s 通 常 采 用 默 认 设 置 进 入 内 核 。 如 果 p r o c f s 不 在 你 的 内 核 中 , 你 就 会 得 到 这 样 一条消息:“ m o u n t : f s t y p e p r o c f s n o t s u p p o r t e d b y k e r n e l ”(内核不支持 f s 类型的 p r o c f s )。之后,必须重新编译内核,并在要求回答是否需要 p r o c f s 支持时,回答“ Ye s ”(是)。 5.2 二进制文件的安装
如果你采用的是预封装的工具,其中多半包含有主要的连网应用程序和实用程序以及一 个混然一体的示例文件集。必须获得并安装这些新实用程序的唯一的条件是你安装了一个最 新版本的内核。由于内核连网层时时可能发生变化,所以有必要经常性地更新自己的基本配 置工具。至少须重新编译内核,但有时,还会要求你必须有最新的二进制文件集。这些文件 一般随内核一起发放,封装在一个名为 n e t - X X X . t a r. g z的归档文件中, X X X代 表 的 是 版 本 号 。 和 - 1 . 0 对应的发布是 0 . 3 2 b ,本书完稿之时,最新版本的内核( 1 . 1 . 1 2 )需要的是 0 . 3 2 d 。
如果你想自行编译和安装标准的 T C P / I P 网络,可以从大多数 F T P 服 务 器 那 里 获 得 源 代 码 。 这些源代码都是在 N e t - B S D或 其 他 源 代 码 基 础 上 , 经 过 许 多 人 的 修 订 而 成 的 。 其 他 的 应 用 程 序,比如 X m o s a i c 、X a r c h i e 、 G o p h e r和I R C 客 户 机 , 则 必 须 单 独 从 特 定 的 地 点 获 得 。 如 按 照 指导去做,大多数程序都是行得通的。
5.3 另一个例子
从现在开始,我们将讨论一个更为实际的例子,它比 Groucho Marx大学校园网稍微简单 一些。它就是Virtual Brewery。这是一家酿造啤酒的小公司。为了更有效地对自己的业务进行 管理,老板想把各台机器连接起来,所有的机器都是新的。
同 一 层 楼 上 , 穿 过 大 厅 , 就 是 V i r t u a l W i n e r y, 这 家 公 司 的 性 质 和 B r e w e r y 差 不 多 。 他 们 各 自运行一个以太网。很自然,只要可行的话,两家公司都想链接到对方的网络上。作为第一 步,先在两个子网中间设置一个转发数据报的网关主机。然后,设法通过 U U C P 链 接 到 公 司 外 面,以便收发新闻和电子邮件。以后,肯定是设置 S L I P 链接接入因特网。
5.4 设置主机名
多数情况下(非绝对的),网络应用程序依赖于本地主机名(已被设为一个恰当的值)。 这是在系统启动过程期间,利用 h o s t n a m e 命 令 来 完 成 的 。 要 设 置 主 机 名 , 就 应 该 像 下 面 这 样调用它
# hostname name
通常用没有域名的不合格主机名来进行试验。比如, Virtual Brewery公司的主机可以是 v a l e . v b r e w. c o m 、 v l a g e r. v b r e w. c o m 等 。 它 们 是 这 些 主 机 的 正 式 主 机 名 , 即 完 整 资 格 域 名 。 其 本地主机名只能是公司名的前几个字母,比如 v a l e 。但是,由于本地主机名常用于查找主机的 I P 地址,所以必须确保解析器库能够查找主机的 I P 地址。这通常意味着必须在 / e t c / h o s t s (参 见下文)内输入主机名。
有人建议利用 d o m a i n n a m e (域名)命令,将内核的域名概念设置为 F Q D N 的 其 他 部 分 。 通过这一方式,可以把主机名和域名的输出组合起来,获得一个 F Q D N 。 但 是 , 这 也 不 能 保 证 百分之百的正确。域名一般用于设置主机的 N I S ( 网 络 信 息 系 统 ) 域 , 这 个 域 完 全 不 同 于 你 的 主机所属的 D N S 。关于 N I S 的详情,请参见第 9 章。
5.5 分配IP地址
在自己的主机上配置联网软件,进行单机操作时(例如,能够运行 INN netnews软件),完全可以忽略本小节,因为你只需要回送接口的 I P 地址,而这个接口的地址始终都是 1 2 7 . 0 . 0 . 1 。 但面对真正的网络时(比如以太网),事情就没那么简单了。如果想将你的主机连接到一 个现有网络,必须要求该网络的管理员为你分配一个 I P 地 址 。 在 自 行 设 置 网 络 时 , 你 必 须 像
下面这样,给自己分配一个地址。
一个本地网络内的主机通常共享同一个逻辑 I P 网络的地址。因此,你必须分配一个 I P 网
络地址。如果你手中有若干个物理网络,要么为它们分配不同的网络编号,要么利用子网技 术,把自己的 I P 地 址 范 围 分 成 若 干 个 子 网 。
如果你的网络没有接入因特网,便可以根据自己的喜好,自由选择网络地址,只要它是 合法的。同时,必须保证从 A、B或C类地址中选择。但是,如果你打算不久将接入因特网, 现在就应该想办法获得正式的 I P 地 址 。 然 后 , 最 好 要 求 你 的 网 络 服 务 提 供 商 为 你 提 供 相 关 帮 助。如果想获得有朝一日用于因特网的网络编号,要向 h o s t m a s t e r @ i n t e r n i c . n e t请求一个“网 络地址申请表”。
要想同时操作若干个以太网(或其他网络,只要驱动程序允许),就必须将自己的网络分 成若干个子网。注意,只有你手中的广播网络不止一个时,才需要子网。点到点链接不能算 作 广 播 网 络 。 例 如 , 如 果 你 有 一 个 以 太 网 和 一 个 以 上 的 S L I P 链 接 ( 接 到 外 部 世 界 ), 就 不 必 将 自己的网络分成若干个子网。
现在回到我们的示例上来。 b r e w e r y 的网管采用的是 N I C 的 B 类网络编号,分配到的地址是 1 9 1 . 7 2 . 0 . 0 。为了能容纳两个以太网,她决定采用 8位主机部分作为其增加的子网位。另 8 位用于 主 机 部 分 , 每 个 子 网 上 允 许 接 纳 2 5 4 台 主 机 。 然 后 , 她 将 子 网 编 号 1 分配给 b r e w e r y , 2 分配给 w i n e r y 。因此,它们各自的网络地址分别是 1 9 1 . 7 2 . 1 . 0和 1 9 1 . 7 2 . 2 . 0 。子网掩码是 2 5 5 . 2 5 5 . 2 5 5 . 0。
作为两个网络间网关的 v l a g e r,在两个网络上分到的主机编号都是 1 ,但它分到的 I P 地址 分别是 1 9 1 . 7 2 . 1 . 1 和 1 9 1 . 7 2 . 2 . 1 。 下 面 的 示 例 展 示 了 两 个 子 网 和 网 关
注意,这个示例中,采用的是 B类网络,目的是为了简明扼要;其实, C类网络更为常见。 有了新联网代码,子网的划分就不再受到字节边界的限制,所以 C类网络也可分成若干个子网。 例如,你可将两位的主机编号用于网络掩码,从而网络可分为四个子网,每个子网上可以有 6 4 台主机 (每 个 子 网 上 的 最 后 一 个 编 号 是 为 广 播 地 址 保 留 的 , 所 以 事 实 上 每 个 子 网 只 有 6 3台主机 ) 。
5.6 编写主机和网络文件
在将自己的网络分成若干个子网后,应该利用 / e t c / h o s t s 文 件 , 进 行 简 单 的 主 机 名 解 析 了 。 如果不用 D N S和 N I S来进行地址解析,就必须将所有的主机信息放在一个 h o s t s 文件 (主机 ) 内。
即使你想在普通操作期间运行 D N S 或 N I S ,也应该先有 / e t c / h o s t s 文 件 内 的 某 些 子 网 的 所 有 主机名。比如在无网络接口运行的情况下 (引导时),你想有某类主机名解析,那么,这样不仅 很方便,还允许你采用 r c . i n e t 脚本内的象征性的主机名。因此,在更改 I P 地 址 时 , 只 需 将 一 份 更新过的主机文件复制到所有的机器中,再重新启动即可,而不是重新逐个编辑数量庞大的
r c 文件。通常情况下,可把所有的本地主机名和地址放入主机文件内,如果需要,还可将网 关和 N I S 服 务 器 添 加 在 内 。(只有采用 P e t e r E r i k s s o n 编写的 N Y S 时,才需要 N I S 服 务 器 的 地 址 。 其他 N I S 实施位于它们自己的服务器上,只能在运行时用 y p b i n d 获得。)
与此同时,初始测试期间,你应该保证自己的解析器只采用主机文件内的信息。在使用 自己的 D N S 和 N I S 软 件 时 , 可 能 会 利 用 一 些 会 产 生 怪 异 结 果 的 示 例 文 件 。 查 询 主 机 I P 地 址 时 , 如果要所有应用程序专用 / e t c / h o s t s 文件,必须对 / e t c / h o s t . c o n f 文件进行编辑。在以关键字 o r d e r 开头的所有代码行前加上一个“ #”号,就可以批注出所有的行,并插入下面这行
order hosts
注意 如何配置解析器库,请参见第6章。
主机文件中每行都有一个条目,由 I P 地 址 、 主 机 名 和 供 选 择 的 主 机 名 别 名 清 单 组 成 。 这 些字段用空格或标号隔开,而且地址字段必须在第一列内。跟在“ #”号后面的被视作批注, 可忽略。
主机名要么已完全通过验证,要么关联在本地域内。以 v a l e 为 例 , 通 常 输 入 的 是 其 完 整 资 格名, v a l e . v b r e w. c o m 和主机文件内的 v a l e 本 身 , 所 以 它 就 有 两 个 名 字 , 一 个 是 正 式 主 机 名 , 另一个是较短的本地名。
在我们上面的示例中, Virtual Brewery的主机文件像下面这样。其中包括两个特殊的主机 名: v l a g e r- i f 1 和 v l a g e r- i f 2 ,它们为 v l a g e r 网 关 上 用 的 两 个 接 口 提 供 了 地 址 。
正如主机的 I P 地 址 一 样 , 有 时 人 们 肯 定 想 用 一 个 特 殊 好 记 的 名 字 来 代 表 某 个 网 络 。 所 以 , 主 机 文 件 还 有 一 个 如 影 随 行 的 “ 搭 档 ” — / e t c / n e t w o r k s ,该文件指明网络名和网络编号之间 的对应关系。
注意 Res Hat Linux中没有/etc/networks文件。
我们在 V i r t u a l B r e w e r y 安装了一个 n e t w o r k s ( 网 络 ) 文 件 , 如 下 所 示 :
# /etc/networks for the Virtual Brewery
brew-net 191.72.1.0
wine-net 191.72.2.0
注意 网络文件中的网络名不得与主机文件内的主机名冲突,否则,会令某些程序产生 怪异的结果。
5.7 IP接口配置
像前一章描述的那样设置好硬件之后,接下来的任务是让内核连网软件知道它们的存在。 配置网络接口,并初始化路由表的命令有两条。配置任务通常是在系统启动时,从 r c . i n e t 1脚 本开始进行的。采用的基本工具叫作 i f c o n f i g ( i f代表接口)和 r o u t e ,即接口配置和路由。
i f c o n f i g用于令接口能够被内核联网层访问。这涉及到 I P 地 址 和 其 他 参 数 的 分 配 , 接 口 的
激 活 ( 有 时 也 称 作 启 用 )。 这 里 的 激 活 意 思 是 内 核 将 通 过 该 接 口 收 发 I P 数 据 报 。 要 想 启 用 接 口 ,
最简单的方式是利用下面的代码调用它
ifconfig interface ip-address
上面的代码将 i p - a d d r e s s 分 给 接 口 , 就 激 活 了 它 。 其 他 所 有 参 数 都 采 用 默 认 值 。 例 如 , 默 认 的 子 网 掩 码 衍 生 于 I P 地 址 的 网 络 类 , 比 如 代 表 B 类地址的 2 5 5 . 2 5 5 . 0 . 0 ( i f c o n f i g 工 具 的 详 情 , 将在本章最后进行解释)。
第二个工具是 r o u t e,它用于在内核路由表内增加或删除路由。可以这样调用它: route [add|del] target
a d d 和 d e l这两个参数用于判断是增加还是删除路由。 5.7.1 回送接口
首先激活的接口是回送接口:
# ifconfig l0 127.0.0.1
有时,还可以看到本地主机用伪主机名代替了 I P地址的情况。 i f c o n f i g 将 查 找 主 机 文 件 内
的主机名,其中一个条目将该主机声明为 1 2 7 . 0 . 0 . 1 的主机名:
# Sample /etc/hosts entry for localhost
localhost 127.0.0.1
如果要查看接口的配置情况,将接口名作为 i f c o n f i g 的 参 数 , 调 用 它 即 可 :
由 此 可 知 , 回 送 接 口 已 经 分 到 一 个 网 络 掩 码 — 2 5 5 . 0 . 0 . 0 ,这是因为 1 2 7 . 0 . 0 . 1 是 A 类地址。 这个接口也没有设置广播地址,因为对回送接口而言,一般没有多大用处。但是,如果你在自己的主机上运行 r w h o d 程序,就必须为回送设备设置广播地址,只有这样,才能保证 r w h o正 常运行。关于广播地址的设置,如下所示。
现在,你几乎可以运行你的网络了,但还缺一项,即路由表中的一条,它告诉 I P 可以使 用这个接口作为去往目标 1 2 7 . 0 . 0 . 1 的路由,可通过键入下行命令完成:
# route add 127.0.0.1
再次提醒大家注意,可以用本地主机名来代替 I P 地址。
接下来,应该利用 p i n g 对所有的配置进行校验。 p i n g 相 当 于 一 种 连 网 用 的 声 纳 设 备 , 用 于 验证所给地址是否能够抵达,向它发送一个数据报后,稍隔一会,就会返回。一个 p i n g 所花 的 时 间 一 般 称 为 一 个 周 期 ( r o u n d - t r i p )。
像上面这样调用 p i n g 时,它会永远不停地发送数据包,除非用户将其中断。上面的 ^ C 标 出了我们按 C t r l C中 断 校 验 的 地 方 。
上面的示例展示了发到 1 2 7 . 0 . 0 . 1 的数据包传递无误,返回给 p i n g 的 应 答 几 乎 是 同 步 的 。 这 表明你已成功设置了第一个网络接口。
如果 p i n g 的 输 出 和 上 面 的 示 例 有 出 入 , 你 就 麻 烦 了 。 查 看 有 些 文 件 的 安 装 是 否 有 误 。 再 看看你使用的 i f c o n f i g 和 r o u t e 二 进 制 文 件 是 否 与 自 己 运 行 的 内 核 兼 容 , 最 重 要 的 是 看 内 核 与 已 启用的连网代码是否兼容(可从 / p r o c / n e t 目录得知)。 如 果 得 到 的 错 误 消 息 是 这 样 的 :“网络不 可 抵 达 ”, 说 明 你 可 能 把 r o u t e 命 令 搞 错 了 。 一 定 要 保 证 该 命 令 中 采 用 的 地 址 和 i f c o n f i g 中的地 址是一样的。
通过上面的步骤,完全足以在一***立主机上使用连网应用程序了。在 r c . i n e t 1 增 加 上 面 的代码行,并保证从 / e t c . r c执行这两个 r c . i n e t 脚 本 之 后 , 可 能 需 要 重 新 启 动 机 器 , 试 着 运 行 各 种 应 用 程 序 。 例 如 ,“ t e l n e t l o c a l h o s t ” 将 建 立 一 条 通 向 你 的 主 机 的 t e l n e t 链 接 , 并 给 出 一 个 登 录提示。
然而,回送接口不仅用作网络丛书的示例,还用作开发过程中的测试床,但最常见的仍 然是供有些应用程序用于普通操作。例如,基于 R P C的所有应用程序都利用回送接口,随 p o r t m a p p e r程 序 一 起 在 启 动 时 注 册 自 己 。 因 此 , 这 个 接 口 总 应 该 配 置 好 , 不 管 你 的 机 器 是 否 接 入网络。
5.7.2 以太网接口
以太网接口的配置和回送接口的配置大致相同,唯一例外的是使用子网技术时,它要求 的参数比后者要多一些。
在 V i r t u a l B r e w e r y 示例中,我们已经把起初是 B 类网络的 I P 网络分成了若干个 C 类子网。
要使接口能够对此进行识别,需像下面这样调用 i f c o n f i g : # ifconfig eth0 vstout netmask 255.255.255.255.0
这样,便为 e t h 0接口分配了一个 v s t o u t I P 地址( 1 9 1 . 7 2 . 1 . 2 )。如果我们省略了网络掩码, i f c o n f i g 就会根据 I P 网络的类别推断出网络掩码是什么,而且这个网络掩码将是 2 5 5 . 2 5 5 . 0 . 0 。 现在,快速查看展示了下面的内容:
由上可知, i f c o n f i g 自动将广播地址(上面的 B c a s t 字 段 ) 设 为 普 通 值 , 即 设 置 了 所 有 主 机 位的主机网络编号。同时,消息传输单元(内核必须为该接口生成的以太帧最大字节数)必 须设为最大,即 1 500 个字节。所有这些值都优先于后面所讲的特殊选项。
接 下 来 的 情 形 和 回 送 接 口 类 似 , 同 样 必 须 安 装 一 个 路 由 条 目 , 向 内 核 报 告 通 过 e t h 0 接口能 够 抵 达 的 网 络 有 哪 些 。 就 V i r t u a l B r e w e r y 而言,应将 r o u t e 当 作 下 面 的 代 码 行 进 行 调 用 :
#route add -net 191.72.1.0
最初,这显得有点奇怪,因为真的不清楚 r o u t e如 何 检 测 出 路 由 通 过 哪 个 接 口 。 然 而 , 这 其实很简单:内核检查至今为止已配置好的所有接口,把目的地址 ( 此处为 1 9 1 . 7 2 . 1 . 0 ) 和接口 地址的网络部分比较。唯一匹配的接口是 e t h o .
现在看看 - n e t 选项是干什么的。这被选用,因为 r o u t e即 可 以 处 理 通 向 网 络 又 可 处 理 通 向 单 个主机的路由。当给出点十进制地址后,它通过观察主机部分得出它是一个网络还是一个主 机。如果地址的主机部分是 0 , r o u t e 假定它代表网络,否则它被视为主机地址。因此 r o u t e 认 为 1 9 1 . 7 2 . 1 . 0 是主机地址而非网络地址,因为它不知道我们使用了子网。所以我们必须使用 - n e t 标记显式告诉它,此地址代表网络。
当然,上面的 r o u t e 命令敲起来很乏味,而且易于拼错。更方便的方法是使用我们在 l e t c网络 中定义的网络名。这使该命令更易读,此时 - n e t标记可省略,因为 r o u t e知道1 9 1 . 7 2 . 1 . 0 代表网络。
# route add brew-net
现在,基本的配置步骤已告一段落,我们希望你的以太网接口能够正常运行。从你自己 的以太网中选出一台主机,比如 v l a g e r ,并键入
如果没有看到类似的输出,很显然,有什么被中断了。如果包丢失率异乎寻常的高,通 常意味着硬件方面出问题了,比如终端坏了,或根本没有终端等等。如果根本不能接收数据 包,就应该利用 n e t s t a t 检查一些接口配置。 i f c o n f i g显 示 出 来 的 包 特 性 将 告 诉 你 是 否 在 某 个 接 口上发送了数据包。如果还访问了远程主机,也应该对这台远程主机及其接口特性进行检查。 通 过 这 种 方 式 , 便 可 准 确 地 判 断 数 据 包 是 从 哪 里 开 始 丢 失 的 。 另 外 , 还 应 该 利 用 r o u t e 显示路 由信息,以了解两台主机的路由条目是否正确。如果在调用 r o u t e 时 , 不 带 任 何 参 数 , 就 会 在
屏 幕 上 输 出 路 由 信 息 ( - n 选 项 只 能 令 其 以 点 分 四 段 式 打 印 地 址 , 而 不 是 主 机 名 ):
这些字段的详细解释如下。 F l a g 列中包含一列针对每个接口的标记。 U 始 终 是 为 活 动 接 口 设置的,H的意思是目标地址表示一台主机。如果 H标记是为准备用于网络路由的路由设置的, 就 必 须 采 用 带 上 - n e t 选项的 r o u t e 命 令 。 要 验 证 你 键 入 的 路 由 真 正 能 用 , 须 检 查 两 次 调 用 p i n g期 间,倒数第二列中的 U s e 字段是否有所增加。
5.7.3 通过网关的路由
前一小节,我们只介绍了在一个单独的以太网上设置主机的情况。但更为常见的是,通 过若干个网关连接起来的网络群。这些网关虽然只链接了两个或两个以上的以太网,但也可 以链接到外部网络,比如说因特网。要想使用网关提供的服务,必须为网络层提供给额外的 路由信息。
例如, V i r t u a l B r e w e r y 和 V i r t u a l W i n e r y各自的以太网通过 v l a g e r 之 类 的 网 关 链 接 在 一 起 。
假设 v l a g e r 已经配置就绪,我们只须在 v s t o u t 的 路 由 表 内 增 加 另 一 个 条 目 即 可 , 这 个 路 由 表 将
告 诉 内 核 它 能 够 通 过 v l a g e r ,抵达 W i n e r y 网 络 上 的 所 有 主 机 。 相 应 的 r o u t e 调 用 如 下 所 示 ; g w
关键字告诉内核,下一个参数表示一个网关:
# route add wine-net gw vlager
当然,对于你希望与之通信的 W i n e r y 网络上的任何一台主机,都必须有相应的用于
B r e w e r y 网 络 的 路 由 条 目 , 否 则 , 就 只 能 将 数 据 从 v s t o u t 发送到 v b a r d o l i n o , 但 后 者 返 回 的 所 有
应答都将进入一个很大的位桶( bit bucket)。
这个示例只说明了两个独立以太网之间,用于交换数据包的一个网关。现在,我们假设
v l a g e r 还 接 入 了 因 特 网 ( 比 方 说 通 过 一 条 新 增 的 S L I P 链 接 接 入 )。 如 果 我 们 希 望 数 据 报 能 发 送
到非 B r e w e r y 的 任 何 一 个 网 络 , 就 应 该 把 数 据 报 交 给 v l a g e r 。 这 是 通 过 令 其 作 为 v s t o u t 的默认网
关来完成的:
# route add default gw vlager
网络名的默认设置是 0 . 0 . 0 . 0 的速写,表示默认路由。不必将这个网络名加入 / e t c / n e t w o r k s 文件中,因为它是内置入默认路由中的。
如果在一个或多个网络之后,对一台主机进行 p i n g 测 试 时 , 发 现 包 丢 失 率 很 高 , 这 通 常 意味着网络阻塞得相当厉害。包的丢失归咎于技术上的落后,或临时性的网络超载,因此主 机产生延迟,甚至丢弃进入的数据报。
5.7.4 网关的配置
要配置一台机器,使其负责两个以太网间的包交换,是非常容易的一件事。假设以 v l a g e r 为 例 , 它 配 有 两 张 以 太 网 卡 , 每 张 卡 都 连 接 到 其 中 一 个 网 络 上 。 你 只 须 为 它 们 分 配 I P 地址,并对这两个接口进行配置即可。
注意 Linux-2.0.x系列中,默认情况下的包转发是取消了的。所以可在运行时启用包的 转发:# echo 1 > /proc/sys/net/ipv4/ip_forward。
像下面这样,在主机文件内增加关于这两个接口的信息是相当有用的,关于这两个接口, 我们还有更容易记的名字:
191.72.1.1 vlager vlager.vbrew.com
191. 72. 1. 1 v l ager - i f 1
191. 72. 2. 1 v l ager - i f 2
下面的命令用于设置这两个接口:
# ifconfig eth0 vlager-if1
# ifconfig eth1 vlager-if2
# route add brew-net
# route add wine-net
5.7.5 PLIP接口
与利用以太网连接相比,利用 P L I P 链 接 连 接 两 台 计 算 机 的 情 况 稍 有 不 同 。 后 者 是 所 谓 的 点到点链接,因为相对广播网络而言,它只涉及到两台主机(即节点)。
我们以 V i r t u a l B r e w e r y 公司的一名员工手中的膝上型计算机为例,该公司的网络通过 P L I P 与 v l a g e r 连 接 。 这 台 膝 上 型 计 算 机 本 身 名 为 v l i t e, 而 且 只 有 一 个 并 行 端 口 。 在 启 动 时 , 这 个 端 口被注册为 p l i p 1 。要激活这条链接,必须利用下面的命令,配置 p l i p 1 接口:
# ifconfig plip1 vlite pointtopoint vlager # route add default gw vlager
注意 pointtopoint不是排版错误,它真的就是这样拼写的。
第一个命令行告诉内核这是一条点到点链接,其远程端的地址是 v l a g e r ,配置了p l i p 1接口。
第二个命令行将 v l a g e r 作为网关,安装了默认路由。在 v l a g e r 上,还有必要利用一个类似的
i f c o n f i g 命 令 激 活 这 条 链 接 ( 不 必 调 用 r o u t e ):
# ifconfig plip1 vlager pointtopoint vlite
有趣的是: v l a g e r上的 p l i p 1 接口居然不必有其独立的 I P 地址,而是给定的 1 9 1 . 7 2 . 1 . 1 这个地 址。但是,应该注意,只有在完全配置好以太网路由表之后,才能配置 P L I P 或 S L I P 链接。不 然的话,在使用有些老版本的内核时,会在配置点到点链接时中断。
膝上型计算机的路由配置之后,转向 B r e w e r y 网络的路由配置;还没有为 B r e w e r y 网络上 的任何一台主机配置到 v l i t e 的 路 由 呢 ! 特 别 麻 烦 的 一 种 方 法 是 在 每 台 主 机 的 路 由 表 上 增 加 特 定 的 路 由 , 这 些 路 由 表 将 v l a g e r 指定为通向 v l i t e的网关:
# route add vlite gw vlager
因此,在面对临时性的路由时,最好采用动态路由信息。其一是利用 g a t e d( 一 种 路 由 程 序),首先在网络中的各台主机上安装这个程序,以便动态分发路由信息。但是,最简单的方 法是利用代理 A R P 。有了代理 A R P ,只要一有查询 v l i t e 的 A R P , v l a g e r 就 会 发 送 自 己 的 以 太 网地址,作 出 相 应 的 应 答 。 这 样 的 后 果 是 所 有 发 向 v l i t e 的 包 都 会 流 入 v l a g e r ,再由 v l a g e r 将它们 转发到膝上型计算机。我们将在随后的 P L I P 小节,为大家谈谈代理 A R P 。
将来的 N e t - 3 中,将包含一个名为 p l i p c o n f i g 的工具,允许你设置打印机端口的 I R Q 。稍后, 可能还有更为常用的 i f c o n f i g 命令取而代之。
5.7.6 SLIP和PPP接口
尽管 S L I P 和 P P P 链 接 只 是 诸 如 P L I P 之 类 的 简 单 点 到 点 链 接 , 但 其 内 容 还 是 相 当 纷 繁 的 。 通常, S L I P 连 接 涉 及 的 步 骤 有 : 通 过 m o d e m , 拨 打 远 程 站 点 , 将 串 行 线 路 设 置 为 S L I P 模式等 等。 P