From cba270a1a2953cfed20413783f0ae37e359584d6 Mon Sep 17 00:00:00 2001 From: Xin LI Date: Wed, 6 Apr 2005 11:58:39 +0000 Subject: MFen 1.344-1.365: Local revisions: 1.1.1000.1-1.1.1000.8 Part of language improvements submitted by: "heromyth" Obtained from: The FreeBSD Simplified Chinese Project CVS --- .../handbook/advanced-networking/chapter.sgml | 355 ++++++++++++++------- 1 file changed, 242 insertions(+), 113 deletions(-) (limited to 'zh_CN.GB2312/books') diff --git a/zh_CN.GB2312/books/handbook/advanced-networking/chapter.sgml b/zh_CN.GB2312/books/handbook/advanced-networking/chapter.sgml index f804ff5718..bbd68a3199 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.344 + Original revision: 1.365 $FreeBSD$ --> @@ -14,11 +14,11 @@ 本章将介绍许多与高级网络有关的话题。 - 读完这一章,您将会知道: + 读完这一章,您将了解: - 网关和路由基础 + 关于网关和路由的基础知识。 @@ -34,7 +34,7 @@ - 如何设置网络地址翻译(NAT)。 + 如何设置网络地址转换(NAT)。 @@ -58,7 +58,7 @@ - 相关的基本网络术语。 + 知道相关的基本网络术语。 @@ -103,24 +103,25 @@ 网关 子网 为了让一台主机在网能找到另一台主机, - 就必须要有一种机制来描述如何从一台主机连至另一台上。这个就叫做 + 就必须要有一种机制来描述如何从一台主机连至另一台上。 这一过程就是 路由选择(routing)。 - 一个路由是一对预先定义的地址: - 目的地(destination)网关(gateway)。 - 这对地址表明如果您想要试着到达这个目的地(destination), - 那么就通过这个网关(gateway)进行通信。 - 目的地有三种类型: 单个主机(individual hosts), - 子网(subnets)和默认(default)。 - 如果没有其它路由应用,就使用默认路由(default route)。 - 关于默认路由我们以后为讨论多一点。有三种类型的网关: - 单个主机,接口(也叫连接(links))和以太网硬件地址(MAC addresses)。 + 路由 是一对预先定义的地址: + 目的地(destination)网关(gateway)。 + 这对地址说明了, 想要到达 目的地(destination), + 就需要通过 网关(gateway) 进行通信。 + 目的地址有三种类型: 单个主机, + 子网(subnets) 和 默认(default)。 + 如果没有应用其它路由, 就会使用 默认路由。 + 关于默认路由将在后面进行更多的讨论。 网关也有三种类型: + 单个主机, 接口 (也叫连接(links)) + 和以太网硬件地址(MAC addresses)。 实例 - 为了说明路由选择的各个部分,我们使用以用下面这个例子。 - 以下是命令 netstat 的输出: + 为了说明路由选择的各个部分, 首先来看看下面的例子。 + 这是 netstat 命令的输出: &prompt.user; netstat -r Routing tables @@ -138,26 +139,26 @@ host2.example.com link#1 UC 0 0 224 link#1 UC 0 0 默认路由 - 头两行指定默认路由 (我们会在下一节说明) - 和本地(localhost)路由。 + 头两行指定默认路由 (我们会在 下一节 说明) + 和 本机(localhost) 路由。 回环设备 - 这张路由表里指定用于localhost的接口 - (Netif 列)是lo0, - 也就是众所周知的回环设备(loopback device)。 - 这就使得所有以此为目的地的通信留在了内部, - 而不是通过LAN发送出去,因为它会在开始的地方就结束返回。 + 这张路由表里指定用于 localhost 的接口 + (Netif 列) 是 lo0, + 也就是大家熟知的 回环设备。 + 它使得所有以此为 目的地 的通信留在本机, + 而不是通过 LAN 发出, 因为它会在开始的地方就结束并返回。 以太网 MAC 地址 接着出现的是以 0:e0: 开头的地址。这些是以太网硬件地址,也称为 MAC 地址。 - FreeBSD 会自动识别在同一个以太网中的任何主机(如 - test0),并为这个主机新增一个路由, - 以并通过那个以太网接口——ed0 - 直接到达它(译者注:那台主机。与这类路由表相关的也有一个超时项 + FreeBSD 会自动识别在同一个以太网中的任何主机 (如 + test0), 并为其新增一个路由, + 并通过那个以太网接口 — ed0 + 直接与它通讯 (译者注:那台主机。与这类路由表相关的也有一个超时项 (Expire列),当我们在指定时间内没有收到从那个主机发来的信息, 这项就派上用场了。这种情况下,到这个主机的路由就会被自动删除。 这些主机被使用一种叫做RIP(路由信息协议--Routing Information @@ -195,7 +196,7 @@ host2.example.com link#1 UC 0 0 最后,每个路由的不同属性可以在 Flags 列中看到。下边是个关于这些标志和它们的含义的一个简表: - + @@ -286,7 +287,7 @@ host2.example.com link#1 UC 0 0 您的每一台机子的默认路由应该是: - + @@ -329,7 +330,7 @@ host2.example.com link#1 UC 0 0 使用的是 10.9.9, 那么默认路由表将是: - + @@ -361,8 +362,8 @@ host2.example.com link#1 UC 0 0 &prompt.root; route add default 10.20.30.1 - 想要了解更多关于手工处理网络路由表的信息,参考 - &man.route.8; 手册页。 + 要了解关于如何手工维护网络路由表的进一步细节, 请参考 + &man.route.8; 联机手册。 @@ -417,10 +418,6 @@ host2.example.com link#1 UC 0 0 BGP RIP OSPF - - 即使 FreeBSD 按照这种方法进行了配置, - 它也并不完全符合 Internet 标准对路由器的要求。 - 但对于一般应用已经足够了。 @@ -524,7 +521,7 @@ default 10.0.0.1 UGS 0 49378 xl0 - 永久的配置 + 永久配置 上面的实例对于运行着的系统来说配置静态路由是相当不错了。 只是,有一个问题——如果您重启您的 &os; 机子,路由信息就会消失。 @@ -548,12 +545,13 @@ route_internalnet2="-net 192.168.2.0/24 192.168.1.2" 因此,我们需要的是 "-net 192.168.2.0/24 192.168.1.2" - 前边已经说了,我们可以有不只一个字符串的 + 前边已经提到, 可以把多个静态路由的名称, 放到 static_routes 里边。 - 下面我们就建立多个静态路由。下面几行显示了一个为 192.168.0.0/24192.168.1.0/24 - 网络在一个假想的路由器上增加静态路由的例子: + 之间静态路由的例子: static_routes="net1 net2" route_net1="-net 192.168.0.0/24 192.168.0.1" @@ -610,7 +608,11 @@ route_net2="-net 192.168.1.0/24 192.168.1.1" 多播路由 - 多播 MROUTING 选项 + 多播路由 + + + 内核选项 + MROUTING FreeBSD 一开始就支持多播应用软件和多播路由选择。 多播程序并不要求FreeBSD的任何特殊的配置, @@ -765,14 +767,15 @@ wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 接着我们需要告诉内核将哪些接口桥接在一起。 我们使用 &man.sysctl.8; 来完成: - &prompt.root; sysctl net.link.ether.bridge=1 -&prompt.root; sysctl net.link.ether.bridge_cfg="wi0,xl0" + &prompt.root; sysctl net.link.ether.bridge.enable=1 +&prompt.root; sysctl net.link.ether.bridge.config="wi0,xl0" &prompt.root; sysctl net.inet.ip.forwarding=1 - 在 &os; 5.2-RELEASE 以及更新版本上,您必须使用下面的选项: + 在 &os; 5.2 之前的版本中, + 则必须使用下面的选项: - &prompt.root; sysctl net.link.ether.bridge.enable=1 -&prompt.root; sysctl net.link.ether.bridge.config="wi0,xl0" + &prompt.root; sysctl net.link.ether.bridge=1 +&prompt.root; sysctl net.link.ether.bridge_cfg="wi0,xl0" &prompt.root; sysctl net.inet.ip.forwarding=1 现在来设置并启动无线网卡。以下的命令将网卡设置为接入点状态: @@ -818,7 +821,7 @@ wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 客户端 - 一个无线客户端是一个连入接入点或直接连接另一个客户端的系统。 + 一个无线客户端是一个连入接入点或直接连接另一个客户端的系统。 一般地,无线客户端只有一个网络设备,也就是无线网卡。 @@ -988,7 +991,7 @@ wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 - 客户端 + 802.11b 客户端 现在几乎所有的 802.11b 无线网卡都能被 FreeBSD 支持。大多数基于 Prism、Spectrum24、Hermes、Aironet @@ -996,8 +999,122 @@ wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 BSS)模式下工作。 - + + 802.11a & 802.11g 客户端 + + &man.ath.4; 设备驱动能够支持 802.11a 和 802.11g。 + 如果您的网卡采用的是 Atheros 芯片组, 就可以使用这个驱动。 + + 不幸的是, 由于认为设计许多敏感的商业机密, + 许多厂商至今仍不愿意将把驱动程序作为开放源代码形式发布列入时间表。 + 因此, FreeBSD 以及其它操作系统的开发人员只剩下了两种选择: + 要么经历长时间的痛苦过程来对驱动进行逆向工程, + 要么使用现存的为 + µsoft.windows; 平台编译好的驱动程序。 许多开发人员, + 包括参与 FreeBSD 的那些, 选择了后者。 + + 得益于 Bill Paul (wpaul) 的工作, 从 + FreeBSD 5.3-RELEASE 开始, 已经可以 直接 + 支持网络驱动接口规范 + (NDIS)。 FreeBSD NDISulator (也被称为 Project Evil) + 可以支持二进制形式的 &windows; 驱动程序, + 并让它相信正在运行的是 &windows;。 这是一个相对较新的功能, + 但许多测试证明, 它确实相当有效。 + + NDIS + NDISulator + &windows drivers + Microsoft Windows + Microsoft Windows + 设备驱动 + KLD (内核可加载对象) + + + 要使用 NDISulator, 您需要三件东西: + + + + 内核源代码 + + + 二进制形式的 &windowsxp; 驱动程序 + (扩展名是 .SYS) + + + &windowsxp; 驱动程序配置文件 + (扩展名是 .INF) + + + + 您可能需要编译 &man.ndis.4; 袖珍端口驱动封装模块。 + 这一操作需要以 root 身份来完成: + + &prompt.root; cd /usr/src/sys/modules/ndis +&prompt.root; make && make install + + 找到您的卡所需的文件。 一般来说, + 您应该能在随卡的 CD 或者制造商的网站上找到。 + 下面的例子中, 我们将使用 + W32DRIVER.SYS 和 + W32DRIVER.INF 这两个名字。 + + 接下来的步骤是将二进制形式的驱动程序组装成内核模块。 + 要完成这一任务, 需要以 + root 身份进入 + if_ndis 模块的目录, 并将 + &windows; 驱动程序复制到这里: + + &prompt.root; cd /usr/src/sys/modules/if_ndis +&prompt.root; cp /path/to/driver/W32DRIVER.SYS ./ +&prompt.root; cp /path/to/driver/W32DRIVER.INF ./ + + 接下来我们将使用 ndiscvt 工具来创建驱动定义的头文件 + ndis_driver_data.h, 用以构建驱动程序: + + &prompt.root; ndiscvt -i W32DRIVER.INF -s W32DRIVER.SYS -o ndis_driver_data.h + + 选项 + 分别用于指定配置和二进制形式的驱动程序。 我们使用 + 参数, 因为 + Makefile 在构建内核模块时会查找它。 + + + 某些 &windows; 驱动程序需要一些额外的文件才能正常工作。 + 您可以把它们放到 ndiscvt 命令的 + 参数后面。 请参考 &man.ndiscvt.8; + 联机手册了解更多详情。 + + + 最后, 就可以构建并安装内核模块了: + + &prompt.root; make && make install + + 要使用驱动程序, 您需要加在适当的内核模块: + + &prompt.root; kldload ndis +&prompt.root; kldload if_ndis + + 第一个命令会加载 NDIS 袖珍端口驱动封装模块, + 第二个则加载实际的网卡。 请查看 + &man.dmesg.8; 的输出以了解是否在加载过程中存在错误。 + 如果一切正常, 您应该能看到类似下面的输出: + + ndis0: <Wireless-G PCI Adapter> 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 + + 这里您可以像使用其它任何无线设备 (例如 wi0) + 那样使用 ndis0 设备。 + 具体细节可以参考线面章节的讨论。 + + + + @@ -1444,13 +1561,9 @@ Bluetooth Profile Descriptor List: 一个新的对像被推入手机的目录。 &prompt.user; obexapp -a 00:80:37:29:19:a4 -C IrMC -obex> get -get: remote file> telecom/devinfo.txt -get: local file> devinfo-t39.txt +obex> get telecom/devinfo.txt devinfo-t39.txt Success, response: OK, Success (0x20) -obex> put -put: local file> new.vcf -put: remote file> new.vcf +obex> put new.vcf Success, response: OK, Success (0x20) obex> di Success, response: OK, Success (0x20) @@ -1506,12 +1619,13 @@ rfcomm_sppd[94692]: Starting on /dev/ttyp6... - 有些东西正发生错误,我能查看发生了什么吗? - 是的,您能。使用第三方软件包 - hcidump-1.5,这个可以从下载到。 - 工具hcidump 类似于 &man.tcpdump.1;。 - 它可以用来显示蓝牙数据包的内容并将其存入文件中。 + 如果有错, 能否知道到底正在发生什么? + 可以。 需要借助第三方软件包 + hcidump, 它可以通过 + comms/hcidump port + 来安装。 hcidump 工具和 + &man.tcpdump.1; 非常相像。 它可以用来显示蓝牙数据包的内容, + 并将其记录到文件中。 @@ -1589,13 +1703,9 @@ rfcomm_sppd[94692]: Starting on /dev/ttyp6... - 过滤/数据传输防火墙 - - 防火墙 - - - 网络地址转换 (NAT) - + 过滤/数据整形防火墙 + 防火墙 + NAT 第二种常见的情况是需要防火墙的地方没有进行网络地址转换(NAT)。 @@ -1635,8 +1745,8 @@ rfcomm_sppd[94692]: Starting on /dev/ttyp6... 改变内核配置 - 内核 选项 - BRIDGE 选项 + 内核选项 + BRIDGE 为了激活内核对桥接的支持,增加以下语句: @@ -1675,27 +1785,27 @@ rfcomm_sppd[94692]: Starting on /dev/ttyp6... 增加下行: - net.link.ether.bridge=1 + net.link.ether.bridge.enable=1 /etc/sysctl.conf 里, 以便在运行时激活网桥,然后加下行: - net.link.ether.bridge_cfg=if1,if2 + net.link.ether.bridge.config=if1,if2 以便在指定的接口上激活网桥 (使用您的两个网络接口的名字替换 if1if2 )。如果您希望用 &man.ipfw.8; 来过滤桥接的数据包,您还应该加入: - net.link.ether.bridge_ipfw=1 + net.link.ether.bridge.ipfw=1 这样一行。 - 对于&os; 5.2-RELEASE 及以后的版本,使用下面几行来代替: + 对于 &os; 5.2-RELEASE 和更早的版本, 则应使用下面的配置: - net.link.ether.bridge.enable=1 -net.link.ether.bridge.config=if1,if2 -net.link.ether.bridge.ipfw=1 + net.link.ether.bridge=1 +net.link.ether.bridge_cfg=if1,if2 +net.link.ether.bridge_ipfw=1 @@ -2714,13 +2824,13 @@ ISDN BRI line natd - FreeBSD 的网络地址转换服务, 通常也被称为 - &man.natd.8; 是一个能够接收连入的未经处理的 IP 包, + FreeBSD 的网络地址转换服务, 通常也被叫做 + &man.natd.8;, 是一个能够接收连入的未处理 IP 包, 将源地址修改为本级地址然后重新将这些包注入到发出 IP 包流中。 &man.natd.8; 同时修改源地址和端口, 当接收到响应数据时,它作逆向转换以便把数据发回原先的请求者。 Internet 连接共享 - IP 伪装 + NAT NAT 最常见的用途是为人们所熟知的 Internet 连接共享。 @@ -2797,18 +2907,27 @@ natd_flags="" 将机器配置为网关。 执行 sysctl net.inet.ip.forwarding=1 效果相同。 + + 在启动时启用 /etc/rc.firewall 中的防火墙规则。 + + 指定一个预定义的允许所有包进入的防火墙规则集。 参见 /etc/rc.firewall 以了解其他类型的规则集。 + + 指定通过哪个网络接口转发包 (接入 Internet 的那一个)。 + + 其他希望在启动时传递给 &man.natd.8; 的参数。 + /etc/rc.conf 中加入上述选项将在系统启动时运行 @@ -2919,19 +3038,19 @@ redirect_port tcp 192.168.0.3:80 80 -redirect_address localIP publicIP - - - - - localIP - LAN 客户端的内部 IP 地址。 - - - publicIP - 相应 LAN 客户端的外部 IP 地址。 - - - + + + + + localIP + LAN 客户端的内部 IP 地址。 + + + publicIP + 相应 LAN 客户端的外部 IP 地址。 + + + 在这个例子里,参数是: @@ -2955,11 +3074,10 @@ redirect_port tcp 192.168.0.3:80 80 平行线 IP(PLIP) + PLIP - PLIP - - - 平行线 IP + 并口电缆 IP + PLIP PLIP 允许我们在两个平行的端口间运行 TCP/IP。 @@ -2967,7 +3085,7 @@ redirect_port tcp 192.168.0.3:80 80 这部分,我们将讨论: - 建立平行的 (laplink) 线缆。 + 制作并口的 (laplink) 线缆。 @@ -2975,11 +3093,11 @@ redirect_port tcp 192.168.0.3:80 80 - 建立平行的线缆。 + 制作并口电缆。 - 您可以在许多计算机供应店里买到平行线缆。 + 您可以在许多计算机供应店里买到并口电缆。 如果不行或您想知道怎么做线, - 下面的表格就显示了如何利用普通的打印机平行线做一根: + 下面的表格就显示了如何利用普通的打印机并口线做一根: 为网络配平行线 @@ -3184,15 +3302,15 @@ round-trip min/avg/max/stddev = 2.530/2.643/2.774/0.103 msIPv6 - IPv6 (也叫 IPng IP下一代) - 是著名的 IP 协议 (也叫 IPv4) - 的新版。象其它当前的 *BSD 系统一样,FreeBSD 包括了 - KAME IPv6 相关工具。因此您的 FreeBSD - 系统事带有所有您在体验 IPv6 时所需要的。这部分主要集中在 - IPv6 的配置和运行上。 + IPv6 (也被称作 IPng 下一代 IP) + 是中所周知的 IP 协议 (也被叫做 + IPv4) 的新版本。 和其他现代的 *BSD 系统一样, + FreeBSD 包含了 KAME 的 IPv6 参考实现。 因此, + 您的 FreeBSD 系统包含了尝试 IPv6 所需要的所有工具。 + 这一节主要集中讨论如何配置和使用 IPv6。 - 在二十世纪 90 年代早期,人们开始当心迅速缩小的 IPv4 - 地址空间。根据互联网的膨胀率,有两点需要考虑: + 在 1990 年代早期, 人们开始担心可用的 IPv4 地址空间在不断地缩小。 随着 + Internet 的爆炸式发展, 主要的两个担心是: 所有的 IP 地址用光。今天不再那么当心了, @@ -3552,6 +3670,17 @@ gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280 ipv6_defaultrouter="MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR" + + + IPv6 隧道配置 + + 如果服务器将您的网络通过 IPv6 路由到世界的其他角落, + 您需要在 /etc/rc.conf + 中添加下面的配置: + + ipv6_gateway_enable="YES" + + @@ -3628,7 +3757,7 @@ gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280 例如我们有四台机子在网络里,每一台都使用一张 ATM 适配器卡连接到 ATM 网络。第一步就是规划 IP 地址和机子间的 ATM 连接。我们使用下面的: - + @@ -3665,7 +3794,7 @@ gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280 为了建造完全交错的网络,我们需要在第一对机子间有一个 ATM 连接: - + -- cgit v1.2.3