aboutsummaryrefslogtreecommitdiff
path: root/zh_CN.GB2312/books/handbook
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2006-08-14 02:26:10 +0000
committerXin LI <delphij@FreeBSD.org>2006-08-14 02:26:10 +0000
commitbe8ffdcd03474c02809bf249b043cd36f63afd5b (patch)
tree97ce5ee21f907ed77cf60dd8eb46c8639047c9bb /zh_CN.GB2312/books/handbook
parent3704fee17d80675773fb26a063aa4946c6fc833c (diff)
Notes
Diffstat (limited to 'zh_CN.GB2312/books/handbook')
-rw-r--r--zh_CN.GB2312/books/handbook/advanced-networking/chapter.sgml1387
-rw-r--r--zh_CN.GB2312/books/handbook/book.sgml6
-rw-r--r--zh_CN.GB2312/books/handbook/config/chapter.sgml139
-rw-r--r--zh_CN.GB2312/books/handbook/disks/chapter.sgml20
-rw-r--r--zh_CN.GB2312/books/handbook/firewalls/chapter.sgml21
-rw-r--r--zh_CN.GB2312/books/handbook/install/chapter.sgml4
-rw-r--r--zh_CN.GB2312/books/handbook/mac/chapter.sgml3
-rw-r--r--zh_CN.GB2312/books/handbook/ports/chapter.sgml2
-rw-r--r--zh_CN.GB2312/books/handbook/serialcomms/chapter.sgml219
9 files changed, 1241 insertions, 560 deletions
diff --git a/zh_CN.GB2312/books/handbook/advanced-networking/chapter.sgml b/zh_CN.GB2312/books/handbook/advanced-networking/chapter.sgml
index 6ff0589ffb..02b7897cd6 100644
--- a/zh_CN.GB2312/books/handbook/advanced-networking/chapter.sgml
+++ b/zh_CN.GB2312/books/handbook/advanced-networking/chapter.sgml
@@ -2,7 +2,7 @@
The FreeBSD Documentation Project
The FreeBSD Chinese Documentation Project
- Original revision: 1.382
+ Original revision: 1.384
$FreeBSD$
-->
@@ -633,488 +633,1007 @@ route_net2="-net 192.168.1.0/24 192.168.1.1"</programlisting>
<sect1info>
<authorgroup>
<author>
- <firstname>Eric</firstname>
- <surname>Anderson</surname>
- <contrib>作者:</contrib>
+ <othername>陈福康</othername>
</author>
- </authorgroup>
- <authorgroup>
+
<author>
- <firstname>张</firstname>
- <surname>雪平</surname>
- <contrib>中文翻译:</contrib>
- <affiliation>
- <address><email>zxpmyth@yahoo.com.cn</email></address>
- </affiliation>
+ <firstname>Marc</firstname>
+ <surname>Fonvieille</surname>
</author>
+
<author>
- <firstname>袁</firstname>
- <surname>苏义</surname>
+ <firstname>Murray</firstname>
+ <surname>Stokely</surname>
</author>
</authorgroup>
</sect1info>
<title>无线网络</title>
- <indexterm><primary>无线网络</primary></indexterm> <indexterm><primary>802.11</primary> <see>无线网络</see></indexterm>
-
- <sect2>
- <title>简介</title>
- <para>如果可以使用没有烦人的随时都通过网线连接的计算机,
- 会真的很有用。FreeBSD 可以充当无线客户端,
- 甚至可以做为无线<quote>接入点(access point)</quote>。</para>
- </sect2>
-
- <sect2>
- <title>无线操作模式</title>
- <para>802.11无线设备有两种不同的配置方式:BSS 和 IBSS.</para>
-
- <sect3>
- <title>BSS 模式</title>
- <para>BSS 模式是常用的模式。
- 它也被叫做<quote>底层结构(infrastructure)</quote>模式。
- 在此种模式里,一些无线接入点连接到有线网络。
- 每个无线网络有个名字。这个名字被称为网络的 SSID。</para>
-
- <para>无线客户端连接到这些无线接入点上。
- IEEE 802.11 标准定义了用于无线网络连接的协议。
- 在设定了 SSID 后,一个无线客户端可以连接到一个指定的网络。
- 若不明确指定 SSID,一个无线客户端可以被连接到任何的网络。</para>
- </sect3>
-
- <sect3>
- <title>IBSS 模式</title>
- <para>IBSS 模式,也叫专属(ad-hoc)模式,
- 是设计来进行点对点的接连的。实际上有两种类型的专属模式。
- 一种是 IBSS 模式,也叫"ad-hoc" 或"IEEE ad-hoc"模式。
- 这个模式由 IEEE 802.11 标准定义。
- 第二个叫做演示专属 (demo ad-hoc) 模式或朗讯专属
- (Lucent ad-hoc) 模式 (而有时与专属模式是混淆的)。
- 这个是早先的,准 802.11 专属模式,并且应该只用于过渡性的安装里。
- 对于两类专属模式我不再做进一步介绍了。</para>
- </sect3>
- </sect2>
-
- <sect2>
- <title>底层结构 (Infrastructure) 模式</title>
- <sect3>
- <title>接入点</title>
-
- <para>接入点是一种无线网络设备,
- 它允许一个或更多的无线客户端使用此设备作为中心集线器 (hub)。
- 使用接入点时, 所有的客户端通过接入点通信。
- 常用多个接入点来覆盖一个完整的区域,比如一所住房、
- 一片商业区,或一座公园。</para>
-
- <para>接入点一般具有多个网络连接:无线网卡、
- 一块或多块用于连接其它网络有线的以太网适配器。</para>
-
- <para>可以购买预建的接入点,
- 您也可以使用 FreeBSD 及其兼容的无线网卡自己建立接入点。
- 一些产商制造了带有不同功能的无线接入点和无线网卡。</para>
- </sect3>
-
- <sect3>
- <title>建立 FreeBSD 接入点</title> <indexterm><primary>无线网络</primary> <secondary>接入点</secondary></indexterm>
-
- <sect4><title>要求</title>
-
- <para>为了在 FreeBSD 上建立接入点,您要有一块兼容的无线网卡。
- 至今为止,FreeBSD 只支持带有 Prism 芯片组的网卡。
- 您还需要被 FreeBSD 支持的有线网卡 (这个不难找到,FreeBSD
- 支持很多不同的设备)。在这里,我们假定您要桥接 (&man.bridge.4;)
- 有线网卡连接的网络与无线设备之间的所有传输。</para>
-
- <para>FreeBSD 用来实现接入点的"hostap"功能与一定版本的
- firmware (固件) 工作得很好。Prism 2 网卡应该使用
- firmware1.3.4或更新的版本。Prism 2.5 和 Prism 3
- 网卡应使用firmware1.4.9。老版本的firmware
- 可能无法正常工作。这时候,升级网卡的唯一方式是使用厂商提供的
- &windows; firmware 升级工具。</para>
- </sect4>
-
- <sect4>
- <title>设置并运行</title>
- <para>首先,确保您的系统能识别无线网卡:</para>
- <screen>&prompt.root; <userinput>ifconfig -a</userinput>
-wi0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
- inet6 fe80::202:2dff:fe2d:c938%wi0 prefixlen 64 scopeid 0x7
- inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255
- ether 00:09:2d:2d:c9:50
- media: IEEE 802.11 Wireless Ethernet autoselect (DS/2Mbps)
- status: no carrier
- ssid ""
- stationname "FreeBSD Wireless node"
- channel 10 authmode OPEN powersavemode OFF powersavesleep 100
- wepmode OFF weptxkey 1</screen>
-
- <para>现在不用考虑细节部分,只要确认有信息表明您已安装了无线网卡。
- 如果您无法找到无线接口,您可能使用的是 PC 卡,需要查看
- &man.pccardc.8; 和 &man.pccardd.8; 联机手册以获取更多信息。</para>
-
- <para>下一步,您需要加载一个模块使 FreeBSD
- 的桥接部分为接入点作好准备。 加载桥接 &man.bridge.4;
- 模块,只需运行以下命令:</para>
-
- <screen>&prompt.root; <userinput>kldload bridge</userinput></screen>
-
- <para>加载模块应该不会产生任何错误。如果发生了错误,
- 您就需要将桥接 &man.bridge.4; 代码编译入内核。手册的<link
- linkend="network-bridging">桥接(Bridging)</link>
- 部分应该能帮您完成这个任务。</para>
-
- <para>现在已经完成了桥接的组件,
- 接着我们需要告诉内核将哪些接口桥接在一起。
- 我们使用 &man.sysctl.8; 来完成:</para>
-
- <screen>&prompt.root; <userinput>sysctl net.link.ether.bridge.enable=1</userinput>
-&prompt.root; <userinput>sysctl net.link.ether.bridge.config="wi0 xl0"</userinput>
-&prompt.root; <userinput>sysctl net.inet.ip.forwarding=1</userinput></screen>
-
- <para>在 &os; 5.2 之前的版本中,
- 则必须使用下面的选项:</para>
-
- <screen>&prompt.root; <userinput>sysctl net.link.ether.bridge=1</userinput>
-&prompt.root; <userinput>sysctl net.link.ether.bridge_cfg="wi0,xl0"</userinput>
-&prompt.root; <userinput>sysctl net.inet.ip.forwarding=1</userinput></screen>
-
- <para>现在来设置并启动无线网卡。以下的命令将网卡设置为接入点状态:</para>
-
- <screen>
-&prompt.root; <userinput>ifconfig wi0 ssid <replaceable>my_net</replaceable> channel 11 media DS/11Mbps mediaopt hostap up stationname "<replaceable>FreeBSD AP</replaceable>"</userinput>
- </screen>
-
- <para>&man.ifconfig.8; 行用于启动 <devicename>wi0</devicename> 接口,
- 并把它的 SSID 设置为 <replaceable>my_net</replaceable>,
- 还有把工作站名设置为 <replaceable>FreeBSD AP</replaceable>。
- <option>media DS/11Mbps</option> 是把卡设置成 11Mbps 模式,
- 它是任何<option>mediaopt</option>产生作用所必需的。
- <option>mediaopt hostap</option> 选项把接口设置成接入点模式。
- <option>channel 11</option> 选项设置为要使用的 802.11b channel(频道)。
- &man.wicontrol.8; 手册包含一些有效的channel选项。</para>
-
- <para>现在应该启动并运行着一个完全功能的接入点。
- 推荐阅读 &man.wicontrol.8;,&man.ifconfig.8; 和
- &man.wi.4; 以求更深入的了解。
- </para>
-
- <para>同样建议您阅读接着关于加密那一节。</para>
- </sect4>
-
- <sect4>
- <title>状态信息</title>
- <para>一旦接入点配置完成且可操作,
- 操作者都会希望查看连入接入点的客户。
- 在任何时候,都可以键入:</para>
-
- <screen>&prompt.root; <userinput>wicontrol -l</userinput>
-1 station:
-00:09:b7:7b:9d:16 asid=04c0, flags=3&lt;ASSOC,AUTH&gt;, caps=1&lt;ESS&gt;, rates=f&lt;1M,2M,5.5M,11M&gt;, sig=38/15
-</screen>
-
- <para>显示连接了一个站点,接着的是各种参数。
- 显示的信号通常只作为强度的相对指示。到
- dBm 或其它单元的转换因 firmware 版本的不同而有所差异。</para>
- </sect4>
- </sect3>
-
- <sect3>
- <title>客户端</title>
-
- <para>一个无线客户端是一个连入接入点或直接连接另一个客户端的系统。</para>
-
- <para>一般地,无线客户端只有一个网络设备,也就是无线网卡。</para>
-
- <para>配置无线客户端的方法有好几种。基于不同的无线模式,一般有
- BSS (infrastructure 模式,它需要有一个接入点) 和 IBSS 模式
- (ad-hoc,或点对点模式)。在我们的例子中我们使用了最流行的BSS模式,
- 讨论接入点。</para>
-
- <sect4>
- <title>要求</title>
- <para>将FreeBSD设置为无线客户端事实上只有一个条件。
- 就是您需要有一块能被FreeBSD支持的无线网卡。</para>
- </sect4>
-
- <sect4>
- <title>设置FreeBSD无线客户端</title>
-
- <para>在开始之前,您需要了解有关要连入的无线网络的一些信息。
- 在本例中,我们将连入一个名为 <replaceable>my_net</replaceable>
- 的无线网络,且关闭了加密功能。</para>
-
- <note><para>在本例中,我们不使用加密,这是非常危险的。
- 在下一节中,您将会学到如何开启加密和这样做的重要性的原因,
- 以及为什么一些加密技术仍不能完全地保护您。</para></note>
-
- <para>确保您的网卡能被 FreeBSD 识别:</para>
-
- <screen>&prompt.root; <userinput>ifconfig -a</userinput>
-wi0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
- inet6 fe80::202:2dff:fe2d:c938%wi0 prefixlen 64 scopeid 0x7
- inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255
- ether 00:09:2d:2d:c9:50
- media: IEEE 802.11 Wireless Ethernet autoselect (DS/2Mbps)
- status: no carrier
- ssid ""
- stationname "FreeBSD Wireless node"
- channel 10 authmode OPEN powersavemode OFF powersavesleep 100
- wepmode OFF weptxkey 1</screen>
-
- <para>现在,我们要正确地设置网卡:</para>
-
- <screen>&prompt.root; <userinput>ifconfig wi0 inet <replaceable>192.168.0.20</replaceable> netmask <replaceable>255.255.255.0</replaceable> ssid <replaceable>my_net</replaceable></userinput></screen>
-
- <para>将 <hostid role="ipaddr">192.168.0.20</hostid> 和
- <hostid role="netmask">255.255.255.0</hostid>
- 替换为有线网络上合法的 IP 地址和网络掩码。记住,
- 接入点桥连了无线网络和有线网络之间的数据,
- 所以对于网络上的其它设备来说,您就如同在有线网络上。</para>
-
- <para>完成了这些,您应该能 ping 通有线网络上的主机,
- 就像是通过有线网络连接的一样。</para>
+ <indexterm><primary>wireless networking (无线网络)</primary></indexterm>
+ <indexterm>
+ <primary>802.11</primary>
+ <see>wireless networking (无线网络)</see>
+ </indexterm>
- <para>如果您遇到了问题,确认您是否连上了接入点:</para>
+ <sect2>
+ <title>无线网络基础</title>
+
+ <para>绝大多数无线网络都采用了 IEEE 802.11
+ 标准。 基本的无线网络中, 都包含多个以 2.4GHz 或 5GHz
+ 频段的无线电波广播的站点 (不过, 随所处地域的不同,
+ 或者为了能够更好地进行通讯, 具体的频率会在
+ 2.3GHz 和 4.9GHz 的范围内变化)。</para>
+
+ <para>802.11 网络有两种组织方式: 在
+ <emphasis>infrastructure 模式</emphasis> 中,
+ 一个通讯站作为主站, 其他通讯站都与其关联;
+ 这种网络称为 BSS, 而主站则成为无线访问点 (AP)。
+ 在 BSS 中, 所有的通讯都是通过 AP 来完成的;
+ 即使通讯站之间要相互通讯, 也必须将消息发给 AP。
+ 在第二种形式的网络中, 并不存在主站,
+ 通讯站之间是直接通讯的。 这种网络形式称作 IBSS,
+ 通常也叫做 <emphasis>ad-hoc
+ 网络</emphasis>。</para>
+
+ <para>802.11 网络最初在 2.4GHz 频段上部署,
+ 并采用了由 IEEE 802.11 和 802.11b
+ 标准所定义的协议。 这些标准定义了采用的操作频率、
+ 包括分帧和传输速率 (通讯过程中可以使用不同的速率) 在内的 MAC 层特性等。
+ 稍后的 802.11a 标准定义了使用
+ 5GHz 频段进行操作, 以及不同的信号机制和更高的传输速率。
+ 其后定义的 802.11g 标准启用了在 2.4GHz 上如何使用 802.11a 信号和传输机制,
+ 以提供对较早的 802.11b 网络的向前兼容。</para>
+
+ <para>802.11 网络中采用的各类底层传输机制提供了不同类型的安全机制。
+ 最初的 802.11 标准定义了一种称为 WEP 的简单安全协议。
+ 这个协议采用固定的预发布密钥, 并使用 RC4
+ 加密算法来对在网络上传输的数据进行编码。
+ 全部通讯站都必须采用同样的固定密钥才能通讯。
+ 这一格局已经被证明很容易被攻破, 因此目前已经很少使用了,
+ 采用这种方法只能让那些接入网络的用户迅速断开。
+ 最新的安全实践是由
+ IEEE 802.11i 标准给出的, 它定义了新的加密算法,
+ 并通过一种附加的协议来让通讯站向无线访问点验证身份,
+ 并交换用于进行数据通讯的密钥。 更进一步,
+ 用于加密的密钥会定期地刷新,
+ 而且有机制能够监测入侵的尝试 (并阻止这种尝试)。
+ 无线网络中另一种常用的安全协议标准是 WPA。 这是在 802.11i
+ 之前由业界组织定义的一种过渡性标准。 WPA 定义了在 802.11i
+ 中所规定的要求的子集, 并被设计用来在旧式硬件上实施。
+ 特别地, WPA 要求只使用由最初 WEP
+ 所采用的算法派生的 TKIP 加密算法。 802.11i 则不但允许使用 TKIP,
+ 而且还要求支持更强的加密算法 AES-CCM 来用于加密数据。 (在 WPA
+ 中并没有要求使用 AES 加密算法,
+ 因为在旧式硬件上实施这种算法时所需的计算复杂性太高。)</para>
+
+ <para>除了前面介绍的那些协议标准之外,
+ 还有一种需要介绍的标准是 802.11e。 它定义了用于在 802.11
+ 网络上运行多媒体应用, 如视频流和使用 IP 传送的语音 (VoIP) 的协议。
+ 与 802.11i 类似, 802.11e 也有一个前身标准,
+ 通常称作 WME (后改名为 WMM), 它也是由业界组织定义的 802.11e
+ 的子集, 以便能够在旧式硬件中使用多媒体应用。
+ 关于 802.11e 与 WME/WMM 之间的另一项重要区别是,
+ 前者允许对流量通过服务品质
+ (QoS) 协议和增强媒体访问协议来安排优先级。
+ 对于这些协议的正确实现, 能够实现高速突发数据和流量分级。</para>
+
+ <para>从 6.0 版本开始, &os; 支持采用 802.11a, 802.11b 和 802.11g
+ 的网络。 类似地, 它也支持 WPA 和 802.11i 安全协议 (与
+ 11a、 11b 和 11g 配合), 而 WME/WMM 所需要的 QoS 和流量分级,
+ 则在部分无线设备上提供了支持。</para>
+ </sect2>
- <screen>&prompt.root; <userinput>ifconfig wi0</userinput></screen>
+ <sect2 id="network-wireless-basic">
+ <title>基本安装</title>
- <para>此命令会返回一些信息,您应该能看到:</para>
- <screen>status: associated</screen>
+ <sect3>
+ <title>内核配置</title>
- <para>如果显示没有<literal>连接上 (associated)</literal>,
- 那您可能在接入点的范围以外,需要关闭加密或者可能有配置问题。</para>
+ <para>要使用无线网络, 您需要一块无线网卡,
+ 并适当地配置内核令其提供无线网络支持。
+ 后者被分成了多个模块,
+ 因此您只需配置使用您所需要的软件就可以了。</para>
- </sect4>
- </sect3>
+ <para>首先您需要的是一个无线设备。 最为常用的一种无线配件是
+ Atheros 生产的。 这些设备由 &man.ath.4;
+ 驱动程序提供支持, 您需要把下面的配置加入到
+ <filename>/boot/loader.conf</filename> 文件中:</para>
- <sect3>
- <title>加密</title> <indexterm><primary>无线网络</primary> <secondary>加密</secondary></indexterm>
+ <programlisting>if_ath_load="YES"</programlisting>
- <para>无线网络的加密非常重要因为您无法让网络处于一个被良好保护的区域。
- 您的无线数据会向整个社区广播,任何人都可以读到它。
- 这就需要加密。通过加密向电波发送的数据,
- 使得任何有兴趣的组织从电波中提取数据变得更难。 </para>
+ <para>Atheros 驱动分为三个部分: 驱动部分 (&man.ath.4;)、
+ 用于处理芯片专有功能的支持层
+ (&man.ath.hal.4;), 以及一组用以选择传输帧速率的算法
+ (ath_rate_sample here)。 当以模块方式加载这一支持时,
+ 所需的其它模块会自动加载。 如果您使用的不是 Atheros
+ 设备, 则应选择对应的模块; 例如:</para>
- <para>加密客户端与接入点之间数据的最常用的方法有两种:WEP和&man.ipsec.4;。</para>
+ <programlisting>if_wi_load="YES"</programlisting>
- <sect4>
- <title>WEP</title> <indexterm><primary>WEP</primary></indexterm>
+ <para>表示使用基于 Intersil Prism 产品的无线设备
+ (&man.wi.4; 驱动)。</para>
- <para>WEP 是 Wired Equivalency Protocol(有线等效协议)
- 的缩写。 WEP试图使无线网络变得如有线网络一样安全与可靠。
- 不幸的是它已经被攻破,是非常容易被破解的。
- 这也意味着它不适用于加密敏感数据。</para>
+ <note>
+ <para>在这篇文挡余下的部分中, 我们将使用一张
+ &man.ath.4; 卡作示范, 如果您要套用这些配置的话,
+ 就必须根据实际的配置情况来替换设备名。 在联机手册 &man.wlan.4;
+ 的开头部分给出了一份可用的驱动列表。
+ 如果您的无线设备没有专用于 &os; 的驱动程序,
+ 也可以尝试使用 <link
+ linkend="config-network-ndis">NDIS</link>
+ 驱动封装机制来直接使用 &windows; 驱动。</para>
+ </note>
- <para>但有总比没有好,使用以下命令 FreeBSD 接入点上打开 WEP:</para>
+ <para>在配置好设备驱动之后, 您还需要引入驱动程序所需要的 802.11
+ 网络支持。 对于 &man.ath.4; 驱动而言, 至少需要 &man.wlan.4;
+ 模块; 这个模块会自动随无线设备驱动一同加载。
+ 除此之外, 您还需要提供您希望使用的安全协议所需的加密支持模块。
+ 这些模块是设计来让 &man.wlan.4; 模块根据需要自动加载的,
+ 但目前还必须手工进行配置。 您可以使用下面这些模块: &man.wlan.wep.4;、 &man.wlan.ccmp.4;
+ 和 &man.wlan.tkip.4;。 &man.wlan.ccmp.4; 和
+ &man.wlan.tkip.4; 这两个驱动都只有在您希望采用 WPA 和/或 802.11i
+ 安全协议时才需要。 如果您的网络是完全开放的 (也就是不加密)
+ 则甚至连 &man.wlan.wep.4; 支持也是不需要的。
+ 要在系统引导时加载这些模块, 就需要在
+ <filename>/boot/loader.conf</filename> 中加入下面的配置:</para>
+
+ <programlisting>wlan_wep_load="YES"
+wlan_ccmp_load="YES"
+wlan_tkip_load="YES"</programlisting>
+
+ <para>通过系统引导配置文件 (也就是
+ <filename>/boot/loader.conf</filename>) 中的这些信息生效,
+ 您必须重新启动运行 &os; 的计算机。 如果不想立刻重新启动,
+ 也可以使用
+ &man.kldload.8; 来手工加载。</para>
- <screen>&prompt.root; <userinput>ifconfig wi0 inet up ssid <replaceable>my_net</replaceable> wepmode on wepkey <replaceable>0x1234567890</replaceable> media DS/11Mbps mediaopt hostap</userinput></screen>
+ <note>
+ <para>如果不想加载模块, 也可以将这些驱动编译到内核中,
+ 方法是在内核的编译配置文件中加入下面的配置:</para>
+
+ <programlisting>device ath # Atheros IEEE 802.11 wireless network driver
+device ath_hal # Atheros Hardware Access Layer
+device ath_rate_sample # John Bicket's SampleRate control algorithm.
+device wlan # 802.11 support (Required)
+device wlan_wep # WEP crypto support for 802.11 devices
+device wlan_ccmp # AES-CCMP crypto support for 802.11 devices
+device wlan_tkip # TKIP and Michael crypto support for 802.11 devices</programlisting>
+
+ <para>将这些信息写到内核编译配置文件中之后,
+ 您需要重新编译内核, 并重新启动运行 &os;
+ 的计算机。</para>
+ </note>
- <para>您可以使用以下这个命令在客户端上打开 WEP:</para>
+ <para>在系统启动之后, 您会在引导时给出的信息中,
+ 找到类似下面这样的关于无线设备的信息:</para>
- <screen>&prompt.root; <userinput>ifconfig wi0 inet <replaceable>192.168.0.20</replaceable> netmask <replaceable>255.255.255.0</replaceable> ssid <replaceable>my_net</replaceable> wepmode on wepkey <replaceable>0x1234567890</replaceable></userinput></screen>
+ <screen>ath0: &lt;Atheros 5212&gt; mem 0xff9f0000-0xff9fffff irq 17 at device 2.0 on pci2
+ath0: Ethernet address: 00:11:95:d5:43:62
+ath0: mac 7.9 phy 4.5 radio 5.6</screen>
+ </sect3>
+ </sect2>
- <para>注意您应该将 <replaceable>0x1234567890</replaceable> 替换为更独特的密钥。</para>
+ <sect2>
+ <title>Infrastructure 模式</title>
- </sect4>
+ <para>通常的情形中使用的是 infrastructure 模式或称 BSS 模式。
+ 在这种模式中, 有一系列无线访问点接入了有线网络。
+ 每个无线网都会有自己的名字, 这个名字称作网络的 SSID。
+ 无线客户端都通过无线访问点来完成接入。</para>
- <sect4>
- <title>IPsec</title>
+ <sect3>
+ <title>&os; 客户机</title>
- <para>&man.ipsec.4; 是一个更加强大的网络数据加密工具。
- 它无疑是加密无线网络数据的首选。在手册的
- <link linkend="ipsec">IPsec</link> 部分,您将能更多了解
- &man.ipsec.4; 的安全性及其实现。</para>
- </sect4>
- </sect3>
+ <sect4>
+ <title>如何查找无线访问点</title>
+
+ <para>您可以通过使用
+ <command>ifconfig</command> 命令来扫描网络。
+ 由于系统需要在操作过程中切换不同的无线频率并探测可用的无线访问点,
+ 这种请求可能需要数分钟才能完成。
+ 只有超级用户才能启动这种扫描:</para>
+
+ <screen>&prompt.root; <userinput>ifconfig <replaceable>ath0</replaceable> up scan</userinput>
+SSID BSSID CHAN RATE S:N INT CAPS
+dlinkap 00:13:46:49:41:76 6 54M 29:0 100 EPS WPA WME
+freebsdap 00:11:95:c3:0d:ac 1 54M 22:0 100 EPS WPA</screen>
+
+ <note>
+ <para>在开始扫描之前, 必须将网络接口设为 <option>up</option>。
+ 后续的扫描请求就不需要再将网络接口设为 up 了。</para>
+ </note>
+
+ <para>扫描会列出所请求到的所有 BSS/IBSS
+ 网络列表。 除了网络的名字
+ <literal>SSID</literal> 之外, 我们还会看到
+ <literal>BSSID</literal> 即无线访问点的 MAC 地址。
+ 而 <literal>CAPS</literal> 字段则给出了网络类型及其提供的功能,
+ 其中包括:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><literal>E</literal></term>
+
+ <listitem>
+ <para>Extended Service Set (ESS)。 表示通讯站是
+ infrastructure 网络 (相对于 IBSS/ad-hoc 网络) 的成员。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>I</literal></term>
+
+ <listitem>
+ <para>IBSS/ad-hoc 网络。 表示通讯站是 ad-hoc
+ 网络 (相对于 ESS 网络) 的成员。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>P</literal></term>
+
+ <listitem>
+ <para>私密。 在 BSS 中交换的全部数据帧均需保证数据保密性。
+ 这表示 BSS 需要通讯站使用加密算法,
+ 例如 WEP、 TKIP 或 AES-CCMP 来加密/解密与其他通讯站交换的数据帧。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>S</literal></term>
+
+ <listitem>
+ <para>短前导码 (Short Preamble)。 表示网络采用的是短前导码
+ (由 802.11b High
+ Rate/DSSS PHY 定义, 短前导码采用 56-位 同步字段,
+ 而不是在长前导码模式中所采用的 128-位 字段)。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>s</literal></term>
+
+ <listitem>
+ <para>短碰撞槽时间 (Short slot time)。 表示由于不存在旧式 (802.11b)
+ 通讯站, 802.11g 网络正使用短碰撞槽时间。</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>要显示目前已知的网络, 可以使用下面的命令:</para>
+
+ <screen>&prompt.root; <userinput>ifconfig <replaceable>ath0</replaceable> list scan</userinput></screen>
+
+ <para>这些信息可能会由无线适配器自动更新,
+ 也可使用 <option>scan</option> 手动更新。
+ 快取缓存中的旧数据会自动删除,
+ 因此除非进行更多扫描,
+ 这个列表会逐渐缩小。</para>
+ </sect4>
- <sect3>
- <title>工具</title>
+ <sect4>
+ <title>基本配置</title>
+
+ <para>在这一节中我们将展示一个简单的例子来介绍如何让无线网络适配器在 &os;
+ 中以不加密的方式工作。 在您熟悉了这些概念之后,
+ 我们强烈建议您在实际的使用中采用 <link
+ linkend="network-wireless-wpa">WPA</link> 来配置网络。</para>
+
+ <para>配置无线网络的过程可分为三个基本步骤: 选择无线访问点、
+ 验证您的通讯站身份, 以及配置 IP 地址。
+ 下面的几节中将分步骤地介绍它们。</para>
+
+ <sect5>
+ <title>选择无线访问点</title>
+
+ <para>多数时候让系统以内建的探测方式选择无线访问点就可以了。
+ 这是在您将网络接口置为 up 或在
+ <filename>/etc/rc.conf</filename> 中配置 IP 地址时的默认方式,
+ 例如:</para>
+
+ <programlisting>ifconfig_ath0="DHCP"</programlisting>
+
+ <para>如果存在多个无线访问点, 而您希望从中选择具体的一个,
+ 则可以通过指定 SSID 来实现:</para>
+
+ <programlisting>ifconfig_ath0="ssid <replaceable>your_ssid_here</replaceable> DHCP"</programlisting>
+
+ <para>在某些环境中, 多个访问点可能会使用同样的 SSID (通常,
+ 这样做的目的是简化漫游), 这时可能就需要与某个具体的设备关联了。
+ 这种情况下, 您还应指定无线访问点的
+ BSSID (这时可以不指定
+ SSID):</para>
+
+ <programlisting>ifconfig_ath0="ssid <replaceable>your_ssid_here</replaceable> bssid <replaceable>xx:xx:xx:xx:xx:xx</replaceable> DHCP"</programlisting>
+
+ <para>除此之外, 还有一些其它的方法能够约束查找无线访问点的范围,
+ 例如限制系统扫描的频段, 等等。 如果您的无线网卡支持多个频段,
+ 这样做可能会非常有用, 因为扫描全部可用频段是一个十分耗时的过程。
+ 要将操作限制在某个具体的频段, 可以使用 <option>mode</option>
+ 参数; 例如:</para>
+
+ <programlisting>ifconfig_ath0="mode <replaceable>11g</replaceable> ssid <replaceable>your_ssid_here</replaceable> DHCP"</programlisting>
+
+ <para>就会强制卡使用采用 2.4GHz 的 802.11g, 这样在扫描的时候,
+ 就不会考虑那些 5GHz 的频段了。 除此之外, 还可以通过
+ <option>channel</option> 参数来将操作锁定在特定频率, 以及通过
+ <option>chanlist</option> 参数来指定扫描的频段列表。
+ 关于这些参数的进一步信息, 可以在联机手册 &man.ifconfig.8;
+ 中找到。</para>
+ </sect5>
+
+ <sect5>
+ <title>验证身份</title>
+
+ <para>一旦您选定了无线访问点, 您的通讯站就需要完成身份验证,
+ 以便开始发送和接收数据。 身份验证可以通过许多方式进行,
+ 最常用的一种方式称为开放式验证,
+ 它允许任意通讯站加入网络并相互通信。
+ 这种验证方式只应在您第一次配置无线网络进行测试时使用。
+ 其它的验证方式则需要在进行数据通讯之前,
+ 首先进行密钥协商握手; 这些方式要么使用预先分发的密钥或密码,
+ 要么是用更复杂一些的后台服务, 如 RADIUS。
+ 绝大多数用户会使用默认的开放式验证,
+ 而第二多的则是 WPA-PSK, 它也称为个人 WPA, 在 <link
+ linkend="network-wireless-wpa-wpa-psk">下面</link>
+ 的章节中将进行介绍。</para>
+
+ <note>
+ <para>如果您使用 &apple; &airport; Extreme 基站作为无线访问点,
+ 则可能需要同时在两端配置 WEP 共享密钥验证。 这可以通过在
+ <filename>/etc/rc.conf</filename> 文件中进行设置, 或使用
+ &man.wpa.supplicant.8; 程序来手工完成。 如果您只有一个
+ &airport; 基站, 则可以用类似下面的方法来配置:</para>
+
+ <programlisting>ifconfig_ath0="authmode shared wepmode on weptxkey <replaceable>1</replaceable> wepkey <replaceable>01234567</replaceable> DHCP"</programlisting>
+
+ <para>一般而言, 应尽量避免使用共享密钥这种验证方法,
+ 因为它以非常受限的方式使用 WEP 密钥,
+ 使得攻击者能够很容易地破解密钥。 如果必须使用 WEP (例如,
+ 为了兼容旧式的设备) 最好使用
+ WEP 配合 <literal>open</literal> 验证方式。
+ 关于 WEP 的更多资料请参见 <xref
+ linkend="network-wireless-wep">。</para>
+ </note>
+ </sect5>
+
+ <sect5>
+ <title>通过 DHCP 获取 IP 地址</title>
+
+ <para>在您选定了无线访问点, 并配置了验证参数之后,
+ 还必须获得 IP 地址才能真正开始通讯。 多数时候,
+ 您会通过 DHCP 来获得无线 IP 地址。 要达到这个目的,
+ 只需简单地编辑 <filename>/etc/rc.conf</filename> 并在配置中加入
+ <literal>DHCP</literal>:</para>
+
+ <programlisting>ifconfig_ath0="DHCP"</programlisting>
+
+ <para>现在您已经完成了启用无线网络接口的全部准备工作了,
+ 下面的操作将启用它:</para>
+
+ <screen>&prompt.root; <userinput>/etc/rc.d/netif start</userinput></screen>
+
+ <para>一旦网络接口开始运行, 就可以使用
+ <command>ifconfig</command> 来查看网络接口 <devicename>ath0</devicename>
+ 的状态了:</para>
+
+ <screen>&prompt.root; <userinput>ifconfig <replaceable>ath0</replaceable></userinput>
+ath0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
+ inet6 fe80::211:95ff:fed5:4362%ath0 prefixlen 64 scopeid 0x1
+ inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255
+ ether 00:11:95:d5:43:62
+ media: IEEE 802.11 Wireless Ethernet autoselect (OFDM/54Mbps)
+ status: associated
+ ssid dlinkap channel 6 bssid 00:13:46:49:41:76
+ authmode OPEN privacy OFF txpowmax 36 protmode CTS bintval 100</screen>
+
+ <para>这里的 <literal>status: associated</literal>
+ 表示您已经连接到了无线网络 (在这个例子中, 这个网络的名字是
+ <literal>dlinkap</literal>)。
+ <literal>bssid 00:13:46:49:41:76</literal> 是指您所用无线访问点的
+ MAC 地址;
+ <literal>authmode</literal> 这行指出您所做的通讯将不进行加密
+ (<literal>OPEN</literal>)。</para>
+ </sect5>
+
+ <sect5>
+ <title>静态 IP 地址</title>
+
+ <para>如果无法从某个 DHCP 服务器获得 IP 地址,
+ 则可以配置一个静态 IP 地址,
+ 方法是将前面的 <literal>DHCP</literal> 关键字替换为地址信息。
+ 请务必保持其他用于连接无线访问点的参数:</para>
+
+ <programlisting>ifconfig_ath0="inet <replaceable>192.168.1.100</replaceable> netmask <replaceable>255.255.255.0</replaceable> ssid <replaceable>your_ssid_here</replaceable>"</programlisting>
+ </sect5>
+
+ <sect4 id="network-wireless-wpa">
+ <title>WPA</title>
+
+ <para>WPA (Wi-Fi 保护访问) 是一种与 802.11 网络配合使用的安全协议,
+ 其目的是消除 <link
+ linkend="network-wireless-wep">WEP</link> 中缺少身份验证能力的问题,
+ 以及一些其它的安全弱点。 WPA 采用了 802.1X 认证协议,
+ 并采用从多种与 WEP 不同的加密算法中选择一种来保证数据保密性。
+ WPA 支持的唯一一种加密算法是 TKIP (临时密钥完整性协议),
+ 这是一种对 WEP 所采用的基本 RC4 加密算法的扩展,
+ 除此之外还提供了对检测到的入侵的响应机制。 TKIP
+ 被设计用来与旧式硬件一同工作, 只需要进行部分软件修改;
+ 它提供了一种改善安全性的折衷方案,
+ 但仍有可能受到攻击。 WPA 也指定了
+ AES-CCMP 加密作为 TKIP 的替代品,
+ 在可能时倾向于使用这种加密; 表达这一规范的常用术语是
+ WPA2 (或 RSN)。</para>
+
+ <para>WPA 定义了验证和加密协议。
+ 验证通常是使用两种方法之一来完成的: 通过 802.1X
+ 或类似 RADIUS 这样的后端验证服务,
+ 或通过在通讯站和无线访问点之间通过事先分发的密码来进行最小握手。
+ 前一种通常称作企业 WPA, 而后者通常也叫做个人 WPA。
+ 因为多数人不会为无线网络配置 RADIUS 后端服务器, 旖旎
+ WPA-PSK 是在 WPA 中最为常见的一种。</para>
+
+ <para>对无线连接的控制和身份验证工作 (密钥协商或通过服务器验证)
+ 是通过 &man.wpa.supplicant.8; 工具来完成的。
+ 这个程序运行时需要一个配置文件,
+ <filename>/etc/wpa_supplicant.conf</filename>。
+ 关于这个文件的更多信息, 请参考联机手册
+ &man.wpa.supplicant.conf.5;。</para>
+
+ <sect5 id="network-wireless-wpa-wpa-psk">
+ <title>WPA-PSK</title>
+
+ <para>WPA-PSK 也称作 个人-WPA, 它基于预先分发的密钥 (PSK),
+ 这个密钥是根据作为无线网络上使用的主密钥的密码生成的。
+ 者表示每个无线用户都会使用同样的密钥。 WPA-PSK
+ 主要用于小型网络, 在这种网络中,
+ 通常不需要或没有办法架设验证服务器。</para>
+
+ <warning>
+ <para>无论何时, 都应使用足够长, 且包括尽可能多字母和数字的强口令,
+ 以免被猜出和/或攻击。</para>
+ </warning>
+
+ <para>第一步是修改配置文件
+ <filename>/etc/wpa_supplicant.conf</filename>,
+ 并在其中加入在您网络上使用的 SSID 和事先分发的密钥:</para>
+
+ <programlisting>network={
+ ssid="freebsdap"
+ psk="freebsdmall"
+}</programlisting>
+
+ <para>接下来, 在 <filename>/etc/rc.conf</filename> 中,
+ 我们将指定无线设备的配置, 令其采用 WPA,
+ 并通过 DHCP 来获取 IP 地址:</para>
+
+ <programlisting>ifconfig_ath0="WPA DHCP"</programlisting>
+
+ <para>下面, 启用无线网络接口:</para>
+
+ <screen>&prompt.root; <userinput><filename>/etc/rc.d/netif</filename> start</userinput>
+Starting wpa_supplicant.
+DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 5
+DHCPDISCOVER on ath0 to 255.255.255.255 port 67 interval 6
+DHCPOFFER from 192.168.0.1
+DHCPREQUEST on ath0 to 255.255.255.255 port 67
+DHCPACK from 192.168.0.1
+bound to 192.168.0.254 -- renewal in 300 seconds.
+ath0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
+ inet6 fe80::211:95ff:fed5:4362%ath0 prefixlen 64 scopeid 0x1
+ inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
+ ether 00:11:95:d5:43:62
+ media: IEEE 802.11 Wireless Ethernet autoselect (OFDM/36Mbps)
+ status: associated
+ ssid freebsdap channel 1 bssid 00:11:95:c3:0d:ac
+ authmode WPA privacy ON deftxkey UNDEF TKIP 2:128-bit txpowmax 36
+ protmode CTS roaming MANUAL bintval 100</screen>
+
+ <para>除此之外, 您也可以手动地使用 <link
+ linkend="network-wireless-wpa-wpa-psk">above</link> 中那份
+ <filename>/etc/wpa_supplicant.conf</filename> 来配置,
+ 方法是执行:</para>
+
+ <screen>&prompt.root; <userinput>wpa_supplicant -i <replaceable>ath0</replaceable> -c /etc/wpa_supplicant.conf</userinput>
+Trying to associate with 00:11:95:c3:0d:ac (SSID='freebsdap' freq=2412 MHz)
+Associated with 00:11:95:c3:0d:ac
+WPA: Key negotiation completed with 00:11:95:c3:0d:ac [PTK=TKIP GTK=TKIP]</screen>
+
+ <para>接下来的操作, 是运行
+ <command>dhclient</command> 命令来从 DHCP 服务器获取 IP:</para>
+
+ <screen>&prompt.root; <userinput>dhclient <replaceable>ath0</replaceable></userinput>
+DHCPREQUEST on ath0 to 255.255.255.255 port 67
+DHCPACK from 192.168.0.1
+bound to 192.168.0.254 -- renewal in 300 seconds.
+&prompt.root; <userinput>ifconfig <replaceable>ath0</replaceable></userinput>
+ath0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
+ inet6 fe80::211:95ff:fed5:4362%ath0 prefixlen 64 scopeid 0x1
+ inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
+ ether 00:11:95:d5:43:62
+ media: IEEE 802.11 Wireless Ethernet autoselect (OFDM/48Mbps)
+ status: associated
+ ssid freebsdap channel 1 bssid 00:11:95:c3:0d:ac
+ authmode WPA privacy ON deftxkey UNDEF TKIP 2:128-bit txpowmax 36
+ protmode CTS roaming MANUAL bintval 100</screen>
+
+ <note>
+ <para>如果 <filename>/etc/rc.conf</filename> 的配置中,
+ 使用了 <literal>ifconfig_ath0="DHCP"</literal>,
+ 就不需要手工运行
+ <command>dhclient</command> 命令了, 因为
+ <command>dhclient</command> 将在
+ <command>wpa_supplicant</command> 探测到密钥之后执行。</para>
+ </note>
- <para>有少量用于诊断和设置无线网络的工具,这里我们将介绍几个这样的工具。</para>
+ <para>在这个例子中, DHCP 并不可用, 您可以在
+ <command>wpa_supplicant</command> 为通讯站完成了身份认证之后,
+ 指定静态 IP 地址:</para>
+
+ <screen>&prompt.root; <userinput>ifconfig <replaceable>ath0</replaceable> inet <replaceable>192.168.0.100</replaceable> netmask <replaceable>255.255.255.0</replaceable></userinput>
+&prompt.root; <userinput>ifconfig <replaceable>ath0</replaceable></userinput>
+ath0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
+ inet6 fe80::211:95ff:fed5:4362%ath0 prefixlen 64 scopeid 0x1
+ inet 192.168.0.100 netmask 0xffffff00 broadcast 192.168.0.255
+ ether 00:11:95:d5:43:62
+ media: IEEE 802.11 Wireless Ethernet autoselect (OFDM/36Mbps)
+ status: associated
+ ssid freebsdap channel 1 bssid 00:11:95:c3:0d:ac
+ authmode WPA privacy ON deftxkey UNDEF TKIP 2:128-bit txpowmax 36
+ protmode CTS roaming MANUAL bintval 100</screen>
+
+ <para>如果没有使用 DHCP, 还需要手工配置默认网关,
+ 以及域名服务器:</para>
+
+ <screen>&prompt.root; <userinput>route add default <replaceable>your_default_router</replaceable></userinput>
+&prompt.root; <userinput>echo "nameserver <replaceable>your_DNS_server</replaceable>" &gt;&gt; /etc/resolv.conf</userinput></screen>
+ </sect5>
+
+ <sect5 id="network-wireless-wpa-eap-tls">
+ <title>使用 EAP-TLS 的 WPA</title>
+
+ <para>使用 WPA 的第二种方式是使用 802.1X 后端验证服务器,
+ 在这个例子中, WPA 也称作 企业-WPA,
+ 以便与安全性较差、 采用事先分发密钥的 个人-WPA 区分开来。
+ 在 企业-WPA 中, 验证操作是采用 EAP 完成的
+ (可扩展认证协议)。</para>
+
+ <para>EAP 并未附带加密方法,
+ 因此设计者决定将 EAP 放在加密信道中进行传送。
+ 为此设计了许多 EAP 验证方法,
+ 最常用的方法是 EAP-TLS、 EAP-TTLS 和
+ EAP-PEAP。</para>
+
+ <para>EAP-TLS (带 传输层安全 的 EAP)
+ 是一种在无线世界中得到了广泛支持的验证协议,
+ 因为它是 <ulink
+ url="http://www.wi-fi.org/">Wi-Fi 联盟</ulink>
+ 核准的第一个 EAP 方法。
+ EAP-TLS 需要使用三个证书: CA
+ 证书 (在所有计算机上安装)、 用以向您证明服务器身份的服务器证书,
+ 以及每个无线客户端用于证明身份的客户机证书。 在这种
+ EAP 方式中, 验证服务器和无线客户端均通过自己的证书向对方证明身份,
+ 它们均验证对方的证书是本机构的证书发证机构 (CA) 签发的。</para>
+
+ <para>与之前介绍的方法类似, 配置也是通过
+ <filename>/etc/wpa_supplicant.conf</filename> 来完成的:</para>
+
+ <programlisting>network={
+ ssid="freebsdap" <co id="co-tls-ssid">
+ proto=RSN <co id="co-tls-proto">
+ key_mgmt=WPA-EAP <co id="co-tls-kmgmt">
+ eap=TLS <co id="co-tls-eap">
+ identity="loader" <co id="co-tls-id">
+ ca_cert="/etc/certs/cacert.pem" <co id="co-tls-cacert">
+ client_cert="/etc/certs/clientcert.pem" <co id="co-tls-clientcert">
+ private_key="/etc/certs/clientkey.pem" <co id="co-tls-pkey">
+ private_key_passwd="freebsdmallclient" <co id="co-tls-pwd">
+}</programlisting>
+
+ <calloutlist>
+ <callout arearefs="co-tls-ssid">
+ <para>这个字段表示网络名
+ (SSID)。</para>
+ </callout>
+
+ <callout arearefs="co-tls-proto">
+ <para>这里, 我们使用 RSN (IEEE 802.11i) 协议, 也就是
+ WPA2。</para>
+ </callout>
+
+ <callout arearefs="co-tls-kmgmt">
+ <para><literal>key_mgmt</literal> 这行表示所用的密钥管理协议。
+ 在我们的例子中, 它是使用 EAP 验证的 WPA:
+ <literal>WPA-EAP</literal>。</para>
+ </callout>
+
+ <callout arearefs="co-tls-eap">
+ <para>这个字段中, 提到了我们的连接采用 EAP 方式。</para>
+ </callout>
+
+ <callout arearefs="co-tls-id">
+ <para><literal>identity</literal> 字段包含了 EAP 的实体串。</para>
+ </callout>
+
+ <callout arearefs="co-tls-cacert">
+ <para><literal>ca_cert</literal> 字段给出了 CA 证书文件的路径名。
+ 在验证服务器证书时, 这个文件是必需的。</para>
+ </callout>
+
+ <callout arearefs="co-tls-clientcert">
+ <para><literal>client_cert</literal> 这行给出了客户机证书的路径名。
+ 对每个无线客户端而言, 这个证书都是在全网范围内唯一的。</para>
+ </callout>
+
+ <callout arearefs="co-tls-pkey">
+ <para><literal>private_key</literal> 字段是客户机证书私钥文件的路径名。</para>
+ </callout>
+
+ <callout arearefs="co-tls-pwd">
+ <para><literal>private_key</literal> 字段是私钥的口令字。</para>
+ </callout>
+ </calloutlist>
+
+ <para>接着, 把下面的配置加入到
+ <filename>/etc/rc.conf</filename>:</para>
+
+ <programlisting>ifconfig_ath0="WPA DHCP"</programlisting>
+
+ <para>下一步是使用 <filename>rc.d</filename> 机制来启用网络接口:</para>
+
+ <screen>&prompt.root; <userinput>/etc/rc.d/netif start</userinput>
+Starting wpa_supplicant.
+DHCPREQUEST on ath0 to 255.255.255.255 port 67
+DHCPREQUEST on ath0 to 255.255.255.255 port 67
+DHCPACK from 192.168.0.20
+bound to 192.168.0.254 -- renewal in 300 seconds.
+ath0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
+ inet6 fe80::211:95ff:fed5:4362%ath0 prefixlen 64 scopeid 0x1
+ inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
+ ether 00:11:95:d5:43:62
+ media: IEEE 802.11 Wireless Ethernet autoselect (DS/11Mbps)
+ status: associated
+ ssid freebsdap channel 1 bssid 00:11:95:c3:0d:ac
+ authmode WPA2/802.11i privacy ON deftxkey UNDEF TKIP 2:128-bit
+ txpowmax 36 protmode CTS roaming MANUAL bintval 100</screen>
+
+ <para>如前面提到的那样, 也可以手工通过
+ <command>wpa_supplicant</command> 和
+ <command>ifconfig</command> 命令达到类似的目的。</para>
+ </sect5>
+
+ <sect5 id="network-wireless-wpa-eap-ttls">
+ <title>使用 EAP-TTLS 的 WPA</title>
+
+ <para>在使用 EAP-TLS 时, 参与验证过程的服务器和客户机都需要证书,
+ 而在使用 EAP-TTLS (带传输层安全隧道的 EAP) 时,
+ 客户机证书则是可选的。 这种方式与某些安全 web
+ 站点更为接近, 即使访问者没有客户端证书,
+ 这些 web 服务器也能建立安全的 SSL 隧道。
+ EAP-TTLS 会使用加密的 TLS
+ 隧道来传送验证信息。</para>
+
+ <para>对于它的配置, 同样是通过
+ <filename>/etc/wpa_supplicant.conf</filename>
+ 文件来进行的:</para>
+
+ <programlisting>network={
+ ssid="freebsdap"
+ proto=RSN
+ key_mgmt=WPA-EAP
+ eap=TTLS <co id="co-ttls-eap">
+ identity="test" <co id="co-ttls-id">
+ password="test" <co id="co-ttls-passwd">
+ ca_cert="/etc/certs/cacert.pem" <co id="co-ttls-cacert">
+ phase2="auth=MD5" <co id="co-ttls-pha2">
+}</programlisting>
+
+ <calloutlist>
+ <callout arearefs="co-ttls-eap">
+ <para>这个字段是我们的连接所采用的 EAP 方式。</para>
+ </callout>
+
+ <callout arearefs="co-ttls-id">
+ <para><literal>identity</literal> 字段中是在加密 TLS 隧道中用于 EAP
+ 验证的身份串。</para>
+ </callout>
+
+ <callout arearefs="co-ttls-passwd">
+ <para><literal>password</literal> 字段中是用于 EAP
+ 验证的口令字。</para>
+ </callout>
+
+ <callout arearefs="co-ttls-cacert">
+ <para><literal>ca_cert</literal> 字段给出了 CA 证书文件的路径名。
+ 在验证服务器证书时, 这个文件是必需的。</para>
+ </callout>
+
+ <callout arearefs="co-ttls-pha2">
+ <para>这个字段中给出了加密 TLS 隧道中使用的验证方式。
+ 在这个例子中, 我们使用的是带 MD5-挑战 的 EAP。
+ <quote>inner authentication</quote> 通常也叫
+ <quote>phase2</quote>。</para>
+ </callout>
+ </calloutlist>
+
+ <para>您还必须把下面的配置加入到
+ <filename>/etc/rc.conf</filename>:</para>
+
+ <programlisting>ifconfig_ath0="WPA DHCP"</programlisting>
+
+ <para>下一步是启用网络接口:</para>
+
+ <screen>&prompt.root; <userinput>/etc/rc.d/netif start</userinput>
+Starting wpa_supplicant.
+DHCPREQUEST on ath0 to 255.255.255.255 port 67
+DHCPREQUEST on ath0 to 255.255.255.255 port 67
+DHCPREQUEST on ath0 to 255.255.255.255 port 67
+DHCPACK from 192.168.0.20
+bound to 192.168.0.254 -- renewal in 300 seconds.
+ath0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
+ inet6 fe80::211:95ff:fed5:4362%ath0 prefixlen 64 scopeid 0x1
+ inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
+ ether 00:11:95:d5:43:62
+ media: IEEE 802.11 Wireless Ethernet autoselect (DS/11Mbps)
+ status: associated
+ ssid freebsdap channel 1 bssid 00:11:95:c3:0d:ac
+ authmode WPA2/802.11i privacy ON deftxkey UNDEF TKIP 2:128-bit
+ txpowmax 36 protmode CTS roaming MANUAL bintval 100</screen>
+ </sect5>
+
+ <sect5 id="network-wireless-wpa-eap-peap">
+ <title>使用 EAP-PEAP 的 WPA</title>
+
+ <para>PEAP (受保护的 EAP) 被设计用以替代 EAP-TTLS。
+ 有两种类型的 PEAP 方法, 最常用的是 PEAPv0/EAP-MSCHAPv2。
+ 在这篇文档余下的部分中, 术语 PEAP 是指这种 EAP 方法。
+ PEAP 是在 EAP-TLS 之后最为常用的 EAP 标准,
+ 换言之, 如果您的网络中有多种不同的操作系统,
+ PEAP 将是仅次于 EAP-TLS 的支持最广的标准。</para>
+
+ <para>PEAP 与 EAP-TTLS 很像: 它使用服务器端证书,
+ 通过在客户端与验证服务器之间建立加密的 TLS 隧道来向用户验证身份,
+ 这保护了验证信息的交换过程。 在安全方面,
+ EAP-TTLS 与 PEAP 的区别是 PEAP 会以明文广播用户名,
+ 而只有口令是通过加密 TLS 隧道传送的。 而与此相反,
+ EAP-TTLS 传送用户名和口令时, 都使用 TLS 隧道。</para>
+
+ <para>我们需要编辑
+ <filename>/etc/wpa_supplicant.conf</filename> 文件,
+ 并加入与 EAP-PEAP 有关的配置:</para>
+
+ <programlisting>network={
+ ssid="freebsdap"
+ proto=RSN
+ key_mgmt=WPA-EAP
+ eap=PEAP <co id="co-peap-eap">
+ identity="test" <co id="co-peap-id">
+ password="test" <co id="co-peap-passwd">
+ ca_cert="/etc/certs/cacert.pem" <co id="co-peap-cacert">
+ phase1="peaplabel=0" <co id="co-peap-pha1">
+ phase2="auth=MSCHAPV2" <co id="co-peap-pha2">
+}</programlisting>
+
+ <calloutlist>
+ <callout arearefs="co-peap-eap">
+ <para>这个字段的内容是用于连接的 EAP 方式。</para>
+ </callout>
+
+ <callout arearefs="co-peap-id">
+ <para><literal>identity</literal> 字段中是在加密 TLS 隧道中用于 EAP
+ 验证的身份串。</para>
+ </callout>
+
+ <callout arearefs="co-peap-passwd">
+ <para><literal>password</literal> 字段中是用于 EAP
+ 验证的口令字。</para>
+ </callout>
+
+ <callout arearefs="co-peap-cacert">
+ <para><literal>ca_cert</literal> 字段给出了 CA 证书文件的路径名。
+ 在验证服务器证书时, 这个文件是必需的。</para>
+ </callout>
+
+ <callout arearefs="co-peap-pha1">
+ <para>这个字段包含了第一阶段验证 (TLS
+ 隧道) 的参数。 随您使用的验证服务器的不同,
+ 您需要指定验证的标签。 多数时候,
+ 标签应该是 <quote>客户端 EAP 加密</quote>,
+ 这可以通过使用 <literal>peaplabel=0</literal> 来指定。
+ 更多信息可以在联机手册
+ &man.wpa.supplicant.conf.5; 中找到。</para>
+ </callout>
+
+ <callout arearefs="co-peap-pha2">
+ <para>这个字段的内容是验证协议在加密的 TLS 隧道中使用的信息。
+ 对 PEAP 而言, 这是
+ <literal>auth=MSCHAPV2</literal>。</para>
+ </callout>
+ </calloutlist>
+
+ <para>您还必须把下面的配置加入到
+ <filename>/etc/rc.conf</filename>:</para>
+
+ <programlisting>ifconfig_ath0="WPA DHCP"</programlisting>
+
+ <para>下一步是启用网络接口:</para>
+
+ <screen>&prompt.root; <userinput>/etc/rc.d/netif start</userinput>
+Starting wpa_supplicant.
+DHCPREQUEST on ath0 to 255.255.255.255 port 67
+DHCPREQUEST on ath0 to 255.255.255.255 port 67
+DHCPREQUEST on ath0 to 255.255.255.255 port 67
+DHCPACK from 192.168.0.20
+bound to 192.168.0.254 -- renewal in 300 seconds.
+ath0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
+ inet6 fe80::211:95ff:fed5:4362%ath0 prefixlen 64 scopeid 0x1
+ inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255
+ ether 00:11:95:d5:43:62
+ media: IEEE 802.11 Wireless Ethernet autoselect (DS/11Mbps)
+ status: associated
+ ssid freebsdap channel 1 bssid 00:11:95:c3:0d:ac
+ authmode WPA2/802.11i privacy ON deftxkey UNDEF TKIP 2:128-bit
+ txpowmax 36 protmode CTS roaming MANUAL bintval 100</screen>
+ </sect5>
+ </sect4>
- <sect4>
- <title><application>bsd-airtools</application>包</title>
+ <sect4 id="network-wireless-wep">
+ <title>WEP</title>
- <para><application>bsd-airtools</application>
- 包是一套完整的工具集,包括了用于破解 WEP
- 密匙的无线审核工具,接入点检测等等。</para>
+ <para>WEP (有线等效协议) 是最初
+ 802.11 标准的一部分。 其中没有提供身份验证机制,
+ 只提供了弱访问控制, 而且很容易破解。</para>
- <para><application>bsd-airtools</application>
- 工具集可以用<filename
- role="package">net-mgmt/bsd-airtools</filename> port
- 来安装。关于安装 ports 的信息可以在手册的
- <xref linkend="ports"> 里找到。</para>
+ <para>WEP 可以通过
+ <command>ifconfig</command> 配置:</para>
- <para><command>dstumbler</command> 是一个用于接入点发现和显示音噪比
- (noise ratio) 图表的工具。在您启动运行接入点有困难时,
- <command>dstumbler</command> 可能会帮您大忙。</para>
+ <screen>&prompt.root; <userinput>ifconfig <replaceable>ath0</replaceable> inet <replaceable>192.168.1.100</replaceable> netmask <replaceable>255.255.255.0</replaceable> ssid my_net \
+ wepmode on weptxkey 3 wepkey 3:0x3456789012</userinput></screen>
- <para>为了测试无线网络的安全性,您可以选用
- <quote>dweputils</quote> (<command>dwepcrack</command>,
- <command>dwepdump</command> 和 <command>dwepkeygen</command>)
- 来帮您测定 WEP 是否是您的无线网络安全需要的正确解决方案。</para>
+ <itemizedlist>
+ <listitem>
+ <para><literal>weptxkey</literal> 指明了使用哪个 WEP
+ 密钥来进行数据传输。 这里我们使用第三个密钥。
+ 它必须与无线访问点的配置一致。</para>
+ </listitem>
- </sect4>
+ <listitem>
+ <para><literal>wepkey</literal> 表示设置所选的 WEP 密钥。
+ 其格式应为
+ <replaceable>index:key</replaceable>, 如果没有给出 index 值,
+ 则默认为 <literal>1</literal>。 因此,
+ 如果需要设置的密钥不是第一个, 就必需指定 index 了。</para>
+
+ <note>
+ <para>您需要将 <literal>0x3456789012</literal> 改为在无线接入点上配置的那个。</para>
+ </note>
+ </listitem>
+ </itemizedlist>
- <sect4>
- <title><command>wicontrol</command>, <command>ancontrol</command> 和 <command>raycontrol</command> 工具集</title>
+ <para>我们建议您阅读联机手册 &man.ifconfig.8; 来了解进一步的信息。</para>
- <para>这些工具用于控制无线网卡在无线网络上行为。
- 在以上的例子中,我们选择了 &man.wicontrol.8;,
- 因为我们的无线网卡是 <devicename>wi0</devicename> 接口。
- 如果您有 Cisco (思科) 的无线设备,出现的将是
- <devicename>an0</devicename>,于是您可以使用
- &man.ancontrol.8;。</para>
+ <para><command>wpa_supplicant</command> 机制也可以用来配置您的无线网卡使用 WEP。
+ 前面的例子也可以通过在
+ <filename>/etc/wpa_supplicant.conf</filename> 中加入下述设置来实现:</para>
- </sect4>
+ <programlisting>network={
+ ssid="my_net"
+ key_mgmt=NONE
+ wep_key3=3456789012
+ wep_tx_keyidx=3
+}</programlisting>
- <sect4>
- <title><command>ifconfig</command> 命令</title> <indexterm><primary>ifconfig</primary></indexterm>
+ <para>接着:</para>
- <para>&man.ifconfig.8; 命令可以用来处理大量与
- &man.wicontrol.8; 相同的设置,但它还是少了几个选项。
- 查看 &man.ifconfig.8; 可以了解到命令行参数和选项。</para>
+ <screen>&prompt.root; <userinput>wpa_supplicant -i <replaceable>ath0</replaceable> -c /etc/wpa_supplicant.conf</userinput>
+Trying to associate with 00:13:46:49:41:76 (SSID='dlinkap' freq=2437 MHz)
+Associated with 00:13:46:49:41:76</screen>
+ </sect4>
+ </sect3>
+ </sect2>
- </sect4>
+ <sect2>
+ <title>Ad-hoc 模式</title>
+
+ <para>IBSS 模式, 也称为 ad-hoc 模式, 是为点对点连接设计的。
+ 例如, 如果希望在计算机 <hostid>A</hostid> 和
+ <hostid>B</hostid> 之间建立 ad-hoc 网络,
+ 我们只需选择两个 IP 地址和一个 SSID 就可以了。</para>
+
+ <para>在计算机 <hostid>A</hostid> 上:</para>
+
+ <screen>&prompt.root; <userinput>ifconfig <replaceable>ath0</replaceable> inet <replaceable>192.168.0.1</replaceable> netmask <replaceable>255.255.255.0</replaceable> ssid <replaceable>freebsdap</replaceable> mediaopt adhoc</userinput>
+&prompt.root; <userinput>ifconfig <replaceable>ath0</replaceable></userinput>
+ ath0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
+ inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
+ inet6 fe80::211:95ff:fec3:dac%ath0 prefixlen 64 scopeid 0x4
+ ether 00:11:95:c3:0d:ac
+ media: IEEE 802.11 Wireless Ethernet autoselect &lt;adhoc&gt; (autoselect &lt;adhoc&gt;)
+ status: associated
+ ssid freebsdap channel 2 bssid 02:11:95:c3:0d:ac
+ authmode OPEN privacy OFF txpowmax 36 protmode CTS bintval 100</screen>
+
+ <para>此处的 <literal>adhoc</literal> 参数表示无线网络接口应以 IBSS 模式运转。</para>
+
+ <para>此时, 在 <hostid>B</hostid> 上应该能够检测到
+ <hostid>A</hostid> 的存在了:</para>
+
+ <screen>&prompt.root; <userinput>ifconfig <replaceable>ath0</replaceable> up scan</userinput>
+ SSID BSSID CHAN RATE S:N INT CAPS
+ freebsdap 02:11:95:c3:0d:ac 2 54M 19:0 100 IS</screen>
+
+ <para>在输出中的 <literal>I</literal> 再次确认了 <hostid>A</hostid>
+ 机是以 ad-hoc 模式运行的。 我们只需给 <hostid>B</hostid> 配置一不同的 IP
+ 地址:</para>
+
+ <screen>&prompt.root; <userinput>ifconfig <replaceable>ath0</replaceable> inet <replaceable>192.168.0.2</replaceable> netmask <replaceable>255.255.255.0</replaceable> ssid <replaceable>freebsdap</replaceable> mediaopt adhoc</userinput>
+&prompt.root; <userinput>ifconfig <replaceable>ath0</replaceable></userinput>
+ ath0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500
+ inet6 fe80::211:95ff:fed5:4362%ath0 prefixlen 64 scopeid 0x1
+ inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
+ ether 00:11:95:d5:43:62
+ media: IEEE 802.11 Wireless Ethernet autoselect &lt;adhoc&gt; (autoselect &lt;adhoc&gt;)
+ status: associated
+ ssid freebsdap channel 2 bssid 02:11:95:c3:0d:ac
+ authmode OPEN privacy OFF txpowmax 36 protmode CTS bintval 100</screen>
+
+ <para>这样, <hostid>A</hostid> 和 <hostid>B</hostid> 就可以交换信息了。</para>
+ </sect2>
- </sect3>
+ <sect2>
+ <title>故障排除</title>
- <sect3>
- <title>支持的卡</title>
- <sect4>
- <title>接入点</title>
+ <para>如果您在使用无线网络时遇到了麻烦,
+ 此处提供了一系列用以帮助排除故障的步骤。</para>
- <para>现在唯一被支持用于 BSS (作为接入点) 模式的卡都是基于
- Prism 2、2.5,或 3 芯片组的。要完整的列表,
- 查看 &man.wi.4;。</para>
-
- </sect4>
+ <itemizedlist>
+ <listitem>
+ <para>如果您在列表中找不到无线访问点,
+ 请确认您没有将无线设备配置为使用有限的一组频段。</para>
+ </listitem>
- <sect4>
- <title>802.11b 客户端</title>
+ <listitem>
+ <para>如果您无法关联到无线访问点,
+ 请确认您的通讯站配置与无线访问点的配置一致。
+ 这包括认证模式以及安全协议。 尽可能简化您的配置。
+ 如果您正使用类似 WPA 或 WEP 这样的安全协议,
+ 请将无线访问点配置为开放验证和不采用安全措施,
+ 并检查是否数据能够通过。</para>
+ </listitem>
- <para>现在几乎所有的 802.11b 无线网卡都能被 FreeBSD
- 支持。大多数基于 Prism、Spectrum24、Hermes、Aironet
- 和 Raylink 的网卡能在 IBSS (ad-hoc, peer-to-peer, 和
- BSS)模式下工作。</para>
+ <listitem>
+ <para>一旦您能够关联到无线访问点之后,
+ 就可以使用简单的工具如 &man.ping.8; 来诊断安全配置了。</para>
- </sect4>
+ <para><command>wpa_supplicant</command> 提供了许多调试支持;
+ 尝试手工运行它, 在启动时指定
+ <option>-dd</option> 选项, 并察看输出结果。</para>
+ </listitem>
- <sect4>
- <title>802.11a &amp; 802.11g 客户端</title>
+ <listitem>
+ <para>除此之外还有许多其它的底层调试工具。
+ 您可以使用 <filename>/usr/src/tools/tools/net80211</filename>
+ 中的 <command>wlandebug</command> 命令来启用 802.11
+ 协议支持层的调试功能。 例如:</para>
+
+ <screen>&prompt.root; <userinput>wlandebug -i <replaceable>ath0</replaceable> +scan+auth+debug+assoc</userinput>
+ net.wlan.0.debug: 0 =&gt; 0xc80000&lt;assoc,auth,scan&gt;</screen>
+
+ <para>可以用来启用与扫描无线访问点和 802.11
+ 协议在安排通讯时与握手有关的控制台信息。</para>
+
+ <para>还有许多有用的统计信息是由 802.11 层维护的;
+ <command>wlanstats</command> 工具可以显示这些信息。
+ 这些统计数据能够指出由 802.11 层识别出来的错误。
+ 请注意某些错误可能是由设备驱动在 802.11 层之下识别出来的,
+ 因此这些错误可能并不显示。 要诊断与设备有关的问题,
+ 您需要参考设备驱动程序的文档。</para>
+ </listitem>
+ </itemizedlist>
- <para>&man.ath.4; 设备驱动能够支持 802.11a 和 802.11g。
- 如果您的网卡采用的是 Atheros 芯片组, 就可以使用这个驱动。</para>
-
- <para>不幸的是, 由于认为设计许多敏感的商业机密,
- 许多厂商至今仍不愿意将把驱动程序作为开放源代码形式发布列入时间表。
- 因此, FreeBSD 以及其它操作系统的开发人员只剩下了两种选择:
- 要么经历长时间的痛苦过程来对驱动进行逆向工程,
- 要么使用现存的为
- &microsoft.windows; 平台编译好的驱动程序。 许多开发人员,
- 包括参与 FreeBSD 的那些, 选择了后者。</para>
-
- <para>得益于 Bill Paul (wpaul) 的工作, 从
- FreeBSD&nbsp;5.3-RELEASE 开始, 已经可以 <quote>直接</quote>
- 支持网络驱动接口规范
- (NDIS)。 FreeBSD NDISulator (也被称为 Project Evil)
- 可以支持二进制形式的 &windows; 驱动程序,
- 并让它相信正在运行的是 &windows;。 这是一个相对较新的功能,
- 但许多测试证明, 它确实相当有效。</para>
-
- <indexterm><primary>NDIS</primary></indexterm>
- <indexterm><primary>NDISulator</primary></indexterm>
- <indexterm><primary>&windows; drivers</primary></indexterm>
- <indexterm><primary>Microsoft Windows</primary></indexterm>
- <indexterm><primary>Microsoft Windows</primary>
- <secondary>设备驱动</secondary></indexterm>
- <indexterm><primary>KLD (内核可加载对象)</primary></indexterm>
-<!-- We should probably omit the expanded name, and add a <see> entry
-for it. Whatever is done must also be done to the same indexterm in
-linuxemu/chapter.sgml -->
-
- <para>要使用 NDISulator, 您需要三件东西:</para>
-
- <orderedlist>
- <listitem>
- <para>内核源代码</para>
- </listitem>
- <listitem>
- <para>二进制形式的 &windowsxp; 驱动程序
- (扩展名是 <filename>.SYS</filename>)</para>
- </listitem>
- <listitem>
- <para>&windowsxp; 驱动程序配置文件
- (扩展名是 <filename>.INF</filename>)</para>
- </listitem>
- </orderedlist>
-
- <para>您可能需要编译 &man.ndis.4; 袖珍端口驱动封装模块。
- 这一操作需要以 <username>root</username> 身份来完成:</para>
-
- <screen>&prompt.root; <userinput>cd /usr/src/sys/modules/ndis</userinput>
-&prompt.root; <userinput>make &amp;&amp; make install</userinput></screen>
-
- <para>找到您的卡所需的文件。 一般来说,
- 您应该能在随卡的 CD 或者制造商的网站上找到。
- 下面的例子中, 我们将使用
- <filename>W32DRIVER.SYS</filename> 和
- <filename>W32DRIVER.INF</filename> 这两个名字。</para>
-
- <para>接下来的步骤是将二进制形式的驱动程序组装成内核模块。
- 要完成这一任务, 需要以
- <username>root</username> 身份进入
- <filename>if_ndis</filename> 模块的目录, 并将
- &windows; 驱动程序复制到这里:</para>
-
- <screen>&prompt.root; <userinput>cd /usr/src/sys/modules/if_ndis</userinput>
-&prompt.root; <userinput>cp <replaceable>/path/to/driver/W32DRIVER.SYS</replaceable> ./</userinput>
-&prompt.root; <userinput>cp <replaceable>/path/to/driver/W32DRIVER.INF</replaceable> ./</userinput></screen>
-
- <para>接下来我们将使用 <command>ndiscvt</command> 工具来创建驱动定义的头文件
- <filename>ndis_driver_data.h</filename>, 用以构建驱动程序:</para>
-
- <screen>&prompt.root; <userinput>ndiscvt -i <replaceable>W32DRIVER.INF</replaceable> -s <replaceable>W32DRIVER.SYS</replaceable> -o ndis_driver_data.h</userinput></screen>
-
- <para>选项 <option>-i</option> 和 <option>-s</option>
- 分别用于指定配置和二进制形式的驱动程序。 我们使用
- <option>-o ndis_driver_data.h</option> 参数, 因为
- <filename>Makefile</filename> 在构建内核模块时会查找它。</para>
-
- <note>
- <para>某些 &windows; 驱动程序需要一些额外的文件才能正常工作。
- 您可以把它们放到 <command>ndiscvt</command> 命令的
- <option>-f</option> 参数后面。 请参考 &man.ndiscvt.8;
- 联机手册了解更多详情。</para>
- </note>
-
- <para>最后, 就可以构建并安装内核模块了:</para>
-
- <screen>&prompt.root; <userinput>make &amp;&amp; make install</userinput></screen>
-
- <para>要使用驱动程序, 您需要加在适当的内核模块:</para>
-
- <screen>&prompt.root; <userinput>kldload ndis</userinput>
-&prompt.root; <userinput>kldload if_ndis</userinput></screen>
-
- <para>第一个命令会加载 NDIS 袖珍端口驱动封装模块,
- 第二个则加载实际的网卡。 请查看
- &man.dmesg.8; 的输出以了解是否在加载过程中存在错误。
- 如果一切正常, 您应该能看到类似下面的输出:</para>
-
- <screen>ndis0: &lt;Wireless-G PCI Adapter&gt; mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
-ndis0: NDIS API version: 5.0
-ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
-ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
-ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps</screen>
-
- <para>这里您可以像使用其它任何无线设备 (例如 <devicename>wi0</devicename>)
- 那样使用 <devicename>ndis0</devicename> 设备。
- 具体细节可以参考线面章节的讨论。</para>
-
- </sect4>
-
- </sect3>
- </sect2>
+ <para>如果上述信息没能帮助您找到具体的问题所在,
+ 请提交问题报告, 并在其中附上这些工具的输出。</para>
+ </sect2>
</sect1>
<sect1 id="network-bluetooth">
diff --git a/zh_CN.GB2312/books/handbook/book.sgml b/zh_CN.GB2312/books/handbook/book.sgml
index c488b67e96..4ad4f3c127 100644
--- a/zh_CN.GB2312/books/handbook/book.sgml
+++ b/zh_CN.GB2312/books/handbook/book.sgml
@@ -140,8 +140,10 @@
url="http://www.FreeBSD.org/">FreeBSD Web站点</ulink> 上获得
(这本手册的较早期版本可以在 <ulink
url="http://docs.FreeBSD.org/doc/"></ulink> 找到),
- 最新中文译本可从 <ulink url='&cnproj.url.base;/'>&cnproj.freebsd.org; Web站点</ulink> 获得。
- 此外, 您也可以从 <ulink
+ 由 <ulink url='&cnproj.url.base;/'>&cnproj.freebsd.org;</ulink>
+ 维护的最新译本可以在 <ulink url='&cnsnap.url.base;/zh_CN/'>&cnproj.freebsd.org; 快照 Web 站点</ulink>
+ 和 <ulink url='&cnsnap.url.base;/doc/zh_CN.GB2312/'>&cnproj.freebsd.org; 文档快照</ulink>
+ 处获得, 这一译本会不断向主站同步。 此外, 您也可以从 <ulink
url="ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/">FreeBSD 的 FTP
服务器</ulink> 或众多的 <link
linkend="mirrors-ftp">镜像站点</link> 得到这份文档的各种其他格式以及压缩形式的版本。
diff --git a/zh_CN.GB2312/books/handbook/config/chapter.sgml b/zh_CN.GB2312/books/handbook/config/chapter.sgml
index 7e1b8d484b..ae23b103d3 100644
--- a/zh_CN.GB2312/books/handbook/config/chapter.sgml
+++ b/zh_CN.GB2312/books/handbook/config/chapter.sgml
@@ -2,7 +2,7 @@
The FreeBSD Documentation Project
The FreeBSD Chinese Documentation Project
- Original Revision: 1.220
+ Original Revision: 1.221
$FreeBSD$
-->
@@ -170,7 +170,7 @@
很多读写频繁的被放在 <filename>/var</filename> 和
<filename>/var/tmp</filename>中。</para>
- <para>适当的划分一个系统,用比较小的分区方法,
+ <para>适当的划分一个系统, 在其中使用较小的分区, 这样,
那些以写为主的分区将不会比以读为主的分区付出更高的代价。
将以写为主的分区放在靠近磁盘的边缘,
例如放在实际的大硬盘的前面代替放在分区表的后面,将会提高您需要的分区的
@@ -777,8 +777,10 @@ ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto</screen>
<itemizedlist>
<listitem>
<para>最简单的办法是用 &man.kldload.8; 加载网卡对应的内核模块。
- 并不是所有的网卡都能够通过这种方法提供支持;
- 比较明显的例子是 ISA 网卡。</para>
+ 除此之外, 通过在 <filename>/boot/loader.conf</filename>
+ 文件中加入适当的设置, 也可以让系统在引导时自动加载这些模块。
+ 不过, 并不是所有的网卡都能够通过这种方法提供支持;
+ ISA 网卡是比较典型的例子。</para>
</listitem>
<listitem>
@@ -792,6 +794,119 @@ ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto</screen>
您应该不需要编译新的内核。</para>
</listitem>
</itemizedlist>
+
+ <sect3 id="config-network-ndis">
+ <title>使用 &windows; NDIS 驱动程序</title>
+
+ <indexterm><primary>NDIS</primary></indexterm>
+ <indexterm><primary>NDISulator</primary></indexterm>
+ <indexterm><primary>&windows; 驱动程序</primary></indexterm>
+ <indexterm><primary>Microsoft Windows</primary></indexterm>
+ <indexterm><primary>Microsoft Windows</primary>
+ <secondary>device drivers (设备驱动)</secondary></indexterm>
+ <indexterm><primary>KLD (kernel loadable
+ object)</primary></indexterm>
+<!-- We should probably omit the expanded name, and add a <see> entry
+for it. Whatever is done must also be done to the same indexterm in
+linuxemu/chapter.sgml -->
+
+ <para>不幸的是, 许多厂商由于认为驱动程序会涉及许多敏感的商业机密,
+ 至今仍不愿意将把驱动程序作为开放源代码形式发布列入他们的时间表。
+ 因此, &os; 和其他操作系统的开发者就只剩下了两种选择:
+ 要么经历长时间的痛苦过程来对驱动进行逆向工程,
+ 要么使用现存的为
+ &microsoft.windows; 平台提供的预编译版本的驱动程序。
+ 包括参与 &os; 开发的绝大多数开发人员,
+ 都选择了后一种方法。</para>
+
+ <para>得益于 Bill Paul (wpaul) 的工作, 从
+ &os;&nbsp;5.3-RELEASE 开始, 已经可以 <quote>直接地</quote>
+ 支持 网络驱动接口标准 (NDIS, Network Driver Interface Specification) 了。
+ &os; NDISulator (也被称为 Project Evil) 可以支持二进制形式的
+ &windows; 驱动程序, 并让它相信正在运行的是 &windows;。 由于
+ &man.ndis.4; 驱动使用的是用于 &windows; 的二进制形式的驱动,
+ 因此它只能在 &i386; 和 amd64 系统上使用。</para>
+
+ <note>
+ <para>&man.ndis.4; 驱动在设计时主要提供了
+ PCI、 CardBus 和 PCMCIA 设备的支持,
+ 而 USB 设备目前则没有提供支持。</para>
+ </note>
+
+ <para>要使用 NDISulator, 您需要三件东西:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>内核的源代码</para>
+ </listitem>
+ <listitem>
+ <para>二进制形式的 &windowsxp; 驱动程序
+ (扩展名为 <filename>.SYS</filename>)</para>
+ </listitem>
+ <listitem>
+ <para>&windowsxp; 驱动程序配置文件
+ (扩展名为 <filename>.INF</filename>)</para>
+ </listitem>
+ </orderedlist>
+
+ <para>您需要找到用于您的卡的这些文件。 一般而言,
+ 这些文件可以在随卡附送的 CD 或制造商的网站上找到。
+ 在下面的例子中, 我们用
+ <filename>W32DRIVER.SYS</filename> 和
+ <filename>W32DRIVER.INF</filename> 来表示这些文件。</para>
+
+ <note>
+ <para>不能在 &os;/amd64 上使用 &windows;/i386 驱动程序。
+ 必须使用 &windows;/amd64 驱动才能在其上正常工作。</para>
+ </note>
+
+ <para>接下来的步骤是将二进制形式的驱动程序组装成内核模块。
+ 要完成这一任务, 需要以
+ <username>root</username> 用户的身份执行 &man.ndisgen.8;:</para>
+
+ <screen>&prompt.root; <userinput>ndisgen <replaceable>/path/to/W32DRIVER.INF</replaceable> <replaceable>/path/to/W32DRIVER.SYS</replaceable></userinput></screen>
+
+ <para>&man.ndisgen.8; 是一个交互式的程序,
+ 它会提示您输入所需的一些其他的额外信息;
+ 这些工作完成之后, 它会在当前目录生成一个内核模块文件,
+ 这个文件可以通过下述命令来加载:</para>
+
+ <screen>&prompt.root; <userinput>kldload <replaceable>./W32DRIVER.ko</replaceable></userinput></screen>
+
+ <para>除了刚刚生成的内核模块之外,
+ 还必须加载 <filename>ndis.ko</filename> 和
+ <filename>if_ndis.ko</filename> 这两个内核模块, 在您加载需要
+ &man.ndis.4; 的模块时, 通常系统会自动完成这一操作。
+ 如果希望手工加载它们, 则可以使用下列命令:</para>
+
+ <screen>&prompt.root; <userinput>kldload ndis</userinput>
+&prompt.root; <userinput>kldload if_ndis</userinput></screen>
+
+ <para>第一个命令会加载 NDIS 袖珍端口驱动封装模块,
+ 而第二条命令则加载实际的网络接口。</para>
+
+ <para>现在请查看 &man.dmesg.8; 来了解是否发生了错误。
+ 如果一切正常, 您会看到类似下面的输出:</para>
+
+ <screen>ndis0: &lt;Wireless-G PCI Adapter&gt; mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
+ndis0: NDIS API version: 5.0
+ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
+ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
+ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps</screen>
+
+ <para>这之后, 就可以像使用其它网络接口
+ (例如 <devicename>dc0</devicename>) 一样来使用
+ <devicename>ndis0</devicename> 设备了。</para>
+
+ <para>与任何其它模块一样, 您也可以配置系统,
+ 令其在启动时自动加载 NDIS 模块。 首先, 将生成的模块
+ <filename>W32DRIVER.ko</filename> 复制到 <filename
+ class="directory">/boot/modules</filename> 目录中。
+ 接下来, 在
+ <filename>/boot/loader.conf</filename> 中加入:</para>
+
+ <programlisting>W32DRIVER_load="YES"</programlisting>
+ </sect3>
</sect2>
<sect2>
@@ -1986,7 +2101,7 @@ kern.maxvnodes: 100000</programlisting>
<title>添加交换空间</title>
<para>
- 不管您计划的如何好,有时候系统并不像您所期待的那样运行。
+ 不管您计划得如何好,有时候系统并不像您所期待的那样运行。
如果您发现需要更多的交换空间,添加它很简单。
有三种方法增加交换空间:添加一块新的硬盘驱动器、通过
NFS 使用交换空间和在一个现有的分区上创建一个交换文件。</para>
@@ -2007,7 +2122,7 @@ kern.maxvnodes: 100000</programlisting>
<sect2 id="nfs-swap">
<title>通过 NFS 交换</title>
- <para>除非没有可以用做交换空间的本地硬盘时,
+ <para>除非没有可以用作交换空间的本地硬盘时,
否则不推荐您使用 NFS 来作为交换空间使用。
NFS 交换会受到可用网络带宽限制并且增加 NFS 服务器的负担。</para>
</sect2>
@@ -2204,11 +2319,11 @@ kern.maxvnodes: 100000</programlisting>
<secondary>problems</secondary>
</indexterm>
- <para><acronym>ACPI</acronym> 是一种全新的发现设备、 管理电源使用,
- 提供过去由 <acronym>BIOS</acronym> 管理的访问不同硬件的标准化方法。
+ <para><acronym>ACPI</acronym> 是一种全新的发现设备、 管理电源使用、
+ 以及提供过去由 <acronym>BIOS</acronym> 管理的访问不同硬件的标准化方法。
让 <acronym>ACPI</acronym> 在各种系统上都能正确使用的工作一直在进行,
但许多主板的 <firstterm><acronym>ACPI</acronym> 机器语言</firstterm>
- (<acronym>AML</acronym>) 字节代码中的 bug, &os; 的内核中资系统设计的不完善,
+ (<acronym>AML</acronym>) 字节代码中的 bug, &os; 的内核中子系统设计的不完善,
以及 &intel;
<acronym>ACPI-CA</acronym> 解释器中的 bug 仍然不时会出现。</para>
@@ -2226,7 +2341,7 @@ kern.maxvnodes: 100000</programlisting>
</note>
<para>如果您希望提交一个问题,
- 请确保将下述信息法到
+ 请确保将下述信息发到
<ulink url="mailto:freebsd-acpi@FreeBSD.org">
freebsd-acpi@FreeBSD.org</ulink>:</para>
@@ -2468,7 +2583,7 @@ hw.acpi.s4bios: 0</screen>
<title>崩溃</title>
<para>崩溃对于 <acronym>ACPI</acronym> 是比较罕见的情况,
- 如果发现, 将会非常重视并很快修复。
+ 如果发现, 我们将会非常重视并很快修复它。
您要做的第一件事是设法隔离出能够重现崩溃 (如果可能的话)
的操作并获取一份调用堆栈。 请启用
<option>options DDB</option> 并设置串行控制台
@@ -2503,7 +2618,7 @@ hw.acpi.s4bios: 0</screen>
(同 docking station 协同工作、 无法检测设备, 等等),
请把描述发给邮件列表; 不过, 这些问题也有可能和
<acronym>ACPI</acronym> 中尚未完成的部分有关,
- 它们可能需要时间才能被实现。 请保持耐心,
+ 它们可能需要时间才能被实现。 请给点耐心,
并准备测试我们可能会发给您的补丁。</para>
</sect3>
</sect2>
diff --git a/zh_CN.GB2312/books/handbook/disks/chapter.sgml b/zh_CN.GB2312/books/handbook/disks/chapter.sgml
index fd8dc1d175..155b930fd9 100644
--- a/zh_CN.GB2312/books/handbook/disks/chapter.sgml
+++ b/zh_CN.GB2312/books/handbook/disks/chapter.sgml
@@ -2,7 +2,7 @@
The FreeBSD Documentation Project
The FreeBSD Simplified Chinese Project
- Original Revision: 1.262
+ Original Revision: 1.263
$FreeBSD$
-->
@@ -1144,7 +1144,16 @@ scsibus1:
role="package">sysutils/cdrdao</filename> 或者
&man.cdrecord.1; 这样的程序。</para>
- <para>要使用这个驱动, 您需要把下面几行添加到您的内核配置文件中:</para>
+ <para>要使用这个驱动, 您需要把下面这行添加到 <filename>/boot/loader.conf</filename>
+ 文件中:</para>
+
+ <programlisting>atapicam_load="YES"</programlisting>
+
+ <para>接下来, 重新启动计算机。</para>
+
+ <note>
+ <para>如果您希望将 &man.atapicam.4; 以静态联编的形式加入内核,
+ 则需要在内核配置文件中加入这行:</para>
<programlisting>device atapicam</programlisting>
@@ -1155,10 +1164,11 @@ device scbus
device cd
device pass</programlisting>
- <para>这些应该已经有了。</para>
+ <para>这些应该已经有了。 然后, 重新联编并安装新内核,
+ 并重新启动计算机。</para>
+ </note>
- <para>然后重建,安装您的新内核,重新启动机器。
- 在启动过程中,您的刻录机会被识别,
+ <para>在引导过程中, 您的刻录机将会出现在内核的提示信息中,
就像这样:</para>
<screen>acd0: CD-RW &lt;MATSHITA CD-RW/DVD-ROM UJDA740&gt; at ata1-master PIO4
diff --git a/zh_CN.GB2312/books/handbook/firewalls/chapter.sgml b/zh_CN.GB2312/books/handbook/firewalls/chapter.sgml
index 96d479fca3..a795bf4fb4 100644
--- a/zh_CN.GB2312/books/handbook/firewalls/chapter.sgml
+++ b/zh_CN.GB2312/books/handbook/firewalls/chapter.sgml
@@ -2,7 +2,7 @@
The FreeBSD Documentation Project
The FreeBSD Simplified Chinese Project
- Original Revision: 1.70
+ Original Revision: 1.71
$FreeBSD$
-->
@@ -1670,19 +1670,22 @@ block in log first quick on dc0 all
<sect3>
<title>使用公网地址池</title>
- <para>对于很大的 LAN 来说, 总会有一个临界值,
- 此时 LAN 的地址会多到没办法使用一个公网地址表达的程度。
- 这时, 类似下面的规则需要进行修改:</para>
+ <para>对很大的 LAN 而言, 总有一天会达到这样一个临界值,
+ 此时的 LAN 地址已经多到了无法只用一个公网地址表现的程度。
+ 如果有可用的一块公网 IP 地址, 则可以将这些地址作为一个
+ <quote>地址池</quote> 来使用, 让 IP<acronym>NAT</acronym>
+ 来从这些公网 IP 地址中挑选用于发包的地址,
+ 并将其为这些包创建映射关系。</para>
+
+ <para>例如, 如果将下面这个把所有包都映射到同一公网 IP 地址的规则:</para>
<programlisting>map dc0 192.168.1.0/24 -&gt; 204.134.75.1</programlisting>
- <para>目前的这个规则, 将所有的链接都通过 <hostid
- role="ipaddr">204.134.75.1</hostid> 来映射。
- 可以把它改为一个范围:</para>
+ <para>稍作修改, 就可以用子网掩码来表达 IP 地址范围:</para>
- <programlisting>map dc0 192.168.1.0/24 -&gt; 204.134.75.1-10</programlisting>
+ <programlisting>map dc0 192.168.1.0/24 -&gt; 204.134.75.0/255.255.255.0</programlisting>
- <para>或者使用 CIDR 记法指定的一组地址:</para>
+ <para>或者用 CIDR 记法来指定的一组地址了:</para>
<programlisting>map dc0 192.168.1.0/24 -&gt; 204.134.75.0/24</programlisting>
</sect3>
diff --git a/zh_CN.GB2312/books/handbook/install/chapter.sgml b/zh_CN.GB2312/books/handbook/install/chapter.sgml
index 3f64a48466..374395d7be 100644
--- a/zh_CN.GB2312/books/handbook/install/chapter.sgml
+++ b/zh_CN.GB2312/books/handbook/install/chapter.sgml
@@ -1984,7 +1984,7 @@ installation menus to retry whichever operations have failed.
<listitem>
<para>输入将数据包传送到远端网络的机器IP地址。只有当机器是网络上的
- 一个接点时才要输入。如果这台机器要作为您局域网的网关,
+ 一个节点时才要输入。如果这台机器要作为您局域网的网关,
<emphasis>请将此处设为空白</emphasis>。IPv4网关,也被称作默认网关或
默认路由器。</para>
</listitem>
@@ -2379,7 +2379,7 @@ Press [Enter] now to invoke an editor on /etc/exports
<keycap>Enter</keycap> 会将安全等级高为中度安全。</para>
<para>选择 &gui.yes; 并按
- <keycap>Enter</keycap>将允许您选择不同程序的安全等级。</para>
+ <keycap>Enter</keycap>将允许您选择其它程度的安全等级。</para>
<figure id="security-profile">
<title>选择安全等级</title>
diff --git a/zh_CN.GB2312/books/handbook/mac/chapter.sgml b/zh_CN.GB2312/books/handbook/mac/chapter.sgml
index 50784461d9..95bdd64fe2 100644
--- a/zh_CN.GB2312/books/handbook/mac/chapter.sgml
+++ b/zh_CN.GB2312/books/handbook/mac/chapter.sgml
@@ -2,7 +2,7 @@
The FreeBSD Documentation Project
The FreeBSD Simplified Chinese Project
- Original Revision: 1.67
+ Original Revision: 1.68
$FreeBSD$
-->
@@ -1502,7 +1502,6 @@ test: biba/low</screen>
以便让模块随系统初始化一同加载:</para>
<programlisting>mac_biba_load="YES"
-mac_biba_load="YES"
mac_seeotheruids_load="YES"</programlisting>
</sect2>
diff --git a/zh_CN.GB2312/books/handbook/ports/chapter.sgml b/zh_CN.GB2312/books/handbook/ports/chapter.sgml
index 4649fec165..43d4323e25 100644
--- a/zh_CN.GB2312/books/handbook/ports/chapter.sgml
+++ b/zh_CN.GB2312/books/handbook/ports/chapter.sgml
@@ -577,7 +577,7 @@ docbook =
功能的详细描述。</para>
<step>
- <para>如果您使用 &os;&nbsp;6.1-RELEASE 或,
+ <para>如果您使用 &os;&nbsp;6.1-RELEASE,
或通过 port 或 package 安装了较新版本的 <application>Portsnap</application>
的话, 可以直接跳过这一步。 <filename
role="directory">/usr/ports</filename> 将在首次使用 &man.portsnap.8;
diff --git a/zh_CN.GB2312/books/handbook/serialcomms/chapter.sgml b/zh_CN.GB2312/books/handbook/serialcomms/chapter.sgml
index 7087c46134..03756c3a4b 100644
--- a/zh_CN.GB2312/books/handbook/serialcomms/chapter.sgml
+++ b/zh_CN.GB2312/books/handbook/serialcomms/chapter.sgml
@@ -2,7 +2,7 @@
The FreeBSD Documentation Project
The FreeBSD Simplified Chinese Project
- Original Revision: 1.113
+ Original Revision: 1.116
$FreeBSD$
-->
@@ -14,17 +14,17 @@
<indexterm><primary>串口通讯</primary></indexterm>
<para>&unix; 一直都是支持串口通讯的。事实上,
- 早期的 &unix; 系统就是利用串行线来输入和输出数据的。
- 那时常见的 <quote>终端</quote> 包括一个每秒10个字符的串行打印机和键盘,
+ 早期的 &unix; 系统就是利用串口线来输入和输出数据的。
+ 那时常见的 <quote>终端</quote> 包括一个每秒10个字符的串口打印机和键盘,
现在这些已经发生了很大的变化。 这章将介绍一些利用 FreeBSD
- 进行串行通讯的方法。</para>
+ 进行串口通讯的方法。</para>
<para>读完这章,您将了解到:</para>
<itemizedlist>
<listitem><para>如何通过终端连接到您的FreeBSD系统。</para></listitem>
<listitem><para>如何使用modem拨号到远程主机。</para></listitem>
<listitem><para>如何允许远程用户通过modem登录到您的系统。</para></listitem>
- <listitem><para>如何从串行控制台引导您的系统。</para></listitem>
+ <listitem><para>如何从串口控制台引导您的系统。</para></listitem>
</itemizedlist>
<para>阅读这章之前,您应当了解:</para>
@@ -74,7 +74,7 @@
<term>RS-232</term>
<indexterm><primary>RS-232C cables</primary></indexterm>
<listitem>
- <para>用于硬件串行通讯的EIA标准</para>
+ <para>用于硬件串口通讯的EIA标准</para>
</listitem>
</varlistentry>
</variablelist>
@@ -418,13 +418,13 @@
<sect3 id="term-ports">
<title>端口</title>
- <para>串行端口是FreeBSD主机与终端传输数据的设备。
+ <para>串口是FreeBSD主机与终端传输数据的设备。
这节描述了端口的种类和它们在 FreeBSD 上是如何编址的。</para>
<sect4 id="term-portkinds">
<title>端口的种类</title>
- <para>有好几种串口端口。 在采购或制作线缆之前,
+ <para>有好几种串口。 在采购或制作线缆之前,
您应确认它能够适合您的终端以及 FreeBSD 系统。</para>
<para>绝大多数终端都提供 DB-25 端口。 个人计算机,
@@ -440,7 +440,7 @@
<title>端口名称Port Names</title>
<para>在FreeBSD中,您可以通过 <filename>/dev</filename>
- 目录中的一个记录来访问每个串行端口。有两种不同的记录:</para>
+ 目录中的一个记录来访问每个串口。有两种不同的记录:</para>
<itemizedlist>
<listitem>
@@ -453,7 +453,7 @@
<listitem>
<para>呼出端口被命名为 <filename>/dev/cuad<replaceable>N</replaceable></filename>。
您通常不使用呼出端口作为终端, 只使用modem。
- 如果串行线或终端不支持载波检测数据传输,
+ 如果串口线或终端不支持载波检测数据传输,
您可以使用呼出端口。</para>
<note><para>在 &os;&nbsp;5.X 和更早版本中, 呼出端口的名字是
@@ -461,10 +461,10 @@
</listitem>
</itemizedlist>
- <para>如果您已经连接一个终端到第一个串行端口 (在 &ms-dos;
+ <para>如果您已经连接一个终端到第一个串口 (在 &ms-dos;
上是<devicename>COM1</devicename>),
则可以使用 <filename>/dev/ttyd0</filename> 来作为终端。
- 如果它是在第二个串行端口 (<devicename>COM2</devicename>),
+ 如果它是在第二个串口 (<devicename>COM2</devicename>),
那就是 <filename>/dev/ttyd1</filename>,等等。</para>
</sect4>
@@ -474,14 +474,14 @@
<sect2>
<title>内核配置</title>
- <para>FreeBSD默认支持4个串行端口。在&ms-dos;下,这些是
+ <para>FreeBSD默认支持4个串口。 在&ms-dos;下,这些是
<devicename>COM1</devicename>,
<devicename>COM2</devicename>,
<devicename>COM3</devicename>,
- <devicename>COM4</devicename>。FreeBSD当前支持 <quote>dumb</quote>
- 多插口串行接口卡,如 BocaBoard 1008 和 2016,与许多 Digiboard
- 和 Stallion Technologies 制造的智能多接口卡一样好。 然而,
+ <devicename>COM4</devicename>。 FreeBSD 目前支持 <quote>dumb</quote>
+ 多口串口卡,如 BocaBoard 1008 和 2016, 以及许多 Digiboard
+ 和 Stallion Technologies 制造的智能多接口卡。 不过,
默认的内核只会寻找标准的COM端口。</para>
<para>要看看您的内核是否支持您的串口,只要在内核启动时查看一下启动信息,
@@ -519,7 +519,7 @@ sio3: type 16550A</screen>
<literal>0x2f8</literal>,端口 <literal>IO_COM3</literal> 代替了
<literal>0x3e8</literal>,端口 <literal>IO_COM4</literal> 代替了
<literal>0x2e8</literal>,这些都是各自端口相应的端口地址。
- 中断4,3,5,9都是经常用的中断。也要注意有些正常的串行端口可能
+ 中断4,3,5,9都是经常用的中断。也要注意有些正常的串口可能
<emphasis>无法</emphasis> 在一些ISA总线的PC上共享中断
(多插口板卡有板载的电子设备,允许在板上所有 16550A
的设备共享一个或两个中断请求)。</para>
@@ -558,7 +558,7 @@ sio3: type 16550A</screen>
<sect2 id="serial-hw-config">
- <title>串行端口配置</title>
+ <title>串口配置</title>
<indexterm><primary><devicename>ttyd</devicename></primary></indexterm>
<indexterm><primary><devicename>cuad</devicename></primary></indexterm>
@@ -662,7 +662,7 @@ sio3: type 16550A</screen>
<sect3 id="term-dumb">
<title>哑终端</title>
- <para>哑终端需要专门的好几种硬件,让您通过串行线连接到计算机。
+ <para>哑终端需要专门的好几种硬件,让您通过串口线连接到计算机。
它们被叫做 <quote>哑</quote> 是因为它们只能够用来显示,
发送和接收文本。 您不能在它上面运行任何程序。</para>
@@ -676,14 +676,46 @@ sio3: type 16550A</screen>
<sect3 id="term-pcs">
<title>充当终端的PC</title>
- <para>如果一个 <link linkend="term-dumb">哑终端</link>
- 有足够的能力来显示,发送和接收文本,
- 那任何个人计算机都可以作为一个哑终端。
- 您所需要的只是适当的线缆和一些终端模拟软件。</para>
+ <para>假如 <link linkend="term-dumb">哑终端</link> 的功能仅限于显示、
+ 发送和接收文本的话, 那么显然任何一台闲置的个人计算机,
+ 都完全能够胜任哑终端的工作。 因此您需要的是合适的线缆,
+ 以及一些在这台计算机上运行的 <emphasis>终端仿真</emphasis>
+ 软件。</para>
- <para>这样一个配置被广泛运用于家庭。例如,如果您的妻子忙于在您的
- FreeBSD 系统控制台上工作,您也可以从一台低档的个人计算机登录到
- FreeBSD 系统执行一些文本的工作。</para>
+ <para>这种配置在家庭中应用十分广泛。 例如, 如果您的爱人正忙于在您的
+ FreeBSD 系统的控制台上工作时,
+ 您就可以将一台功能稍弱的计算机挂在这个 FreeBSD
+ 系统上来同时完成一些文本界面的工作。</para>
+
+ <para>在 &os; 的基本系统中至少有两个能用于进行串口连接的工具:
+ &man.cu.1; 和 &man.tip.1;。</para>
+
+ <para>如果要从运行 &os; 的计算机上通过串口连接到另一系统,
+ 可以使用:</para>
+
+ <screen>&prompt.root; <userinput>cu -l <replaceable>串口设备</replaceable></userinput></screen>
+
+ <para>此处 <quote>串口设备</quote> 表示您计算机上某个串口对应的设备名。
+ 在 &os; 6.0 之前的版本中, 这些设备的名字是
+ <devicename>/dev/cuaa<replaceable>N</replaceable></devicename>,
+ 而在 6.0 和更新一些的版本中, 则是
+ <devicename>/dev/cuad<replaceable>N</replaceable></devicename>。</para>
+
+ <para>此处的 <quote>N</quote> 表示串口的编号。</para>
+
+ <note>
+ <para>请注意在 &os; 中设备的编号是从零而非一开始的
+ (这一点与另一些系统, 如基于 &ms-dos; 的系统不同)。
+ 因此, 在基于 &ms-dos; 系统中的 <quote>COM1</quote> 在 &os;
+ 中通常叫做 <filename>/dev/cuad0</filename>。</para>
+ </note>
+
+ <note>
+ <para>其他一些人可能喜欢使用另一些来自 Ports 套件的程序。
+ Ports 中提供了几个与 &man.cu.1; 和
+ &man.tip.1; 类似的工具,
+ 例如 <filename role="package">comms/minicom</filename>。</para>
+ </note>
</sect3>
<sect3 id="term-x">
@@ -700,8 +732,9 @@ sio3: type 16550A</screen>
<sect2 id="term-config">
<title>配置</title>
- <para>这节描述了您在一个终端上启用一个登录会话,需要在 FreeBSD
- 系统上配置些什么。假设您已经配置好了内核来支持串行端口,您就可以连接了。</para>
+ <para>这节描述了您在一个终端上启用一个登录会话时, 需要在 FreeBSD
+ 系统上进行的配置。 假设已经配置好了内核来支持串口,
+ 就可以直接开始连接了。</para>
<para>在 <xref linkend="boot"> 中曾经提到, <command>init</command>
进程依赖于系统启动时所有的处理控制和初始化。
@@ -716,8 +749,8 @@ sio3: type 16550A</screen>
<procedure>
<step>
- <para>如果它不在那儿,您需要为串行端口在
- <filename>/dev</filename>目录下添加一行记录到
+ <para>如果它不在那里, 您需要为串口在
+ <filename>/dev</filename> 目录下添加一行记录到
<filename>/etc/ttys</filename>。</para>
</step>
@@ -759,9 +792,9 @@ sio3: type 16550A</screen>
<filename>ttyv0</filename> 在这个文件中有一个记录。
您可以使用这个记录登录进控制台。
这个文件也包含其他虚拟控制台的记录,串口,和伪 ttys 终端。
- 对于一个硬连线的终端, 只要列出串行端口的
+ 对于一个硬连线的终端, 只要列出串口的
<filename>/dev</filename> 记录而不需要
- <filename>/dev</filename>部分 (例如,
+ <filename>/dev</filename> 部分 (例如,
<filename>/dev/ttyv0</filename> 可以被列为
<devicename>ttyv0</devicename>)。</para>
@@ -898,8 +931,8 @@ ttyd5 "/usr/libexec/getty std.19200" vt100 on insecure
<screen>&prompt.root; <userinput>ps -axww|grep getty</userinput></screen>
<para>您将看到一个终端的记录。例如,下面的显示表明一个<command>getty</command>
- 正在第二个串行端口 <literal>ttyd1</literal> 运行,
- 正在<filename>/etc/gettytab</filename>中使用 <literal>std.38400</literal>
+ 正在第二个串口 <literal>ttyd1</literal> 运行,
+ 正在 <filename>/etc/gettytab</filename> 中使用 <literal>std.38400</literal>
的记录:</para>
<screen>22189 d1 Is+ 0:00.03 /usr/libexec/getty std.38400 ttyd1</screen>
@@ -987,7 +1020,7 @@ ttyd5 "/usr/libexec/getty std.19200" vt100 on insecure
<indexterm><primary>modem</primary></indexterm>
<para>如果您使用一个外置的 modem,那您将需要适当的电缆线。
- 一个标准的串行线应当足够长以至普通的信号能够连接上:</para>
+ 一个标准的串口线应当足够长以至普通的信号能够连接上:</para>
<table frame="none" pgwide="1" id="serialcomms-signal-names">
<title>信号名称</title>
@@ -1224,7 +1257,7 @@ vq|VH57600|Very High Speed Modem at 57600,8-bit:\
:nx=VH9600:tc=std.57600:</programlisting>
<para>如果您的 CPU 速度较低, 或系统的负荷很重, 而且没有
- 16550A的串行端口,您可能会在57.6 Kbit/s 上得到
+ 16550A 的串口,您可能会在57.6 Kbit/s 上得到
<errorname>sio</errorname> <quote>silo</quote>错误。</para>
</sect4>
</sect3>
@@ -1435,10 +1468,10 @@ AT&amp;B1&amp;W</programlisting>
<title>匹配速度的配置</title>
<para>对于一个变速的配置, 您需要配置 modem
- 调节它的串行端口传输率匹配接收的传输率。
+ 调节它的串口传输率匹配接收的传输率。
在一个 USR Sportster 14400 的外置 modem 上, 这些命令将锁定
modem 的错误修正传输率适合命令要求的速度,
- 但允许串行端口速度适应没有纠错的连接:</para>
+ 但允许串口速度适应没有纠错的连接:</para>
<programlisting>ATZ
AT&amp;B2&amp;W</programlisting>
@@ -1829,7 +1862,7 @@ raisechar=^^</programlisting>
</author>
</authorgroup>
</sect1info>
- <title>设置串行控制台</title>
+ <title>设置串口控制台</title>
<indexterm><primary>serial console</primary></indexterm>
<sect2 id="serialconsole-intro">
@@ -1844,12 +1877,12 @@ raisechar=^^</programlisting>
slice 的启动代码块中。 引导块然后就被加载,
接着运行第三步启动引导器 (<filename>/boot/loader</filename>)。</para>
- <para>为了设置串行控制台, 您必须配置启动代码块, 启动引导器代码和内核。</para>
+ <para>为了设置串口控制台, 您必须配置启动代码块, 启动引导器代码和内核。</para>
</sect2>
<sect2 id="serialconsole-howto-fast">
- <title>串行控制台的配置, 简明版</title>
+ <title>串口控制台的配置, 简明版</title>
<para>这一节假定您使用默认的配置, 只希望迅速地获得关于配置串口控制台的概览。</para>
@@ -1869,7 +1902,7 @@ raisechar=^^</programlisting>
<para>编辑 <filename>/etc/ttys</filename> 并把 <literal>ttyd0</literal> 的
<literal>off</literal> 改为 <literal>on</literal>,
<literal>dialup</literal> 改为 <literal>vt100</literal>。
- 否则通过串行控制台上将不会提示输入口令,
+ 否则通过串口控制台上将不会提示输入口令,
从而导致潜在的安全漏洞。</para>
</step>
@@ -1884,16 +1917,16 @@ raisechar=^^</programlisting>
</sect2>
<sect2 id="serialconsole-howto">
- <title>串行控制台的设置S</title>
+ <title>串口控制台的设置</title>
<procedure>
<step>
- <para>准备一个串行线缆。</para>
+ <para>准备一根串口线缆。</para>
<indexterm><primary>null-modem cable</primary></indexterm>
- <para>您需要使用一个 null-modem 的线缆或标准的串行线和一个 null-modem
+ <para>您需要使用一个 null-modem 的线缆或标准的串口线和一个 null-modem
适配器。 请参考 <xref linkend="serial-cables-ports">
- 中有关串行线的讨论。</para>
+ 中有关串口线的讨论。</para>
</step>
<step>
@@ -1998,7 +2031,7 @@ raisechar=^^</programlisting>
<para>在启动磁盘的 <literal>a</literal> 分区的根目录创建
<filename>boot.config</filename> 文件。</para>
- <para>这个文件将指导引导块代码如何启动系统。 为了激活串行控制台,
+ <para>这个文件将指导引导块代码如何启动系统。 为了激活串口控制台,
您必须有一个或多个下面的选项——如果您要多个选项,
在同一行必须都包含它们:</para>
@@ -2007,7 +2040,7 @@ raisechar=^^</programlisting>
<term><option>-h</option></term>
<listitem>
- <para>切换内部和串行控制台。 您使用这个来交换控制台设备。
+ <para>切换内部和串口控制台。 您使用这个来交换控制台设备。
例如, 如果您从内部控制台启动, 您可以使用 <option>-h</option>
来直接使用启动引导器和内核来使用串口作为它的控制台设备。
另外, 如果您从串口启动, 您可以使用 <option>-h</option>
@@ -2091,17 +2124,17 @@ Keyboard: no</screen>
<row>
<entry><option>-h</option></entry>
- <entry>串行控制台</entry>
+ <entry>串口控制台</entry>
</row>
<row>
<entry><option>-D</option></entry>
- <entry>串行控制台和内部控制台</entry>
+ <entry>串口控制台和内部控制台</entry>
</row>
<row>
<entry><option>-Dh</option></entry>
- <entry>串行控制台和内部控制台</entry>
+ <entry>串口控制台和内部控制台</entry>
</row>
<row>
@@ -2111,7 +2144,7 @@ Keyboard: no</screen>
<row>
<entry><option>-P</option>, 无键盘</entry>
- <entry>串行控制台</entry>
+ <entry>串口控制台</entry>
</row>
</tbody>
</tgroup>
@@ -2132,7 +2165,7 @@ boot:</screen>
如果信息出现在正确的控制台, 按 <keycode>Enter</keycode>
继续启动进程。</para>
- <para>如果您要使用串行控制台, 但您没有看到命令行, 那可能设置有问题。
+ <para>如果您要使用串口控制台, 但您没有看到命令行, 那可能设置有问题。
这时, 输入 <option>-h</option> 然后按 Enter/Return 来告诉引导块
(然后是启动引导器和内核) 选择串口作为控制台。 一旦系统起来了,
就可以回去检查一下是什么出了问题。</para>
@@ -2140,7 +2173,7 @@ boot:</screen>
</procedure>
<para>启动引导器加载完后, 您将进入启动进程的第三步,
- 您仍然可以在启动引导器通过设定您喜欢的环境来切换内部控制台和串行控制台。
+ 您仍然可以在启动引导器通过设定您喜欢的环境来切换内部控制台和串口控制台。
参考 <xref linkend="serialconsole-loader">。</para>
</sect2>
@@ -2175,23 +2208,23 @@ boot:</screen>
<row>
<entry><option>-h</option></entry>
- <entry>串行</entry>
- <entry>串行</entry>
- <entry>串行</entry>
+ <entry>串口</entry>
+ <entry>串口</entry>
+ <entry>串口</entry>
</row>
<row>
<entry><option>-D</option></entry>
- <entry>串行和内部</entry>
+ <entry>串口和内部</entry>
<entry>内部</entry>
<entry>内部</entry>
</row>
<row>
<entry><option>-Dh</option></entry>
- <entry>串行和内部</entry>
- <entry>串行</entry>
- <entry>串行</entry>
+ <entry>串口和内部</entry>
+ <entry>串口</entry>
+ <entry>串口</entry>
</row>
<row>
@@ -2203,9 +2236,9 @@ boot:</screen>
<row>
<entry><option>-P</option>, 没有键盘</entry>
- <entry>串行和内部</entry>
- <entry>串行</entry>
- <entry>串行</entry>
+ <entry>串口和内部</entry>
+ <entry>串口</entry>
+ <entry>串口</entry>
</row>
</tbody>
</tgroup>
@@ -2233,42 +2266,42 @@ boot:</screen>
<entry>无</entry>
<entry>内部</entry>
<entry>内部</entry>
- <entry>串行</entry>
+ <entry>串口</entry>
</row>
<row>
<entry><option>-h</option></entry>
- <entry>串行</entry>
- <entry>串行</entry>
- <entry>串行</entry>
+ <entry>串口</entry>
+ <entry>串口</entry>
+ <entry>串口</entry>
</row>
<row>
<entry><option>-D</option></entry>
- <entry>串行和内部</entry>
+ <entry>串口和内部</entry>
<entry>内部</entry>
- <entry>串行</entry>
+ <entry>串口</entry>
</row>
<row>
<entry><option>-Dh</option></entry>
- <entry>串行和内部</entry>
- <entry>串行</entry>
- <entry>串行</entry>
+ <entry>串口和内部</entry>
+ <entry>串口</entry>
+ <entry>串口</entry>
</row>
<row>
<entry><option>-P</option>, 有键盘</entry>
<entry>内部</entry>
<entry>内部</entry>
- <entry>串行</entry>
+ <entry>串口</entry>
</row>
<row>
<entry><option>-P</option>, 没有键盘</entry>
- <entry>串行 and internal</entry>
- <entry>串行</entry>
- <entry>串行</entry>
+ <entry>串口和内部</entry>
+ <entry>串口</entry>
+ <entry>串口</entry>
</row>
</tbody>
</tgroup>
@@ -2277,12 +2310,12 @@ boot:</screen>
</sect2>
<sect2 id="serialconsole-tips">
- <title>串行控制台的提示</title>
+ <title>串口控制台的提示</title>
<sect3>
- <title>设置一个快速的串口速度</title>
+ <title>设置更高的串口速度</title>
- <para>默认的串口被设置成9600波特,8数据位, 无奇偶校验, 1个停止位。
+ <para>默认的串口被设置成每秒 9600 波特, 8 数据位, 无奇偶校验, 1个停止位。
如果您希望改变速度, 就必须重新编译引导块。在 <filename>/etc/make.conf</filename>
中添加下面一行, 然后编译新的引导块:</para>
@@ -2291,8 +2324,8 @@ boot:</screen>
<para>参见 <xref linkend="serialconsole-com2">
以了解如何编译和安装新的引导块。</para>
- <para>如果串行控制台用其他方法来配置而不是在启动时用
- <option>-h</option>, 或内核使用的串行控制台与引导块使用的不同,
+ <para>如果串口控制台用其他方法来配置而不是在启动时用
+ <option>-h</option>, 或内核使用的串口控制台与引导块使用的不同,
就必须在内核配置中加入下面这行,并重新编译内核:</para>
<programlisting>options CONSPEED=19200</programlisting>
@@ -2317,7 +2350,7 @@ boot:</screen>
(<literal>0x3f8</literal>、 <literal>0x2f8</literal>、 0x3E8
或 0x2E8) 端口的地址。 只有 <devicename>sio0</devicename> 到
<devicename>sio3</devicename> (<devicename>COM1</devicename> 到
- <devicename>COM4</devicename>) 都可以使用; 但多口串行卡将不会工作。
+ <devicename>COM4</devicename>) 都可以使用; 但多口串口卡将不会工作。
不需要任何中断设置。</para>
</step>
@@ -2356,17 +2389,17 @@ boot:</screen>
</sect3>
<sect3 id="serialconsole-ddb">
- <title>通过串行线进入DDB调试器</title>
+ <title>通过串口线进入DDB调试器</title>
<programlisting>options BREAK_TO_DEBUGGER
options DDB</programlisting>
</sect3>
<sect3>
- <title>在串行控制台上得到一个登录命令行</title>
+ <title>在串口控制台上得到一个登录命令行</title>
- <para>您可能希望通过串行线进入登录提示, 现在您可以看到启动信息,
- 通过串行控制台键入内核调试信息。可以这样做。</para>
+ <para>您可能希望通过串口线进入登录提示, 现在您可以看到启动信息,
+ 通过串口控制台键入内核调试信息。可以这样做。</para>
<para>用一个编辑器打开 <filename>/etc/ttys</filename> 文件,
然后找到下面的行:</para>
@@ -2381,7 +2414,7 @@ ttyd3 "/usr/libexec/getty std.9600" unknown off secure</programlisting>
可以打开或关闭某个端口。 如果您已经改变了串口的速度,
还必须改掉标准的 9600 与当前的例如 19200 相匹配。</para>
- <para>您也可以改变终端的类型从不知名的到您串行终端的真实类型。
+ <para>您也可以改变终端的类型从不知名的到您串口终端的真实类型。
编辑完这个文件, 您必须 <command>kill -HUP 1</command>
来使这个修改生效。</para>
</sect3>
@@ -2390,15 +2423,15 @@ ttyd3 "/usr/libexec/getty std.9600" unknown off secure</programlisting>
<sect2 id="serialconsole-loader">
<title>从启动引导器修改控制台</title>
- <para>前面一节描述了如何通过调整引导块来设定串行控制台。
+ <para>前面一节描述了如何通过调整引导块来设定串口控制台。
这节将讲到在启动引导器中通过键入一些命令和环境变量来指定控制台。
由于启动引导器会被启动进程的第三步所调用, 引导块以后,
在启动引导器中的设置将忽略在引导块中的设置。</para>
<sect3>
- <title>配置串行控制台</title>
+ <title>配置串口控制台</title>
- <para>您可以很容易地指定启动引导器和内核来使用串行控制台, 只需要在
+ <para>您可以很容易地指定启动引导器和内核来使用串口控制台, 只需要在
<filename>/boot/loader.rc</filename>中写入下面这行:</para>
<programlisting>set console="comconsole"</programlisting>
@@ -2406,7 +2439,7 @@ ttyd3 "/usr/libexec/getty std.9600" unknown off secure</programlisting>
<para>无论前一节中的引导块如何配置, 这个设置都会生效。</para>
<para>您最好把上面一行放在文件的第一行,
- 以便尽早地在启动时看到串行控制台的启动信息。</para>
+ 以便尽早地在启动时看到串口控制台的启动信息。</para>
<para>同样地,您可以指定内部控制台为:</para>
@@ -2445,7 +2478,7 @@ start</programlisting>
<sect3>
<title>使用串口而不是<devicename>sio0</devicename>作为控制台</title>
- <para>要使用一个串口而不是 <devicename>sio0</devicename> 作为串行控制台
+ <para>要使用一个串口而不是 <devicename>sio0</devicename> 作为串口控制台
需要重新编译启动引导器。下面的步骤跟
<xref linkend="serialconsole-com2"> 描述的相似。</para>
</sect3>