在 “ TCP/IP” 的 网 路 世 界 里 , 每 部 电 脑 的 身 分 都 是 由 4 个
数 字 所 组 成 的 “ IP Address” 来 辨 识 ( 例 如 168.95.192.1 ) , 这 些
数 字 号 码 就 像 是 我 们 的 身 分 证 号 码 一 样 , 某 些 部 份 数 字 分
别 代 表 不 同 的 意 义 。 当 我 们 在 使 用 网 际 网 路 资 源 时 , 如 果
直 接 使 用 “ IP Address” 来 进 行 连 线 , 那 是 最 直 接 不 过 了 ! 但
是 , 全 部 数 字 化 的 位 址 在 使 用 上 真 的 有 些 不 够 友 善 , 光 是
记 一 堆 数 字 就 够 头 疼 的 了 !
网 路 位 址 vs. 主 机 名 称
还 好 , 提 供 “ TCP/IP” 网 路 服 务 的 作 业 系 统 都 提 供 系 统
管 理 者 可 以 建 立 一 个 名 叫 “ HOSTS” 的 档 案 ( 例 如 Linux/UNIX中
的 /etc/hosts) , 在 这 个 系 统 档 案 档 案 里 , 系 统 管 理 者 可 以 将
已 知 的 网 路 机 器 分 别 赋 予 一 个 「 主 机 名 称 」 并 且 相 对 映 该
机 器 的 “ IP Address” 。 如 此 一 来 , 在 进 行 网 路 连 线 时 , 使 用
者 就 不 必 一 定 要 直 接 指 定 “ IP Address” 来 连 线 , 因 为 系 统 可
以 提 供 应 用 程 式 透 过 “ HOSTS” 中 所 提 供 的 「 主 机 名 称 与 位 址
对 照 资 料 」 取 得 该 「 主 机 名 称 」 的 「 网 路 位 址 」 。
这 样 子 , 使 用 网 路 程 式 时 是 方 便 多 了 , 但 是 , 国 际 网
路 的 机 器 成 千 上 万 , 如 果 只 是 利 用 “ HOSTS” 的 方 式 来 处 理
主 机 名 称 」 与 「 网 路 位 址 」 的 对 映 工 作 , 那 实 在 是 件 很 没
效 率 又 几 乎 不 可 能 的 事 。 所 以 , 如 果 网 路 使 用 的 领 域 只 是
单 纯 的 内 部 网 路 , 因 为 机 器 数 目 不 多 的 情 形 , 那 麽 使 用
HOSTS” 就 可 以 应 付 网 路 连 线 上 的 需 求 了 。
为 了 因 应 大 型 网 路 上 「 主 机 名 称 」 与 「 网 路 位 址 」 对
映 的 需 求 , 就 有 所 谓 建 立 「 名 称 伺 服 器 」 来 负 责 以 「 主 机
名 称 」 查 询 「 网 路 位 址 」 的 工 作 , 依 据 建 立 的 架 构 方 式 大
致 有 两 种 , “ Domain Name System” ( 简 称 : DNS) 、 “ NFS Network
Information Service” ( 简 称 : NIS) 。 我 们 都 可 以 在 Linux系 统 中
架 设 这 两 种 服 务 程 式 。
“ NIS” 较 早 是 由 Sun所 提 出 的 解 决 方 案 , 运 用 “ RPC” 的
功 能 来 提 供 解 决 「 主 机 名 称 与 位 址 」 的 查 询 , “ NIS” 的 伺
服 程 式 大 都 是 以 “ yp” 起 头 的 程 式 档 案 ( ypbind、
ypinit....) 。 笔 者 并 不 准 备 在 这 里 说 明 “ NIS” 伺 服 器 的 建 立
方 式 。 而 是 将 焦 点 摆 在 「 建 立 DNS名 称 伺 服 器 」 的 话 题 上 。
DNS服 务 型 态 的 种 类
时 下 在 国 际 网 路 上 所 存 在 的 「 名 称 伺 服 器 」 一 般 都 是
属 於 DNS伺 服 器 , 因 此 笔 者 才 会 将 焦 点 放 在 “ DNS” 的 建 立
上 。 由 於 “ DNS” 已 经 有 个 相 当 标 准 的 规 定 , 因 此 虽 然 不 同
平 台 上 作 业 系 统 可 能 有 相 当 的 差 异 , 但 是 建 立 “ DNS Server”
的 方 式 可 能 都 非 常 类 似 。 而 对 於 使 用 “ DNS” 的 方 式 也 是 大
同 小 异 。 关 於 使 用 或 架 设 “ DNS” 的 部 份 , 可 以 大 致 归 为 下
面 几 类 :
● 使 用 远 端 名 称 伺 服 器 :
如 果 自 己 主 机 上 并 没 有 架 设 “ DNS” , 可 以 设 定 一 台 已
知 的 「 名 称 伺 服 器 」 作 为 本 主 机 网 路 连 线 时 的 名 称 资 讯 的
提 供 者 。 在 Linux 系 统 中 , 我 们 可 以 藉 由 “ /etc/resolv.conf” 这
个 系 统 参 数 档 案 来 指 定 本 主 机 的 「 远 端 名 称 伺 服 器 」 。 例
如 :
simon:~# cat /etc/resolv.conf
#
#电 信 局 HINET的 名 称 伺 服 器 为 168.95.192.1
#下 面 就 设 定 该 主 机 为 本 主 机 的 「 名 称 伺 服 器 」
#
#
nameserver 168.95.192.1
#
#
一 般 使 用 者 环 境 大 都 是 属 於 这 一 类 的 使 用 型 态 。
● 所 谓 “ Cache-Only ” 的 名 称 伺 服 器 :
一 个 「 名 称 伺 服 器 」 也 不 可 能 拥 有 国 际 网 路 上 所 有 的
主 机 资 讯 , 因 此 它 提 供 一 个 转 送 方 式 , 将 自 己 「 名 称 伺 服
器 」 无 法 处 理 的 「 查 询 要 求 」 转 送 至 上 一 层 的 「 名 称 伺 服
器 」 查 询 , 然 後 将 所 得 到 的 查 询 结 果 , 传 送 给 提 出 查 询 要
求 的 主 机 。
而 “ Cache-Only” 的 “ DNS” 就 是 该 伺 服 器 的 主 机 资 讯 里 除
了 自 己 之 外 就 没 有 了 , 它 将 所 有 的 查 询 要 求 都 转 送 至 其 他
伺 服 器 去 查 询 。
● “ Primary” 名 称 伺 服 器 :
一 个 完 整 功 能 的 「 名 称 伺 服 器 」 , 管 理 一 个 或 数 个
Domain” 的 机 器 资 讯 。 而 这 些 主 机 相 关 的 资 料 都 依 照 格 式 储
存 於 伺 服 器 的 档 案 目 录 中 , 然 後 会 在 伺 服 器 启 动 时 将 这 些
资 料 读 入 系 统 。
● “ Secondary” 名 称 伺 服 器 :
基 本 上 它 也 是 一 个 完 整 功 能 的 「 名 称 伺 服 器 」 , 只 是
所 不 同 的 是 , 它 的 主 机 资 料 并 非 完 全 储 存 於 伺 服 器 所 在 的
档 案 目 录 , 而 由 某 个 “ Primary DNS” 来 提 供 。
在 本 次 的 主 题 里 , 我 们 会 就 以 建 立 “ Cache-Only” 以 及
Primary” 的 名 称 伺 服 器 做 个 范 例 说 明 。
使 用 BIND-4.9.6建 立 DNS Server
在 Linux系 统 里 , 我 们 使 用 “ BIND” ( Berkeley Internet Name
Domain Name Server) 来 建 立 我 们 的 「 名 称 伺 服 器 」 。
BIND” 这 个 软 体 每 个 Linux安 装 套 件 都 会 有 , 所 以 你 只 要
确 定 在 安 装 时 把 “ BIND” 软 体 安 装 至 Linux系 统 中 , 那 麽 就 已
经 具 备 建 立 “ DNS Server” 的 软 体 环 境 了 。 不 过 在 架 设 “ DNS”
之 前 , 笔 者 建 议 读 者 最 好 能 够 对 於 网 路 主 机 名 称 的 命 名 原
则 先 有 些 概 念 ( 不 妨 参 考 前 几 期 HOPE_NET月 刊 上 的 网 路 专 题 、
或 是 坊 间 网 路 相 关 的 书 籍 , 我 就 不 在 此 详 述 ) 。 接 下 来 我
们 以 一 个 假 设 环 境 来 配 合 说 明 架 设 「 DNS名 称 伺 服 器 」 的 步
骤 。 假 设 环 境 的 一 些 情 形 如 下 :
领 域 名 称 ( Domain) : simon.net
伺 服 器 主 机 名 称 ( Host) : simon
伺 服 器 网 路 位 址 ( IP) : 192.9.100.1
根 名 称 伺 服 器 ( Root DNS) : hinet.net ( 168.95.192.1)
||||||● 建 立 “ /etc/named.boot” 启 动 设 定 档
“ BIND” 伺 服 程 式 在 启 动 时 首 先 会 读 取 “ /etc/named.boot”
这 个 控 制 档 , 因 此 首 先 就 来 进 行 “ named.boot” 的 设 定 工 作 。
(A)“ directory” 是 用 来 指 定 「 主 机 相 关 资 讯 」 资 料 档 案 的 所
在 目 录 。
(B)“ named.boot” 一 般 常 用 到 的 资 料 格 式 为 「 格 式 、 领 域 、 来
源 主 机 或 档 案 、 备 份 档 案 名 称 」 , 除 了 设 定 “ Secondary DNS”
时 较 会 用 到 备 份 档 案 这 个 栏 位 外 , 其 馀 大 都 只 用 到 前 叁 个
栏 位 。 关 於 档 案 名 称 部 份 并 没 有 限 制 , 除 了 “ named.boot” 不
可 变 更 之 外 , 其 他 的 主 机 资 料 档 案 可 以 自 行 指 定 名 称 。 (图
一)
(C)“ cache” 表 示 在 < root.cache> 这 个 档 案 设 定 着 本 伺 服 器 的
上 层 网 路 名 称 伺 服 器 。
“ primary” 则 分 别 设 定 每 个 指 定 「 领 域 」 的 主 机 的 资 料
档 案 。
(D)在 「 领 域 」 这 个 栏 位 中 「 .」 代 表 “ OTHER” , 在 本 例 子
中 , 如 果 查 询 的 主 机 所 在 领 域 并 未 特 别 定 义 时 , 则 使 用
cache」 的 设 定 转 至 上 层 名 称 伺 服 器 查 询 。 而 对 於 我 们 自 己
管 理 的 「 领 域 」 则 可 以 使 用 “ primary” 、 “ secondary” 来 定 义
各 别 「 领 域 」 主 机 资 料 纪 录 所 在 。
< simon.net> 是 一 般 主 机 名 称 的 形 式 , 有 些 时 候 使 用 者
会 以 “ IP Address” 来 查 询 主 机 资 讯 , 对 此 需 求 , 也 可 以 参 照
< 100.9.192.INADDR.ARPA> 的 格 式 来 定 义 < 192.9.100.x> 的 主 机 资
讯 。
● 建 立 “ /etc/named.hosts” 主 机 资 料
在 本 例 中 “ named.hosts” 被 指 定 为 储 存 < simon.net> 这 个 网
路 上 主 机 资 料 , 因 此 我 们 就 必 须 将 本 网 路 上 的 主 机 资 料 全
部 建 立 在 这 个 资 料 档 案 中 。
(A)“ SOA” 这 个 栏 位 在 每 个 「 领 域 」 资 料 档 中 只 能 有 一 个 。
(B)指 定 < postmaster@simon.simon.net > 是 本 名 称 伺 服 器 的 联 络 人
邮 件 信 箱 。
(C)< simon IN A 192.9.100.1> 表 示 “ simon.simon.net” 这 台 主 机 的
位 址 」 是 < 192.9.100.1> , 接 下 来 的 另 一 行 并 未 指 定 哪 台 主
机 名 称 则 表 示 该 设 定 仍 是 针 对 < simon> 这 台 主 机 。 由 於 可 设
定 的 资 料 项 目 不 少 , 我 们 在 此 挑 选 常 见 的 项 目 在 此 简 要 说
明 。
< A> --指 定 网 路 位 址
< CNAME> --设 定 主 机 的 别 名 , 例 如 < simon.simon.net> 的 别 名 是
<gopher.simon.net>
< HINFO> --可 以 使 用 一 段 文 字 描 述 主 机 环 境 。
< MX> --用 来 设 定 E-Mail传 递 交 换 的 优 先 路 径 , 例 如 范 例 中 的
< simon5> 的 设 定 , < simon5.simon.net> 的 信 件 都 先 往
simon5.simon.net > 这 台 主 机 传 送 , 如 果 无 法 与 该 主 机 连 线 时
那 就 会 往 < simon.simon.net> 传 送 。
< NS> --用 来 指 定 子 网 路 的 名 称 伺 服 器 所 在 。
< PTR> --与 < A> 有 点 相 对 的 功 能 , 它 可 以 指 定 某 个 “ IP” 是
指 向 某 个 主 机 名 称 , 这 样 就 可 以 以 “ IP” 来 查 询 主 机 的 其 他
资 讯 。
● 建 立 “ /etc/named.rev”
前 面 “ named.hosts” 是 当 网 路 的 使 用 者 以 “ xxx.simon.net”
的 方 式 查 询 主 机 资 讯 时 所 参 考 的 资 料 档 , 而 这 个
“ named.rev” 功 能 则 是 提 供 使 用 者 以 「 192.9.100.x」 查 询 主 机
资 讯 时 参 考 。
;--------------------------
;/etc/root.cache
;--------------------------
. 99999999 IN NS HINET.NET
. HINET.NET 99999999 A 168.95.192.1
;------------------------- End of File
● 建 立 “ /etc/root.cache” 启 动 设 定 档
完 成 前 面 本 地 网 路 的 主 机 资 料 的 建 立 工 作 後 , 再 来 就
是 设 定 本 伺 服 器 的 「 根 伺 服 器 」 ( Root Name Server) 。 下 列 应
该 是 最 简 单 的 设 定 内 容 了 , 读 者 不 妨 参 照 此 设 定 。
● 启 动 “ BIND” 伺 服 程 式
完 成 这 些 主 机 资 讯 的 建 立 工 作 後 , 最 重 要 的 工 作 就 是
启 动 “ BIND” 的 伺 服 程 式 < Named> , 你 可 以 直 接 以 系 统 使 用
者 的 身 分 执 行 此 程 式 , 在 执 行 後 , 建 议 您 最 好 执 行 < Ps> 指
令 检 查 一 下 < Named> 是 否 成 功 执 行 。 如 果 执 行 < Ps> 有 见 到
< Named> 那 表 示 主 要 的 控 制 档 内 容 无 误 。
然 後 , 你 最 好 将 启 动 「 名 称 伺 服 程 式 」 的 工 作 加 入
Linux系 统 启 动 程 序 中 。 以 “ Slackware Linux” 为 例 , 请 修 改
/etc/rc.d/rc.inet2” 这 个 档 案 中 关 於 < Named> 的 设 定 , 如 下 的
内 容 。
#/etc/rc.d/rc.inet2
. . . . . # Start the NAMED/BIND name server.
if [ -f ${NET}/named ]; then
echo -n “ named”
${NET}/named
fi
. . . . . .
. . . . . . .
这 样 子 , 在 下 次 启 动 系 统 时 就 会 自 动 执 行 “ BIND” 伺 服
程 式 , 而 您 的 Linux也 就 具 有 “ DNS Server” 的 功 能 了 。
测 试 查 询 「 名 称 伺 服 器 」 的 运 作
为 了 确 定 「 名 称 伺 服 器 」 的 运 作 正 常 , 因 此 在 此 提 供
一 些 测 试 的 方 式 供 做 参 考 。
●使 用 < Ping >
直 接 使 用 < Ping主 机 名 称 > 的 方 式 来 测 试 是 否 可 以 成
功 , 这 是 最 简 单 的 方 式 , 而 在 测 试 过 程 除 了 与 自 己 网 路 上
主 机 连 线 之 外 , 最 好 也 要 对 外 连 线 , 以 便 测 试 < Cache> 的 设
定 是 否 正 确 。 使 用 < FTP> < Telnet> 等 网 路 程 式 进 行 连 线 也
可 以 达 到 同 样 的 目 的 。
● 使 用 < Nslookup>
使 用 < Ping> 可 能 只 参 考 到 主 机 的 “ IP” 位 址 而 已 , 而
如 要 查 询 主 机 资 讯 , 那 就 得 透 过 < Nslookup> 这 个 程 式 来 进
行 。 < Nsl -ookup> 会 与 系 统 指 定 的 「 名 称 伺 服 器 」 连 线 并 根
据 使 用 者 提 出 的 查 询 条 件 由 「 名 称 伺 服 器 」 取 得 查 询 结
果 。 以 下 是 一 些 使 用 例 子 。
重 新 读 取 「 主 机 资 料 」
因 为 伺 服 程 式 是 在 启 动 时 就 将 读 取 「 主 机 资 料 」 , 因
此 即 使 你 在 执 行 阶 段 更 改 了 主 机 资 料 的 内 容 , 仍 然 不 会 生
效 。 必 须 重 新 启 动 < Named> 才 会 使 你 更 新 过 的 资 料 生 效 。 如
果 遇 上 此 情 形 , 你 可 以 用 下 列 之 一 种 来 处 理 :
< kill -9 named的 PID> 先 杀 伺 服 程 式 , 再 重 新 执 行 乙 次 。
< kill -HUP named的 PID> 让 伺 服 程 式 进 行 重 置 的 行 为 。
执 行 〈 named.restart〉 让 重 新 伺 服 程 式 执 行 。