原始作者: Terry Dawson (主要作者), VK2KTJ; Alessandro Rubini (维护者)
前任维护者: Joshua Drake (诗人)
Linux 操作系统拥有几乎完全从头开始编写的基于内核的网络支持。最近内核中 tcp/ip 实现的性能使其成为甚至最好的同类产品的 достойной 替代品。本文档旨在描述如何安装和配置 Linux 网络软件和相关工具。
AF_APPLETALK
)
AF_AX25
)
AF_IPX
)
AF_NETROM
)
AF_ROSE
)
这是 LinuxPorts 成为本文档作者后的首次发布。首先,请允许我说,我们希望在接下来的几个月中,您会发现本文档很有用,并且我们能够提供关于 Linux 网络问题的准确和及时的信息。
像我们管理的其他 howto 一样,本文档也将变得非常不同,本文档将很快成为 Networking-HOWTO,而不仅仅是 Net-3(4) Howto。我们将涵盖 PPP、VPN 和其他项目...
最初的 NET-FAQ 由 Matt Welsh 和 Terry Dawson 编写,旨在回答在 Linux 文档项目正式启动之前,关于 Linux 网络技术的常见问题。它涵盖了 Linux 网络内核的非常早期的开发版本。NET-2-HOWTO 取代了 NET-FAQ,是最初的 LDP HOWTO 文档之一,它涵盖了所谓的 Linux 内核网络软件的第 2 版和后来的第 3 版。本文档反过来取代了它,并且仅与 Linux 网络内核的第 4 版或更具体地说是内核版本 2.x 和 2.2.x 相关。
由于其范围内的材料量巨大,本文档的早期版本变得非常庞大。为了帮助减少这个问题,已经制作了许多处理特定网络主题的 HOWTO。本文档将在相关的地方提供指向它们的指针,并涵盖其他文档尚未涵盖的领域。
我们始终对反馈感兴趣。请通过以下方式联系我们:feedback@en.tldp.org。
再次,如果您发现任何错误或您想添加任何内容,请联系我们。
本文档采用自上而下的组织结构。第一部分包含信息性材料,如果您不感兴趣可以跳过;接下来是对网络问题的通用讨论,您必须确保在继续更具体的部分之前理解这一点。其余的“技术特定”信息分为三个主要部分:以太网和 IP 相关信息、与广泛使用的 PC 硬件相关的技术以及很少使用的技术。
因此,建议的文档阅读路径如下
这些部分适用于稍后描述的每种或几乎每种技术,因此对于您理解非常重要。另一方面,我希望许多读者已经对这些材料充满信心。
您应该了解您的网络是如何或将如何设计的,以及您将要实施的确切硬件和技术类型。
本节介绍了基本的以太网配置以及 Linux 为 IP 网络提供的各种功能,例如防火墙、高级路由等。
本节介绍了 PLIP、PPP、SLIP 和 ISDN,这些是个人工作站上广泛使用的技术。
如果您的需求与 IP 和/或通用硬件不同,则最后一部分涵盖了特定于非 IP 协议和特殊通信硬件的详细信息。
您应该实际尝试配置您的网络,并仔细记录您遇到的任何问题。
如果您遇到本文档无法帮助您解决的问题,请阅读与在哪里获得帮助或在哪里报告错误相关的部分。
网络很有趣,享受它。
这里没有使用特殊的约定,但您必须注意命令的显示方式。按照经典的 Unix 文档,您应该键入到 shell 的任何命令都以提示符为前缀。本 howto 显示“user%
”作为不需要超级用户权限的命令的提示符,以及“root#
”作为需要以 root 身份运行的命令的提示符。我选择使用“root#
”而不是普通的“#
”,以防止与 shell 脚本的快照混淆,在 shell 脚本中,井号用于定义注释行。
当显示“内核编译选项”时,它们以 menuconfig 使用的格式表示。即使您(像我一样)不习惯 menuconfig,它们也应该是可以理解的。如果您对选项的嵌套有疑问,运行一次程序总会有帮助。
请注意,指向其他 HOWTO 的任何链接都是本地的,以便您浏览本地 LDP 文档副本,如果您使用的是本文档的 html 版本。如果您没有完整的文件集,则可以从 metalab.unc.edu
(目录 /pub/Linux/HOWTO
)及其无数镜像站点检索每个 HOWTO。
开发一个全新的 tcp/ip 协议栈内核实现,使其性能与现有实现一样好,并非易事。在当时决定不移植现有实现之一,是因为当时对现有实现是否可能因 U.S.L. 提出的诉讼案而受到限制性版权的约束存在一些不确定性,并且当时人们对以不同的方式甚至比已经完成的方式做得更好抱有新的热情。
最初的志愿者领导内核网络代码开发的是 Ross Biro <biro@yggdrasil.com>
。Ross 制作了一套简单且不完整但大部分可用的例程实现集,并由 WD-8003 网络接口卡的以太网驱动程序进行了补充。这足以让许多人测试和试验该软件,甚至有些人设法将此配置中的机器连接到实时互联网连接。Linux 社区内推动网络支持开发的压力正在增加,最终,对 Ross 施加的一些不公平压力及其自身个人承诺的组合成本超过了他所获得的收益,他辞去了首席开发人员的职务。Ross 在启动项目并承担在如此有争议的情况下实际产生有用成果的责任方面的努力,是所有未来工作的催化剂,因此是当前产品成功的必要组成部分。
Orest Zborowski <obz@Kodak.COM>
为 Linux 内核制作了原始的 BSD 套接字编程接口。这是一个巨大的进步,因为它允许将许多现有的网络应用程序移植到 Linux,而无需进行 серьезную 修改。
大约在这个时候,Laurence Culhane <loz@holmes.demon.co.uk>
开发了 Linux 的第一个驱动程序来支持 SLIP 协议。这些驱动程序使许多无法访问以太网网络的人能够试验新的网络软件。同样,有些人使用了这个驱动程序并将其投入使用,将他们连接到互联网。这使更多人体验到了如果 Linux 具有完整的网络支持可以实现的可能性,并增加了积极使用和试验现有网络软件的用户数量。
Fred van Kempen <waltje@uwalt.nl.mugnet.org>
也是积极致力于构建网络支持的人之一。在 Ross 辞去首席开发人员职位后的一段时间的不确定性之后,Fred 自愿付出时间和精力,并基本上毫无异议地接受了这个角色。Fred 对他希望 Linux 网络软件的发展方向有一些雄心勃勃的计划,他着手朝着这些方向前进。Fred 制作了一系列名为“NET-2”内核代码(“NET”代码是 Ross 的)的网络代码,许多人能够相当有用地使用它。Fred 正式将许多创新提上开发议程,例如动态设备接口、业余无线电 AX.25 协议支持以及更模块化设计的网络实现。Fred 的 NET-2 代码被相当多的爱好者使用,随着软件正在工作的消息传播,数量一直在增加。此时的网络软件仍然是内核代码标准版本的大量补丁,并且未包含在正常版本中。NET-FAQ 和随后的 NET-2-HOWTO 描述了当时相当复杂的使其全部工作的过程。Fred 的重点是开发对标准网络实现的创新,这需要时间。用户社区越来越不耐烦地想要一些可靠工作并满足 80% 用户的需求的东西,并且与 Ross 一样,作为首席开发人员的 Fred 的压力也越来越大。
Alan Cox <iialan@www.uk.linux.org>
提出了旨在解决这种情况的问题的解决方案。他建议他将采用 Fred 的 NET-2 代码并对其进行调试,使其可靠和稳定,以便它可以满足不耐烦的用户群,同时减轻 Fred 的压力,使他能够继续他的工作。Alan 着手这样做,并取得了一些不错的成功,他的第一个 Linux 网络代码版本被称为“Net-2D(ebugged)”。该代码在许多典型配置中可靠地工作,用户群很高兴。Alan 显然有自己的想法和技能可以为该项目做出贡献,并且随后进行了许多关于 NET-2 代码发展方向的讨论。Linux 网络社区内形成了两个不同的学派,一个学派的理念是“首先使其工作,然后再使其更好”,另一个学派的理念是“首先使其更好”。Linus 最终进行了仲裁,并表示支持 Alan 的开发工作,并将 Alan 的代码包含在标准内核源代码发行版中。这使 Fred 处于困难的境地。任何持续的开发都将缺乏大量积极使用和测试代码的用户群,这意味着进展将缓慢而困难。Fred 继续工作了一段时间,最终辞职,Alan 成为 Linux 网络内核开发工作的新领导者。
Donald Becker <becker@cesdis.gsfc.nasa.gov>
很快展示了他在网络底层的才能,并制作了大量的以太网驱动程序,当前内核中包含的几乎所有驱动程序都是由 Donald 开发的。还有其他人做出了重大贡献,但 Donald 的工作非常出色,因此值得特别提及。
Alan 继续改进 NET-2-Debugged 代码一段时间,同时致力于推进“TODO”列表中仍未解决的一些问题。到 Linux 1.3.*
内核源代码成熟时,内核网络代码已迁移到 NET-3 版本,当前版本基于该版本。Alan 与来自 Linux 网络社区的一系列其他有才华的人的协助下,致力于网络代码的许多不同方面,并在各个方向上扩展了代码。Alan 制作了动态网络设备以及第一个标准的 AX.25 和 IPX 实现。Alan 一直在不断修改代码,缓慢地重组和增强代码,使其达到今天的状态。
Michael Callahan <callahan@maths.ox.ac.uk>
和 Al Longyear <longyear@netcom.com>
添加了 PPP 支持,这对增加积极使用 Linux 进行网络连接的人数也至关重要。
Jonathon Naylor <jsn@cs.nott.ac.uk>
通过显着增强 Alan 的 AX.25 代码,添加 NetRom 和 Rose 协议支持做出了贡献。AX.25/NetRom/Rose 支持本身非常重要,因为除了 Linux 之外,没有其他操作系统可以自豪地拥有对这些协议的标准原生支持。
当然,还有数百人为 Linux 网络软件的开发做出了重大贡献。其中一些人您将在后面的技术特定部分遇到,其他人则贡献了模块、驱动程序、错误修复、建议、测试报告和精神支持。在所有情况下,每个人都可以声称自己发挥了作用并提供了他们所能提供的。Linux 内核网络代码是 Linux 式无政府主义开发可以取得成果的绝佳例证,如果它尚未让您感到惊讶,那么很快就会让您感到惊讶,开发尚未停止。
您可以在许多地方找到有关 Linux 网络的良好信息。
有大量的顾问可用。列表可以在 LinuxPorts 顾问数据库 中找到
Linux 内核网络代码的当前维护者 Alan Cox 维护着一个万维网页面,其中包含 Linux 网络当前和新开发的亮点:www.uk.linux.org。
另一个好地方是 Olaf Kirch 撰写的一本书,名为 网络管理员指南
。Linux 文档项目 的作品,您可以在 网络管理员指南 HTML 版本 上交互式阅读,或者您可以从 metalab.unc.edu LDP ftp 存档 以各种格式获取它。Olaf 的书非常全面,并提供了 Linux 下网络配置的良好高级概述。
Linux 新闻层次结构中有一个专门讨论网络和相关事项的新闻组,它是:comp.os.linux.networking
有一个您可以订阅的邮件列表,您可以在其中提出与 Linux 网络相关的问题。要订阅,您应该发送邮件
To: majordomo@vger.rutgers.edu
Subject: anything at all
Message:
subscribe linux-net
在各种 IRC 网络上,通常有 #linux
频道,人们可以在其中回答有关 Linux 网络的问题。
请记住,在报告任何问题时,请尽可能包含有关问题的相关详细信息。具体来说,您应该指定您正在使用的软件版本,尤其是内核版本,pppd 或 dip 等工具的版本以及您遇到的问题的确切性质。这意味着记录您收到的任何错误消息的确切语法以及您正在发出的任何命令。
如果您正在寻找有关 tcp/ip 网络的一般基本教程信息,那么我建议您查看以下文档
本文档同时提供 文本版本 和 postscript 版本。
本文档同时提供 文本版本 和 postscript 版本。
如果您正在寻找有关 tcp/ip 网络的更详细信息,那么我强烈推荐
Internetworking with TCP/IP, Volume 1: principles, protocols and architecture, by Douglas E. Comer, ISBN 0-13-227836-7, Prentice Hall publications, Third Edition, 1995.如果您想学习如何在 Unix 兼容环境中编写网络应用程序,那么我也强烈推荐
Unix Network Programming, by W. Richard Stevens, ISBN 0-13-949876-1, Prentice Hall publications, 1990.这本书的第二版即将出现在书架上;新书由三卷组成:查看 Prenice-Hall 的网站 以进行进一步探查。
您也可以尝试 comp.protocols.tcp-ip 新闻组。
与互联网和 tcp/ip 协议套件相关的特定技术信息的重要来源是 RFC。RFC 是“请求评论”的首字母缩写,是提交和记录互联网协议标准的标准方法。有许多 RFC 存储库。其中许多站点是 ftp 站点,其他站点提供万维网访问,并带有相关的搜索引擎,使您可以搜索 RFC 数据库以查找特定关键字。
RFC 的一个可能来源是 Nexor RFC 数据库。
在您实际尝试配置网络之前,您几乎需要了解和理解以下小节。它们是不论您希望部署的网络的具体性质如何都适用的基本原则。
在您开始构建或配置网络之前,您需要一些东西。其中最重要的是
请注意
大多数当前的发行版都启用了网络功能,因此可能不需要重新编译内核。如果您运行的是众所周知的硬件,那么您应该一切正常。例如:3COM NIC、NE2000 NIC 或 Intel NIC。但是,如果您发现自己需要更新内核,则提供以下信息。
因为您现在运行的内核可能尚不支持您希望使用的网络类型或网卡,所以您可能需要内核源代码,以便您可以使用适当的选项重新编译内核。
对于 Redhat、Caldera、Debian 或 Suse 等主要发行版的用户来说,情况不再如此。只要您在主流硬件范围内,除非您需要非常特定的功能,否则无需重新编译内核。
您始终可以从 ftp.cdrom.com 获取最新的内核源代码。这不是官方站点,但它们具有大量带宽和大量允许的用户。官方站点是 kernel.org,但如果可以,请使用上面的站点。请记住,ftp.kernel.org 严重超载。使用镜像站点。
通常,内核源代码将被解压缩到 /usr/src/linux
目录中。有关如何应用补丁和构建内核的信息,您应该阅读 Kernel-HOWTO。有关如何配置内核模块的信息,您应该阅读“模块迷你 HOWTO”。此外,内核源代码中的 README
文件和 Documentation
目录对于勇敢的读者来说非常有用。
除非另有明确说明,否则我建议您坚持使用标准内核版本(版本号中第二个数字为偶数的版本)。开发版本内核(第二个数字为奇数的内核)可能具有结构或其他更改,这些更改可能会导致与系统上的其他软件一起工作时出现问题。如果您不确定除了可能存在的其他软件错误之外,您是否可以解决这些类型的问题,请不要使用它们。
另一方面,这里描述的某些功能是在 2.1 内核的开发过程中引入的,因此您必须做出选择:您可以坚持使用 2.0,同时等待 2.2 和更新的发行版以及每个新工具,或者您可以获取 2.1 并寻找利用新功能所需的各种支持程序。在我撰写此段落时,在 1998 年 8 月,2.1.115 是当前的,并且预计 2.2 将很快出现。
网络工具是您用来配置 Linux 网络设备的程序。这些工具允许您为设备分配地址和配置路由等。
大多数现代 Linux 发行版都附带了网络工具,因此,如果您是从发行版安装的并且尚未安装网络工具,则应这样做。
如果您不是从发行版安装的,那么您将需要自己获取源代码并编译这些工具。这并不困难。
网络工具现在由 Bernd Eckenfels 维护,可在以下位置获得:ftp.inka.de,并在以下位置镜像:ftp.uk.linux.org。
您还可以从 net-tools-1.51-3.i386.rpm 获取最新的 RedHat 软件包
请务必选择最适合您要使用的内核的版本,并按照软件包中的说明进行安装。
要安装和配置编写时最新的版本,您需要执行以下操作
user% tar xvfz net-tools-1.33.tar.gz
user% cd net-tools-1.33
user% make config
user% make
root# make install
或使用 Redhat 软件包
root# rpm -U net-tools-1.51-3.i386.rpm
此外,如果您打算配置防火墙或使用 IP 伪装功能,您将需要 ipfwadm 命令。最新版本可以从以下位置获取:ftp.xos.nl。同样,有许多版本可用。请务必选择与您的内核最匹配的版本。请注意,Linux 的防火墙功能在 2.1 开发期间发生了变化,并在内核 v2.2 中被 ipchains 取代。ipfwadm 仅适用于内核版本 2.0。以下是已知内核版本为 2.0 或更低的发行版。
Redhat 5.2 or below
Caldera pre version 2.2
Slackware pre version 4.x
Debian pre version 2.x
要安装和配置编写时最新的版本,您需要阅读位于 Linux 文档项目 的 IPChains howto
请注意,如果您运行的是内核版本 2.2(或较新的 2.1),则 ipfwadm 不是配置防火墙的正确工具。本 NET-3-HOWTO 的当前版本目前不处理新的防火墙设置。如果您需要有关 ipchains 的更多详细信息,请参考以上内容。
网络应用程序是 telnet 和 ftp 及其各自的服务器程序等程序。David Holland 一直在管理这些最常见的发行版,现在由 netbug@ftp.uk.linux.org
维护。您可以从以下位置获取发行版:ftp.uk.linux.org。
互联网协议地址由四个字节组成。约定是以所谓的“点分十进制表示法”编写地址。在这种形式中,每个字节都转换为十进制数字 (0-255),删除任何前导零,除非数字为零,并写入,每个字节之间用“.”字符分隔。按照约定,主机或路由器的每个接口都有一个 IP 地址。在某些情况下,在单个机器的每个接口上使用相同的 IP 地址是合法的,但通常每个接口都有自己的地址。
互联网协议网络是 IP 地址的连续序列。网络内的所有地址在地址中都有许多共同的数字。在网络内所有地址之间通用的地址部分称为地址的“网络部分”。其余数字称为“主机部分”。网络内所有地址共享的位数称为网络掩码,网络掩码的作用是确定哪些地址属于它所应用的网络,哪些不属于。例如,考虑以下内容
----------------- ---------------
Host Address 192.168.110.23
Network Mask 255.255.255.0
Network Portion 192.168.110.
Host portion .23
----------------- ---------------
Network Address 192.168.110.0
Broadcast Address 192.168.110.255
----------------- ---------------
任何与其网络掩码进行“按位与”运算的地址都将显示其所属网络的地址。因此,网络地址始终是网络地址范围内编号最低的地址,并且始终具有编码为全零的地址的主机部分。
广播地址是一个特殊地址,网络上的每个主机除了自己的唯一地址之外,还监听该地址。如果网络上的每个主机都应该接收数据报,则将数据报发送到此地址。某些类型的数据,如路由信息和警告消息,将传输到广播地址,以便网络上的每个主机都可以同时接收到它。关于广播地址应该是什么,有两种常用的标准。最广泛接受的标准是使用网络上最高的可能地址作为广播地址。在上面的示例中,这将是 192.168.110.255
。由于某些原因,其他站点采用了使用网络地址作为广播地址的约定。实际上,您使用哪个地址并不重要,但您必须确保网络上的每个主机都配置了相同的广播地址。
出于管理原因,在 IP 协议开发的早期,一些任意的地址组被组成网络,这些网络被分组到所谓的类中。这些类提供了一些可以分配的标准大小的网络。分配的范围是
----------------------------------------------------------
| Network | Netmask | Network Addresses |
| Class | | |
----------------------------------------------------------
| A | 255.0.0.0 | 0.0.0.0 - 127.255.255.255 |
| B | 255.255.0.0 | 128.0.0.0 - 191.255.255.255 |
| C | 255.255.255.0 | 192.0.0.0 - 223.255.255.255 |
|Multicast| 240.0.0.0 | 224.0.0.0 - 239.255.255.255 |
----------------------------------------------------------
您应该使用哪些地址取决于您正在做的具体事情。您可能必须结合以下活动才能获得您需要的所有地址
如果您希望将 Linux 机器安装到现有 IP 网络上,那么您应该联系管理该网络的任何人,并向他们索取以下信息
如果您正在构建专用网络,并且您永远不打算将该网络连接到互联网,那么您可以选择您喜欢的任何地址。但是,出于安全和一致性原因,已经保留了一些 IP 网络地址专门用于此目的。这些在 RFC1597 中指定,如下所示
-----------------------------------------------------------
| RESERVED PRIVATE NETWORK ALLOCATIONS |
-----------------------------------------------------------
| Network | Netmask | Network Addresses |
| Class | | |
-----------------------------------------------------------
| A | 255.0.0.0 | 10.0.0.0 - 10.255.255.255 |
| B | 255.255.0.0 | 172.16.0.0 - 172.31.255.255 |
| C | 255.255.255.0 | 192.168.0.0 - 192.168.255.255 |
-----------------------------------------------------------
您应该首先决定您希望您的网络有多大,然后选择您需要的尽可能多的地址。Linux 系统引导过程有几种不同的方法。内核引导后,它始终执行一个名为“init”的程序。然后,init 程序读取其配置文件 /etc/inittab
并开始引导过程。周围有几种不同的 init 风格,尽管现在每个人都在收敛到 Miguel van Smoorenburg 开发的 System V (Five) 风格。
尽管 init 程序始终是相同的,但系统引导的设置在每个发行版中以不同的方式组织。
通常,/etc/inittab
文件包含类似于以下内容的条目
si::sysinit:/etc/init.d/boot
此行指定实际管理引导序列的 shell 脚本文件的名称。此文件在某种程度上等效于 MS-DOS 中的 AUTOEXEC.BAT
文件。
通常还有其他脚本由引导脚本调用,并且网络通常在其中许多脚本之一中配置。
下表可用作您系统的指南
---------------------------------------------------------------------------
Distrib. | Interface Config/Routing | Server Initialization
---------------------------------------------------------------------------
Debian | /etc/init.d/network | /etc/rc2.d/*
---------------------------------------------------------------------------
Slackware| /etc/rc.d/rc.inet1 | /etc/rc.d/rc.inet2
---------------------------------------------------------------------------
RedHat | /etc/rc.d/init.d/network | /etc/rc.d/rc3.d/*
---------------------------------------------------------------------------
请注意,Debian 和 Red Hat 使用整个目录来托管启动系统服务的脚本(并且通常信息不位于这些文件中,例如 Red Hat 系统将所有系统配置存储在 /etc/sysconfig
下的文件中,引导脚本从中检索信息)。如果您想掌握引导过程的详细信息,我的建议是查看 /etc/inittab 和 init 附带的文档。Linux Journal 也将发表一篇关于系统初始化的文章,一旦该文档在网上可用,本文档将指向它。
大多数现代发行版都包含一个程序,该程序允许您配置许多常见的网络接口类型。如果您有其中一个,那么您应该先看看它是否可以完成您想要的操作,然后再尝试手动配置。
-----------------------------------------
Distrib | Network configuration program
-----------------------------------------
RedHat | /usr/bin/netcfg
Slackware | /sbin/netconfig
-----------------------------------------
在许多 Unix 操作系统中,网络设备在 /dev 目录中都有外观。Linux 中并非如此。在 Linux 中,网络设备是在软件中动态创建的,不需要设备文件存在。
在大多数情况下,网络设备是在设备驱动程序初始化并找到您的硬件时自动创建的。例如,以太网设备驱动程序在找到您的以太网硬件时顺序创建 eth[0..n]
接口。找到的第一个以太网卡变为 eth0
,第二个变为 eth1
,依此类推。
但在某些情况下,特别是 slip 和 ppp,网络设备是通过某些用户程序的动作创建的。相同的顺序设备编号适用,但设备不会在启动时自动创建。原因是与以太网设备不同,活动的 slip 或 ppp 设备的数量可能在机器的正常运行时间内变化。这些情况将在后面的章节中更详细地介绍。
当您拥有所需的所有程序以及您的地址和网络信息时,您可以配置您的网络接口。当我们谈论配置网络接口时,我们指的是为网络设备分配适当的地址以及为网络设备的其他可配置参数设置适当值的过程。最常用于执行此操作的程序是 ifconfig(接口配置)命令。
通常,您将使用类似于以下的命令
root# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up
在这种情况下,我正在使用 IP 地址“192.168.0.1
”和网络掩码“255.255.255.0
”配置以太网接口“eth0
”。命令末尾的“up”告诉接口它应该变为活动状态,但通常可以省略,因为它是默认设置。要关闭接口,您只需调用“ifconfig eth0 down
”。
内核在配置接口时会采用某些默认设置。例如,您可以为接口指定网络地址和广播地址,但如果您不这样做(如我的上述示例),则内核会根据您提供的网络掩码,以及如果您不提供网络掩码,则根据配置的 IP 地址的网络类别,做出合理的猜测。在我的示例中,内核会假定正在接口上配置一个 C 类网络,并将该接口的网络地址配置为 `192.168.0.0
',广播地址配置为 `192.168.0.255
'。
ifconfig 命令还有许多其他选项。其中最重要的选项包括
此选项激活接口(也是默认选项)。
此选项禁用接口。
此选项启用或禁用在此接口上使用地址解析协议
此选项启用或禁用接收所有硬件多播数据包。硬件多播使主机组能够接收寻址到特殊目标地址的数据包。如果您正在使用桌面视频会议等应用程序,这可能很重要,但通常不使用。
此参数允许您设置此设备的 MTU。
此参数允许您设置此设备所属网络的网络掩码。
此参数仅适用于某些类型的硬件,并允许您设置此设备的硬件 IRQ。
此参数允许您启用和设置接受发送到广播地址的数据报,或禁用接收这些数据报。
此参数允许您设置点对点链路(例如 slip 或 ppp)另一端机器的地址。
此参数允许您设置某些类型网络设备的硬件地址。这对于以太网通常不是很有用,但对于其他网络类型(如 AX.25)很有用。
您可以在任何网络接口上使用 ifconfig 命令。某些用户程序(如 pppd 和 dip)会在创建网络设备时自动配置它们,因此手动使用 ifconfig 是不必要的。
“`名称解析器'”是 Linux 标准库的一部分。它的主要功能是提供一项服务,将人类友好的主机名(如“`ftp.funet.fi
'”)转换为机器友好的 IP 地址(如 128.214.248.6
)。
您可能熟悉 Internet 主机名的外观,但可能不了解它们的构造或解构方式。Internet 域名本质上是分层的,也就是说,它们具有树状结构。“`域'”是一个名称家族或名称组。“`域'”可以分解为“`子域'”。“`顶级域'”是不属于子域的域。顶级域在 RFC-920 中指定。以下是一些最常见的顶级域的示例:
商业组织
教育组织
政府组织
军事组织
其他组织
互联网相关组织
这些是代表特定国家/地区的两个字母的代码。
由于历史原因,大多数属于非国家/地区顶级域名的域名都由美国境内的组织使用,尽管美国也有自己的国家/地区代码“`.us
'”。对于 .com
和 .org
域名而言,情况已不再如此,这些域名通常被非美国公司使用。
这些顶级域名中的每一个都有子域名。基于国家/地区名称的顶级域名通常接下来会细分为基于 com
、edu
、gov
、mil
和 org
域名的子域名。因此,例如,您最终会得到:澳大利亚商业和政府组织的 com.au
和 gov.au
;请注意,这不是一般规则,因为实际策略取决于每个域的命名机构。
下一级划分通常代表组织的名称。更进一步的子域名性质各异,通常下一级子域名基于组织的部门结构,但也可能基于组织网络管理员认为合理且有意义的任何标准。
名称最左边的部分始终是分配给主机计算机的唯一名称,称为“`主机名'”,名称中主机名右边的部分称为“`域名'”,完整名称称为“`完全限定域名'”。
以 Terry 的主机为例,完全限定域名是“`perf.no.itg.telstra.com.au
'”。这意味着主机名是“`perf
'”,域名是“`no.itg.telstra.com.au
'”。域名基于其国家/地区(澳大利亚)的顶级域名,并且由于其电子邮件地址属于商业组织,因此“`.com
'”作为下一级域名。公司名称是(曾经是)“`telstra
'”,他们的内部命名结构基于组织结构,在本例中,该机器属于信息技术组网络运营部门。
通常,名称都相当短;例如,我的 ISP 称为“`systemy.it
'”,我的非营利组织称为“`linux.it
'”,没有任何 com
和 org
子域名,因此我自己的主机仅称为“`morgana.systemy.it
'”,而 rubini@linux.it
是一个有效的电子邮件地址。请注意,域的所有者有权注册主机名以及子域名;例如,我所属的 LUG 使用域名 pluto.linux.it
,因为 linux.it
的所有者同意为 LUG 开放一个子域名。
您需要知道您的主机名将属于哪个域。名称解析器软件通过向“`域名服务器'”发出请求来提供此名称转换服务,因此您需要知道您可以使用的本地名称服务器的 IP 地址。
您需要编辑三个文件,我将依次介绍这些文件。
/etc/resolv.conf
是名称解析器代码的主要配置文件。其格式非常简单。它是一个文本文件,每行一个关键字。通常使用三个关键字,它们是
此关键字指定本地域名。
此关键字指定要搜索主机名的备用域名列表
此关键字可以多次使用,指定域名服务器的 IP 地址,以便在解析名称时查询
一个示例 /etc/resolv.conf
可能如下所示
domain maths.wu.edu.au
search maths.wu.edu.au wu.edu.au
nameserver 192.168.10.1
nameserver 192.168.12.1
此示例指定追加到不合格名称(即不带域名的主机名)的默认域名是 maths.wu.edu.au
,并且如果在该域中找不到主机,则也直接尝试 wu.edu.au
域。提供了两个名称服务器条目,名称解析器代码可以调用它们中的每一个来解析名称。
/etc/host.conf
文件是您配置一些控制名称解析器代码行为的项目的地方。`resolv+
' 手册页详细描述了此文件的格式。在几乎所有情况下,以下示例都适用于您
order hosts,bind
multi on
此配置告诉名称解析器在尝试查询名称服务器之前检查 /etc/hosts
文件,并返回在 /etc/hosts
文件中找到的主机的所有有效地址,而不仅仅是第一个。
/etc/hosts
文件是您放置本地主机的名称和 IP 地址的地方。如果您将主机放置在此文件中,则无需查询域名服务器即可获取其 IP 地址。这样做的不利之处在于,如果该主机的 IP 地址发生更改,您必须自己保持此文件更新。在一个管理良好的系统中,通常出现在此文件中的主机名只有环回接口的条目和本地主机名。
# /etc/hosts
127.0.0.1 localhost loopback
192.168.0.1 this.host.name
您可以每行指定多个主机名,如第一个条目所示,它是环回接口的标准条目。
如果您想运行本地名称服务器,您可以轻松地完成它。请参阅 DNS-HOWTO 和您的 BIND(Berkeley Internet Name Domain)版本中包含的任何文档。
“`环回
'”接口是一种特殊类型的接口,允许您与自己建立连接。您可能出于各种原因想要这样做,例如,您可能希望测试某些网络软件,而不会干扰网络上的任何人。按照惯例,IP 地址“`127.0.0.1
'”已专门分配用于环回。因此,无论您去哪台机器,如果您打开到 127.0.0.1
的 telnet 连接,您将始终到达本地主机。
配置环回接口很简单,您应该确保这样做(但请注意,此任务通常由标准初始化脚本执行)。
root# ifconfig lo 127.0.0.1
root# route add -host 127.0.0.1 lo
我们将在下一节中详细讨论 route 命令。
路由是一个很大的主题。很容易写出关于它的长篇大论。你们大多数人的路由需求都相当简单,有些人则不然。我将仅介绍一些路由的基本原理。如果您对更详细的信息感兴趣,我建议您参考文档开头提供的参考资料。
让我们从一个定义开始。什么是 IP 路由?这是我正在使用的一个定义
IP 路由是具有多个网络连接的主机决定将收到的 IP 数据报传递到何处的过程。
用一个例子来说明这一点可能很有用。想象一下典型的办公室路由器,它可能有一个连接到 Internet 的 PPP 链路,一些以太网段为工作站供电,以及另一个连接到另一个办公室的 PPP 链路。当路由器在其任何网络连接上接收到数据报时,路由是它用来确定接下来应将数据报发送到哪个接口的机制。简单的主机也需要路由,所有 Internet 主机都有两个网络设备,一个是上面描述的环回接口,另一个是它用来与网络其余部分通信的接口,可能是以太网,也可能是 PPP 或 SLIP 串行接口。
好的,那么路由是如何工作的呢?每个主机都保留一个特殊的路由规则列表,称为路由表。此表包含行,这些行通常包含至少三个字段,第一个是目标地址,第二个是将数据报路由到的接口名称,第三个是可选的,是将数据报在其网络下一步传输的另一台机器的 IP 地址。在 Linux 中,您可以使用以下命令查看此表
user% cat /proc/net/route
或使用以下任一命令
user% /sbin/route -n
user% netstat -r
路由过程非常简单:接收到传入的数据报,检查目标地址(它是给谁的),并将其与表中的每个条目进行比较。选择与该地址最匹配的条目,并将数据报转发到指定的接口。如果网关字段已填写,则数据报将通过指定的接口转发到该主机,否则假定目标地址位于接口支持的网络上。
要操作此表,需要使用一个特殊命令。此命令接受命令行参数,并将它们转换为内核系统调用,请求内核在路由表中添加、删除或修改条目。该命令称为“`route'”。
一个简单的例子。想象一下您有一个以太网网络。您被告知这是一个 C 类网络,地址为 192.168.1.0
。您已获得 IP 地址 192.168.1.10
供您使用,并被告知 192.168.1.1
是连接到 Internet 的路由器。
第一步是按照前面所述配置接口。您可以使用类似这样的命令
root# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
现在您需要在路由表中添加一个条目,告诉内核地址与 192.168.1.*
匹配的所有主机的数据报都应发送到以太网设备。您可以使用类似于
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
请注意使用“`-net
'”参数来告诉 route 程序此条目是网络路由。您的另一个选择是“`-host
'”路由,它是特定于一个 IP 地址的路由。
此路由将使您能够与以太网段上的所有主机建立 IP 连接。但是,对于不在您的以太网段上的所有 IP 主机呢?
必须为每个可能的目标网络添加路由将是一项非常困难的工作,因此使用了一个特殊的技巧来简化此任务。这个技巧称为“`默认
'”路由。default
路由匹配每个可能的目的地,但匹配度较差,因此如果存在任何其他匹配所需地址的条目,则将使用该条目而不是 default
路由。default
路由的想法很简单,就是让您能够说“其他所有内容都应转到这里”。在我设计的示例中,您将使用类似这样的条目
root# route add default gw 192.168.1.1 eth0
“`gw
'”参数告诉 route 命令,下一个参数是网关或路由器机器的 IP 地址或名称,匹配此条目的所有数据报都应定向到该网关或路由器机器以进行进一步路由。
因此,您的完整配置将如下所示
root# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
root# route add default gw 192.168.1.1 eth0
如果您仔细查看您的网络“`rc
'”文件,您会发现其中至少有一个看起来与此非常相似。这是一种非常常见的配置。
现在让我们看一下稍微复杂的路由配置。让我们想象一下,我们正在配置我们之前看到的路由器,该路由器支持连接到 Internet 的 PPP 链路和为办公室工作站供电的 LAN 段。假设路由器有三个以太网段和一个 PPP 链路。我们的路由配置将如下所示
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
root# route add -net 192.168.2.0 netmask 255.255.255.0 eth1
root# route add -net 192.168.3.0 netmask 255.255.255.0 eth2
root# route add default ppp0
每个工作站都将使用上面介绍的更简单的形式,只有路由器需要单独指定每个网络路由,因为对于工作站,default
路由机制将捕获所有路由,让路由器担心如何适当地拆分它们。您可能想知道为什么提供的默认路由没有指定“`gw
'”。原因很简单,PPP 和 slip 等串行链路协议的网络上永远只有两台主机,每端一台。将链路另一端的主机指定为网关是毫无意义且多余的,因为没有其他选择,因此您无需为这些类型的网络连接指定网关。以太网、arcnet 或令牌环等其他网络类型确实需要指定网关,因为这些网络支持大量主机。
上面描述的路由配置最适合于只有到达目的地的单一可能路径的简单网络安排。当您有更复杂的网络安排时,事情会变得有点复杂。幸运的是,对于你们大多数人来说,这不会成为问题。
“手动路由”或“静态路由”(如所述)的最大问题是,如果您的网络中某台机器或链路发生故障,那么如果您有其他路径,则唯一可以引导数据报的另一种方式是手动干预并执行适当的命令。自然,这很笨拙、缓慢、不切实际且容易出错。已经开发了各种技术来在存在备用路由的网络故障时自动调整路由表,所有这些技术都大致归类为术语“动态路由协议”。
您可能听说过一些更常见的动态路由协议。最常见的可能是 RIP(路由信息协议)和 OSPF(开放最短路径优先协议)。路由信息协议在小型网络上非常常见,例如中小型公司网络或建筑物网络。OSPF 更现代,更能够处理大型网络配置,更适合于网络中存在大量可能路径的环境。这些协议的常见实现是:“`routed'” - RIP 和 “`gated'” - RIP、OSPF 等。“`routed'”程序通常与您的 Linux 发行版一起提供,或者包含在上面详述的“NetKit”软件包中。
以下示例说明了您可能在何处以及如何使用动态路由协议
192.168.1.0 / 192.168.2.0 /
255.255.255.0 255.255.255.0
- -
| |
| /-----\ /-----\ |
| | |ppp0 // ppp0| | |
eth0 |---| A |------//---------| B |---| eth0
| | | // | | |
| \-----/ \-----/ |
| \ ppp1 ppp1 / |
- \ / -
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\ /
ppp0\ /ppp1
/-----\
| |
| C |
| |
\-----/
|eth0
|
|---------|
192.168.3.0 /
255.255.255.0
我们有三个路由器 A、B 和 C。每个路由器都支持一个带有 C 类 IP 网络(网络掩码 255.255.255.0)的以太网段。每个路由器还具有与其他路由器的 PPP 链路。网络形成一个三角形。
应该清楚的是,路由器 A 上的路由表可能如下所示
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
root# route add -net 192.168.2.0 netmask 255.255.255.0 ppp0
root# route add -net 192.168.3.0 netmask 255.255.255.0 ppp1
这可以正常工作,直到路由器 A 和 B 之间的链路发生故障。如果该链路发生故障,则使用上面显示的路由条目,路由器 A 的以太网段上的主机将无法访问路由器 B 的以太网段上的主机,因为它们的数据报将被定向到路由器 A 的 ppp0 链路,该链路已断开。它们仍然可以继续与路由器 C 的以太网段上的主机通信,并且路由器 C 的以太网段上的主机仍然可以与路由器 B 的以太网段上的主机通信,因为路由器 B 和 C 之间的链路仍然完好无损。
但是,等等,如果 A 可以与 C 通信,而 C 仍然可以与 B 通信,那么为什么 A 不应该通过 C 路由其发送给 B 的数据报,并让 C 将它们发送给 B 呢?这正是 RIP 等动态路由协议旨在解决的问题。如果路由器 A、B 和 C 中的每一个都运行路由守护程序,那么它们的路由表将自动调整以反映网络的新状态,如果网络中的任何一个链路发生故障。配置这样的网络很简单,在每个路由器上,您只需要做两件事。在本例中,对于路由器 A
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
root# /usr/sbin/routed
“`routed'”路由守护程序在启动时自动查找所有活动网络端口,并在每个网络设备上发送和侦听消息,以使其能够确定和更新主机上的路由表。
这是对动态路由及其使用位置的非常简短的解释。如果您想要更多信息,则应参考本文档顶部列出的建议参考资料。
与动态路由相关的重要点是
网络服务器和服务是允许远程用户使用您的 Linux 机器的程序。服务器程序侦听网络端口。网络端口是一种在任何特定主机上寻址特定服务的方式,也是服务器知道传入的 telnet 连接和传入的 ftp 连接之间区别的方式。远程用户建立到您的机器的网络连接,而侦听该端口的服务器程序(网络守护程序)接受连接并执行。网络守护程序的运行方式有两种。这两种方式在实践中都很常用。这两种方式是
网络守护程序侦听指定的网络端口,当建立传入连接时,它自己管理网络连接以提供服务。
inetd 服务器是一个特殊的网络守护程序,专门用于管理传入的网络连接。它有一个配置文件,告诉它在收到传入连接时需要运行哪个程序。可以为 tcp 或 udp 协议配置任何服务端口。端口在另一个文件中描述,我们稍后会讨论。
我们需要配置两个重要的文件。它们是 /etc/services
文件(将名称分配给端口号)和 /etc/inetd.conf
文件(inetd 网络守护程序的配置文件)。
/etc/services
/etc/services
文件是一个简单的数据库,它将人类友好的名称与机器友好的服务端口关联起来。其格式非常简单。该文件是一个文本文件,每一行代表数据库中的一个条目。每个条目由三个字段组成,这些字段由任意数量的空白字符(制表符或空格)分隔。这些字段是
name port/protocol aliases # comment
代表所描述服务的单个单词名称。
此字段分为两个子字段。
一个数字,指定命名服务将可用的端口号。大多数常用服务都有分配的服务号。这些在 RFC-1340
中描述。
此子字段可以设置为 tcp
或 udp
。重要的是要注意,18/tcp
的条目与 18/udp
的条目非常不同,并且没有技术原因要求同一服务需要同时存在于两者之上。通常常识占上风,只有当特定服务同时通过 tcp
和 udp
可用时,您才会看到两者的条目。
可用于指代此服务条目的其他名称。
行中出现在“`#
'”字符之后的任何文本都将被忽略并被视为注释。
/etc/services
文件。所有现代 Linux 发行版都提供了一个良好的 /etc/services
文件。以防万一您碰巧是从头开始构建机器,这里是旧 Debian 发行版提供的 /etc/services
文件的副本
# /etc/services:
# $Id: NET3-4-HOWTO.sgml,v 1.2 2000/07/19 15:33:03 gferg dead $
#
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1340, ``Assigned Numbers'' (July 1992). Not all ports
# are included, only the more common ones.
tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
msp 18/tcp # message send protocol
msp 18/udp # message send protocol
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
ftp-data 20/tcp
ftp 21/tcp
ssh 22/tcp # SSH Remote Login Protocol
ssh 22/udp # SSH Remote Login Protocol
telnet 23/tcp
# 24 - private
smtp 25/tcp mail
# 26 - unassigned
time 37/tcp timserver
time 37/udp timserver
rlp 39/udp resource # resource location
nameserver 42/tcp name # IEN 116
whois 43/tcp nicname
re-mail-ck 50/tcp # Remote Mail Checking Protocol
re-mail-ck 50/udp # Remote Mail Checking Protocol
domain 53/tcp nameserver # name-domain server
domain 53/udp nameserver
mtp 57/tcp # deprecated
bootps 67/tcp # BOOTP server
bootps 67/udp
bootpc 68/tcp # BOOTP client
bootpc 68/udp
tftp 69/udp
gopher 70/tcp # Internet Gopher
gopher 70/udp
rje 77/tcp netrjs
finger 79/tcp
www 80/tcp http # WorldWideWeb HTTP
www 80/udp # HyperText Transfer Protocol
link 87/tcp ttylink
kerberos 88/tcp kerberos5 krb5 # Kerberos v5
kerberos 88/udp kerberos5 krb5 # Kerberos v5
supdup 95/tcp
# 100 - reserved
hostnames 101/tcp hostname # usually from sri-nic
iso-tsap 102/tcp tsap # part of ISODE.
csnet-ns 105/tcp cso-ns # also used by CSO name server
csnet-ns 105/udp cso-ns
rtelnet 107/tcp # Remote Telnet
rtelnet 107/udp
pop-2 109/tcp postoffice # POP version 2
pop-2 109/udp
pop-3 110/tcp # POP version 3
pop-3 110/udp
sunrpc 111/tcp portmapper # RPC 4.0 portmapper TCP
sunrpc 111/udp portmapper # RPC 4.0 portmapper UDP
auth 113/tcp authentication tap ident
sftp 115/tcp
uucp-path 117/tcp
nntp 119/tcp readnews untp # USENET News Transfer Protocol
ntp 123/tcp
ntp 123/udp # Network Time Protocol
netbios-ns 137/tcp # NETBIOS Name Service
netbios-ns 137/udp
netbios-dgm 138/tcp # NETBIOS Datagram Service
netbios-dgm 138/udp
netbios-ssn 139/tcp # NETBIOS session service
netbios-ssn 139/udp
imap2 143/tcp # Interim Mail Access Proto v2
imap2 143/udp
snmp 161/udp # Simple Net Mgmt Proto
snmp-trap 162/udp snmptrap # Traps for SNMP
cmip-man 163/tcp # ISO mgmt over IP (CMOT)
cmip-man 163/udp
cmip-agent 164/tcp
cmip-agent 164/udp
xdmcp 177/tcp # X Display Mgr. Control Proto
xdmcp 177/udp
nextstep 178/tcp NeXTStep NextStep # NeXTStep window
nextstep 178/udp NeXTStep NextStep # server
bgp 179/tcp # Border Gateway Proto.
bgp 179/udp
prospero 191/tcp # Cliff Neuman's Prospero
prospero 191/udp
irc 194/tcp # Internet Relay Chat
irc 194/udp
smux 199/tcp # SNMP Unix Multiplexer
smux 199/udp
at-rtmp 201/tcp # AppleTalk routing
at-rtmp 201/udp
at-nbp 202/tcp # AppleTalk name binding
at-nbp 202/udp
at-echo 204/tcp # AppleTalk echo
at-echo 204/udp
at-zis 206/tcp # AppleTalk zone information
at-zis 206/udp
z3950 210/tcp wais # NISO Z39.50 database
z3950 210/udp wais
ipx 213/tcp # IPX
ipx 213/udp
imap3 220/tcp # Interactive Mail Access
imap3 220/udp # Protocol v3
ulistserv 372/tcp # UNIX Listserv
ulistserv 372/udp
#
# UNIX specific services
#
exec 512/tcp
biff 512/udp comsat
login 513/tcp
who 513/udp whod
shell 514/tcp cmd # no passwords used
syslog 514/udp
printer 515/tcp spooler # line printer spooler
talk 517/udp
ntalk 518/udp
route 520/udp router routed # RIP
timed 525/udp timeserver
tempo 526/tcp newdate
courier 530/tcp rpc
conference 531/tcp chat
netnews 532/tcp readnews
netwall 533/udp # -for emergency broadcasts
uucp 540/tcp uucpd # uucp daemon
remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem
klogin 543/tcp # Kerberized `rlogin' (v5)
kshell 544/tcp krcmd # Kerberized `rsh' (v5)
kerberos-adm 749/tcp # Kerberos `kadmin' (v5)
#
webster 765/tcp # Network dictionary
webster 765/udp
#
# From ``Assigned Numbers'':
#
#> The Registered Ports are not controlled by the IANA and on most systems
#> can be used by ordinary user processes or programs executed by ordinary
#> users.
#
#> Ports are used in the TCP [45,106] to name the ends of logical
#> connections which carry long term conversations. For the purpose of
#> providing services to unknown callers, a service contact port is
#> defined. This list specifies the port used by the server process as its
#> contact port. While the IANA can not control uses of these ports it
#> does register or list uses of these ports as a convenience to the
#> community.
#
ingreslock 1524/tcp
ingreslock 1524/udp
prospero-np 1525/tcp # Prospero non-privileged
prospero-np 1525/udp
rfe 5002/tcp # Radio Free Ethernet
rfe 5002/udp # Actually uses UDP only
bbs 7000/tcp # BBS service
#
#
# Kerberos (Project Athena/MIT) services
# Note that these are for Kerberos v4 and are unofficial. Sites running
# v4 should uncomment these and comment out the v5 entries above.
#
kerberos4 750/udp kdc # Kerberos (server) udp
kerberos4 750/tcp kdc # Kerberos (server) tcp
kerberos_master 751/udp # Kerberos authentication
kerberos_master 751/tcp # Kerberos authentication
passwd_server 752/udp # Kerberos passwd server
krb_prop 754/tcp # Kerberos slave propagation
krbupdate 760/tcp kreg # Kerberos registration
kpasswd 761/tcp kpwd # Kerberos "passwd"
kpop 1109/tcp # Pop with Kerberos
knetd 2053/tcp # Kerberos de-multiplexor
zephyr-srv 2102/udp # Zephyr server
zephyr-clt 2103/udp # Zephyr serv-hm connection
zephyr-hm 2104/udp # Zephyr hostmanager
eklogin 2105/tcp # Kerberos encrypted rlogin
#
# Unofficial but necessary (for NetBSD) services
#
supfilesrv 871/tcp # SUP server
supfiledbg 1127/tcp # SUP debugging
#
# Datagram Delivery Protocol services
#
rtmp 1/ddp # Routing Table Maintenance Protocol
nbp 2/ddp # Name Binding Protocol
echo 4/ddp # AppleTalk Echo Protocol
zip 6/ddp # Zone Information Protocol
#
# Debian GNU/Linux services
rmtcfg 1236/tcp # Gracilis Packeten remote config server
xtel 1313/tcp # french minitel
cfinger 2003/tcp # GNU Finger
postgres 4321/tcp # POSTGRES
mandelspawn 9359/udp mandelbrot # network mandelbrot
# Local services
在现实世界中,实际文件一直在增长,因为新的服务不断被创建。如果您担心自己的副本不完整,我建议从最新的发行版复制一个新的 /etc/services
。
/etc/inetd.conf
/etc/inetd.conf
文件是 inetd 服务器守护程序的配置文件。其功能是告诉 inetd 在收到特定服务的连接请求时该怎么做。对于您希望接受连接的每个服务,您必须告诉 inetd 要运行哪个网络服务器守护程序以及如何运行它。
其格式也相当简单。它是一个文本文件,每一行描述您希望提供的服务。行中“`#
'”之后的任何文本都将被忽略并被视为注释。每行包含七个字段,这些字段由任意数量的空白字符(制表符或空格)分隔。通用格式如下
service socket_type proto flags user server_path server_args
是从 /etc/services
文件中获取的与此配置相关的服务。
此字段描述此条目将考虑相关的套接字类型,允许的值为:stream
、dgram
、raw
、rdm
或 seqpacket
。这在本质上有点技术性,但根据经验,几乎所有基于 tcp
的服务都使用 stream
,几乎所有基于 udp
的服务都使用 dgram
。只有非常特殊类型的服务器守护程序才会使用任何其他值。
要考虑对此条目有效的协议。这应与 /etc/services
文件中的相应条目匹配,并且通常为 tcp
或 udp
。基于 Sun RPC(远程过程调用)的服务器将使用 rpc/tcp
或 rpc/udp
。
此字段实际上只有两个可能的设置。此字段设置告诉 inetd 网络服务器程序在启动后是否释放套接字,以及因此 inetd 是否可以在下一个连接请求时启动另一个套接字,或者 inetd 是否应该等待并假定任何已运行的服务器守护程序都将处理新的连接请求。同样,这有点棘手,但根据经验,所有 tcp
服务器都应将此条目设置为 nowait
,而大多数 udp
服务器都应将此条目设置为 wait
。请注意,有一些明显的例外情况,因此如果不确定,请让示例指导您。
此字段描述在启动网络守护程序时,将从 /etc/passwd
中的哪个用户帐户设置为网络守护程序的所有者。如果您想防范安全风险,这通常很有用。您可以将条目的用户设置为 nobody
用户,以便在网络服务器安全性遭到破坏时,将可能的损害降至最低。不过,通常此字段设置为 root
,因为许多服务器需要 root 权限才能正常运行。
此字段是为此条目执行的实际服务器程序的路径名。
此字段包含行的其余部分,是可选的。在此字段中,您可以放置您希望在启动服务器守护程序程序时传递给它的任何命令行参数。
/etc/inetd.conf
与 /etc/services
文件一样,所有现代发行版都将包含一个良好的 /etc/inetd.conf
文件供您使用。为了完整起见,这里是 Debian 发行版中的 /etc/inetd.conf
文件。
# /etc/inetd.conf: see inetd(8) for further informations.
#
# Internet server configuration database
#
#
# Modified for Debian by Peter Tobias <tobias@et-inf.fho-emden.de>
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
# Internal services
#
#echo stream tcp nowait root internal
#echo dgram udp wait root internal
discard stream tcp nowait root internal
discard dgram udp wait root internal
daytime stream tcp nowait root internal
daytime dgram udp wait root internal
#chargen stream tcp nowait root internal
#chargen dgram udp wait root internal
time stream tcp nowait root internal
time dgram udp wait root internal
#
# These are standard services.
#
telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd
ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.ftpd
#fsp dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.fspd
#
# Shell, login, exec and talk are BSD protocols.
#
shell stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rshd
login stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rlogind
#exec stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rexecd
talk dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.talkd
ntalk dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.ntalkd
#
# Mail, news and uucp services.
#
smtp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.smtpd
#nntp stream tcp nowait news /usr/sbin/tcpd /usr/sbin/in.nntpd
#uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico
#comsat dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.comsat
#
# Pop et al
#
#pop-2 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.pop2d
#pop-3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.pop3d
#
# `cfinger' is for the GNU finger server available for Debian. (NOTE: The
# current implementation of the `finger' daemon allows it to be run as `root'.)
#
#cfinger stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.cfingerd
#finger stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.fingerd
#netstat stream tcp nowait nobody /usr/sbin/tcpd /bin/netstat
#systat stream tcp nowait nobody /usr/sbin/tcpd /bin/ps -auwwx
#
# Tftp service is provided primarily for booting. Most sites
# run this only on machines acting as "boot servers."
#
#tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd
#tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /boot
#bootps dgram udp wait root /usr/sbin/bootpd bootpd -i -t 120
#
# Kerberos authenticated services (these probably need to be corrected)
#
#klogin stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rlogind -k
#eklogin stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rlogind -k -x
#kshell stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rshd -k
#
# Services run ONLY on the Kerberos server (these probably need to be corrected)
#
#krbupdate stream tcp nowait root /usr/sbin/tcpd /usr/sbin/registerd
#kpasswd stream tcp nowait root /usr/sbin/tcpd /usr/sbin/kpasswdd
#
# RPC based services
#
#mountd/1 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.mountd
#rstatd/1-3 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.rstatd
#rusersd/2-3 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.rusersd
#walld/1 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.rwalld
#
# End of inetd.conf.
ident stream tcp nowait nobody /usr/sbin/identd identd -i
在 Linux 下,有许多与网络配置相关的杂项文件,您可能会感兴趣。您可能永远不必修改这些文件,但值得描述它们,以便您了解它们包含什么以及它们的用途。
/etc/protocols
/etc/protocols
文件是一个数据库,它将协议 ID 号映射到协议名称。程序员使用它来允许他们在程序中按名称指定协议,并且一些程序(如 tcpdump)也使用它来允许他们在输出中显示名称而不是数字。该文件的通用语法是
protocolname number aliases
与 Debian 发行版一起提供的 /etc/protocols
文件如下所示
# /etc/protocols:
# $Id: NET3-4-HOWTO.sgml,v 1.2 2000/07/19 15:33:03 gferg dead $
#
# Internet (IP) protocols
#
# from: @(#)protocols 5.1 (Berkeley) 4/17/89
#
# Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).
ip 0 IP # internet protocol, pseudo protocol number
icmp 1 ICMP # internet control message protocol
igmp 2 IGMP # Internet Group Management
ggp 3 GGP # gateway-gateway protocol
ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')
st 5 ST # ST datagram mode
tcp 6 TCP # transmission control protocol
egp 8 EGP # exterior gateway protocol
pup 12 PUP # PARC universal packet protocol
udp 17 UDP # user datagram protocol
hmp 20 HMP # host monitoring protocol
xns-idp 22 XNS-IDP # Xerox NS IDP
rdp 27 RDP # "reliable datagram" protocol
iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4
xtp 36 XTP # Xpress Tranfer Protocol
ddp 37 DDP # Datagram Delivery Protocol
idpr-cmtp 39 IDPR-CMTP # IDPR Control Message Transport
rspf 73 RSPF # Radio Shortest Path First.
vmtp 81 VMTP # Versatile Message Transport
ospf 89 OSPFIGP # Open Shortest Path First IGP
ipip 94 IPIP # Yet Another IP encapsulation
encap 98 ENCAP # Yet Another IP encapsulation
/etc/networks
/etc/networks
文件的功能与 /etc/hosts
文件的功能类似。它提供了一个简单的网络名称与网络地址数据库。其格式的不同之处在于,每行可能只有两个字段,并且字段的编码方式如下
networkname networkaddress
一个示例可能如下所示
loopnet 127.0.0.0
localnet 192.168.0.0
amprnet 44.0.0.0
当您使用 route 命令等命令时,如果目标是网络,并且该网络在 /etc/networks
文件中有一个条目,则 route 命令将显示该网络名称而不是其地址。
在本节开始时,让我警告您,保护您的机器和网络免受恶意攻击是一门复杂的艺术。我根本不认为自己是这方面的专家,虽然我描述的以下机制会有所帮助,但如果您认真对待安全性,那么我建议您自己对该主题进行一些研究。Internet 上有很多关于该主题的优秀参考资料,包括 Security-HOWTO
一个重要的经验法则是:“不要运行您不打算使用的服务器”。许多发行版都配置了各种各样的服务,并自动启动。为了确保即使是最低限度的安全级别,您也应该仔细检查您的 /etc/inetd.conf
文件,并注释掉(在行首放置一个“`#`”)您不打算使用的服务的任何条目。不错的候选服务包括:shell
、login
、exec
、uucp
、ftp
以及信息服务,如 finger
、netstat
和 systat
。
有各种各样的安全和访问控制机制,我将描述其中最基本的机制。
/etc/ftpusers
文件是一个简单的机制,允许您拒绝某些用户通过 ftp 登录到您的机器。当收到传入的 ftp 连接时,ftp 守护程序(ftpd)会读取 /etc/ftpusers
文件。该文件是禁止登录的用户的简单列表。它可能看起来像这样
# /etc/ftpusers - users not allowed to login via ftp
root
uucp
bin
mail
/etc/securetty
文件允许您指定允许 root
登录的 tty
设备。登录程序(通常为 /bin/login)读取 /etc/securetty
文件。其格式是允许的 tty 设备名称列表,在所有其他设备上,不允许 root
登录
# /etc/securetty - tty's on which root is allowed to login
tty1
tty2
tty3
tty4
您将在同一个 /etc/inetd.conf
中看到的 tcpd 程序为其配置为保护的服务提供日志记录和访问控制机制。
当它被 inetd 程序调用时,它会读取两个包含访问规则的文件,并相应地允许或拒绝访问它正在保护的服务器。
它将搜索规则文件,直到找到第一个匹配项。如果未找到匹配项,则假定应允许任何人访问。它按顺序搜索的文件是:/etc/hosts.allow
、/etc/hosts.deny
。我将依次描述其中的每一个。有关此功能的完整描述,您应该参考相应的 man 页面(hosts_access(5)
是一个很好的起点)。
/etc/hosts.allow
文件是 /usr/sbin/tcpd 程序的配置文件。hosts.allow
文件包含描述哪些主机允许访问您机器上的服务的规则。
文件格式非常简单
# /etc/hosts.allow
#
# <service list>: <host list> [: command]
service list
是以逗号分隔的服务器名称列表,此规则适用于这些服务器名称。示例服务器名称包括:ftpd
、telnetd
和 fingerd
。
host list
是以逗号分隔的主机名列表。您也可以在此处使用 IP 地址。您还可以使用通配符指定主机名或地址,以匹配主机组。示例包括:gw.vk2ktj.ampr.org
以匹配特定主机,.uts.edu.au
以匹配任何以该字符串结尾的主机名,44.
以匹配任何以这些数字开头的 IP 地址。有一些特殊标记可以简化配置,其中一些是:ALL
匹配每个主机,LOCAL
匹配任何名称不包含“`.
'”的主机,即与您的机器在同一域中,PARANOID
匹配任何名称与其地址不匹配的主机(名称欺骗)。还有一个最后的标记也很有用。EXCEPT
标记允许您提供带有异常的列表。稍后的示例将介绍这一点。
command
是一个可选参数。此参数是每次匹配此规则时将执行的命令的完整路径名。例如,它可以运行一个命令,该命令将尝试识别谁登录到连接主机,或生成邮件消息或向系统管理员发出有人尝试连接的其他警告。可以包含许多扩展,一些常见的示例包括:%h
扩展为连接主机的名称,如果它没有名称,则扩展为地址,%d
扩展为正在调用的守护程序名称。
一个例子
# /etc/hosts.allow
#
# Allow mail to anyone
in.smtpd: ALL
# All telnet and ftp to only hosts within my domain and my host at home.
telnetd, ftpd: LOCAL, myhost.athome.org.au
# Allow finger to anyone but keep a record of who they are.
fingerd: ALL: (finger @%h | mail -s "finger from %h" root)
/etc/hosts.deny
文件是 /usr/sbin/tcpd 程序的配置文件。hosts.deny
文件包含描述哪些主机不允许访问您机器上的服务的规则。
一个简单的示例可能如下所示
# /etc/hosts.deny
#
# Disallow all hosts with suspect hostnames
ALL: PARANOID
#
# Disallow all hosts.
ALL: ALL
PARANOID
条目实际上是多余的,因为在任何情况下,其他条目都会捕获所有内容。这两个条目中的任何一个都可以作为合理的默认值,具体取决于您的特定需求。
在 /etc/hosts.deny
中设置 ALL: ALL
默认值,然后在 /etc/hosts.allow
文件中专门启用您需要的服务和主机,这是最安全的配置。
hosts.equiv
文件用于授予某些主机和用户访问您机器上帐户的权限,而无需提供密码。这在您控制所有机器的安全环境中非常有用,但在其他情况下则存在安全隐患。您的机器安全程度仅取决于最不安全的可信主机。为了最大限度地提高安全性,请不要使用此机制,并鼓励您的用户也不要使用 .rhosts
文件。
许多站点都有兴趣运行匿名 ftp 服务器,以允许其他人上传和下载文件,而无需特定的用户 ID。如果您决定提供此功能,请确保为匿名访问正确配置 ftp 守护进程。大多数 ftpd(8)
的 man 手册都详细描述了如何进行此操作。您应始终确保遵循这些说明。一个重要的提示是不要在匿名帐户 /etc
目录中使用 /etc/passwd
文件的副本,请确保删除除您必须拥有的帐户详细信息之外的所有帐户详细信息,否则您将容易受到暴力破解密码技术的攻击。
不允许数据报到达您的机器或服务器,这是一种极好的安全手段。这在 Firewall-HOWTO 中进行了深入探讨,并在本文档的后面部分(更简洁地)进行了介绍。
以下是一些其他的、可能带有宗教色彩的建议供您考虑。
尽管 sendmail 守护进程很受欢迎,但在安全警告公告中却频繁出现,令人担忧。这取决于您,但我选择不运行它。
请对这些服务保持警惕。这些服务存在各种可能的漏洞。很难找到像 NFS 这样的服务的替代方案,但如果您配置它们,请确保谨慎对待您允许挂载权限的对象。
本节介绍特定于以太网和 IP 的信息。这些小节被组合在一起,因为我认为它们是以前称为“技术特定”部分中最有趣的部分。任何拥有局域网的人都应该能够从中受益。
以太网设备名称为 `eth0
'、`eth1
'、`eth2
' 等。内核检测到的第一张网卡被分配为 `eth0
',其余网卡按照检测到的顺序依次分配。
默认情况下,Linux 内核仅探测一个以太网设备,您需要将命令行参数传递给内核,以强制检测更多网卡。
要了解如何在 Linux 下使您的以太网卡工作,您应该参考 Ethernet-HOWTO。
一旦您正确构建内核以支持您的以太网卡,那么配置网卡就很容易了。
通常您会使用类似这样的东西(如果您的发行版配置为支持您的以太网,则大多数发行版已经为您做了这一点)
root# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up
root# route add -net 192.168.0.0 netmask 255.255.255.0 eth0
大多数以太网驱动程序是由 Donald Becker 开发的,becker@CESDIS.gsfc.nasa.gov
。
EQL 设备名称为 `eql
'。使用标准内核源代码,每台机器可能只有一个 EQL 设备。EQL 提供了一种利用多条点对点线路(如 PPP、slip 或 plip)作为单个逻辑链路来传输 tcp/ip 的方法。通常,使用多条低速线路比安装一条高速线路更便宜。
内核编译选项:
Network device support --->
[*] Network device support
<*> EQL (serial line load balancing) support
为了支持这种机制,线路另一端的机器也必须支持 EQL。Linux、Livingstone Portmasters 和较新的拨号服务器都支持兼容的功能。
要配置 EQL,您将需要 eql 工具,这些工具可从以下位置获得:metalab.unc.edu。
配置相当简单。您首先配置 eql 接口。eql 接口就像任何其他网络设备一样。您可以使用 ifconfig 实用程序配置 IP 地址和 mtu,例如
root# ifconfig eql 192.168.10.1 mtu 1006
接下来,您需要手动启动您将使用的每条线路。这些线路可以是点对点网络设备的任意组合。如何启动连接取决于它们是什么类型的链路,请参阅相应的部分以获取更多信息。
最后,您需要将串行链路与 EQL 设备关联起来,这称为“从属”,并通过 eql_enslave 命令完成,如下所示
root# eql_enslave eql sl0 28800
root# eql_enslave eql ppp0 14400
您提供的 `estimated speed' 参数 eql_enslave 不会直接执行任何操作。EQL 驱动程序使用它来确定该设备应接收的数据报份额,因此您可以通过调整此值来微调线路的平衡。
要从 EQL 设备取消关联线路,您可以使用 eql_emancipate 命令,如下所示
root# eql_emancipate eql sl0
您像为任何其他点对点链路添加路由一样添加路由,只是您的路由应该引用 eql
设备,而不是实际的串行设备本身,通常您会使用
root# route add default eql
EQL 驱动程序是由 Simon Janes 开发的,simon@ncm.com
。
Linux 内核的 IP 记帐功能允许您收集和分析一些网络使用数据。收集的数据包括自上次重置数字以来累积的数据包数量和字节数。您可以指定各种规则来对数字进行分类,以满足您的任何目的。此选项已在内核 2.1.102 中删除,因为旧的基于 ipfwadm 的防火墙已被“ipfwchains”取代。
内核编译选项:
Networking options --->
[*] IP: accounting
在您编译并安装内核后,您需要使用 ipfwadm 命令来配置 IP 记帐。您可以选择多种不同的方式来细分记帐信息。我选择了一个简单的示例,说明哪些可能有用,您应该阅读 ipfwadm 手册页以获取更多信息。
场景:您有一个以太网网络,该网络通过 PPP 链路连接到互联网。在以太网上,您有一台机器提供许多服务,并且您有兴趣了解 ftp 和万维网流量以及总 tcp 和 udp 流量各自产生了多少流量。
您可以使用如下所示的命令集,它显示为一个 shell 脚本
#!/bin/sh
#
# Flush the accounting rules
ipfwadm -A -f
#
# Set shortcuts
localnet=44.136.8.96/29
any=0/0
# Add rules for local ethernet segment
ipfwadm -A in -a -P tcp -D $localnet ftp-data
ipfwadm -A out -a -P tcp -S $localnet ftp-data
ipfwadm -A in -a -P tcp -D $localnet www
ipfwadm -A out -a -P tcp -S $localnet www
ipfwadm -A in -a -P tcp -D $localnet
ipfwadm -A out -a -P tcp -S $localnet
ipfwadm -A in -a -P udp -D $localnet
ipfwadm -A out -a -P udp -S $localnet
#
# Rules for default
ipfwadm -A in -a -P tcp -D $any ftp-data
ipfwadm -A out -a -P tcp -S $any ftp-data
ipfwadm -A in -a -P tcp -D $any www
ipfwadm -A out -a -P tcp -S $any www
ipfwadm -A in -a -P tcp -D $any
ipfwadm -A out -a -P tcp -S $any
ipfwadm -A in -a -P udp -D $any
ipfwadm -A out -a -P udp -S $any
#
# List the rules
ipfwadm -A -l -n
#
名称“ftp-data”和“www”指的是 /etc/services
中的行。最后一个命令列出每个记帐规则并显示收集的总计。
分析 IP 记帐时需要注意的一个重要点是,所有匹配规则的总数都将递增,因此要获得差分数字,您需要执行适当的数学运算。例如,如果我想知道有多少数据既不是 ftp 也不是 www,我将从匹配所有端口的规则中减去各个总数。
root# ipfwadm -A -l -n
IP accounting rules
pkts bytes dir prot source destination ports
0 0 in tcp 0.0.0.0/0 44.136.8.96/29 * -> 20
0 0 out tcp 44.136.8.96/29 0.0.0.0/0 20 -> *
10 1166 in tcp 0.0.0.0/0 44.136.8.96/29 * -> 80
10 572 out tcp 44.136.8.96/29 0.0.0.0/0 80 -> *
252 10943 in tcp 0.0.0.0/0 44.136.8.96/29 * -> *
231 18831 out tcp 44.136.8.96/29 0.0.0.0/0 * -> *
0 0 in udp 0.0.0.0/0 44.136.8.96/29 * -> *
0 0 out udp 44.136.8.96/29 0.0.0.0/0 * -> *
0 0 in tcp 0.0.0.0/0 0.0.0.0/0 * -> 20
0 0 out tcp 0.0.0.0/0 0.0.0.0/0 20 -> *
10 1166 in tcp 0.0.0.0/0 0.0.0.0/0 * -> 80
10 572 out tcp 0.0.0.0/0 0.0.0.0/0 80 -> *
253 10983 in tcp 0.0.0.0/0 0.0.0.0/0 * -> *
231 18831 out tcp 0.0.0.0/0 0.0.0.0/0 * -> *
0 0 in udp 0.0.0.0/0 0.0.0.0/0 * -> *
0 0 out udp 0.0.0.0/0 0.0.0.0/0 * -> *
新的记帐代码通过“IP 防火墙链”访问。有关更多信息,请参阅 IP 链主页。除其他事项外,您现在需要使用 ipchains 而不是 ipfwadm
来配置您的过滤器。(来自最新内核源代码中的 Documentation/Changes
)。
在某些应用中,能够为单个网络设备配置多个 IP 地址非常有用。互联网服务提供商经常使用此功能为其客户的万维网和 ftp 服务提供“定制”服务。您可以参考“IP-Alias mini-HOWTO”以获取比此处更多的信息。
内核编译选项:
Networking options --->
....
[*] Network aliasing
....
<*> IP: aliasing support
在使用 IP_Alias 支持编译并安装内核后,配置非常简单。别名被添加到与实际网络设备关联的虚拟网络设备。一个简单的命名约定适用于这些设备,即 <devname>:<virtual dev num>
,例如 eth0:0
、ppp0:10
等。请注意,ifname:number 设备只能在主接口设置完毕后配置。
例如,假设您有一个以太网网络,该网络同时支持两个不同的 IP 子网,并且您希望您的机器能够直接访问这两个子网,您可以使用类似这样的东西
root# ifconfig eth0 192.168.1.1 netmask 255.255.255.0 up
root# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
root# ifconfig eth0:0 192.168.10.1 netmask 255.255.255.0 up
root# route add -net 192.168.10.0 netmask 255.255.255.0 eth0:0
要删除别名,您只需在其名称末尾添加一个 `-
',并像这样引用它,就像这样简单
root# ifconfig eth0:0- 0
与该别名关联的所有路由也将自动删除。
IP 防火墙和防火墙问题在 Firewall-HOWTO 中进行了更深入的介绍。IP 防火墙允许您通过过滤或允许来自或发往您指定的 IP 地址的数据报来保护您的机器免受未经授权的网络访问。有三种不同类别的规则,传入过滤、传出过滤和转发过滤。传入规则应用于网络设备接收的数据报。传出规则应用于要由网络设备传输的数据报。转发规则应用于已接收但并非用于此机器的数据报,即将被路由的数据报。
内核编译选项:
Networking options --->
[*] Network firewalls
....
[*] IP: forwarding/gatewaying
....
[*] IP: firewalling
[ ] IP: firewall packet logging
IP 防火墙规则的配置是使用 ipfwadm 命令执行的。正如我之前提到的,安全不是我的专长,因此虽然我将提供一个您可以使用的示例,但如果安全对您很重要,您应该自行研究并制定您自己的规则。
IP 防火墙最常见的用途可能是当您使用您的 Linux 机器作为路由器和防火墙网关来保护您的本地网络免受来自您网络外部的未经授权的访问时。
以下配置基于 Arnt Gulbrandsen 的贡献,<agulbra@troll.no>
。
该示例描述了此图中所示的 Linux 防火墙/路由器机器上的防火墙规则配置
- -
\ | 172.16.37.0
\ | /255.255.255.0
\ --------- |
| 172.16.174.30 | Linux | |
NET =================| f/w |------| ..37.19
| PPP | router| | --------
/ --------- |--| Mail |
/ | | /DNS |
/ | --------
- -
以下命令通常会放置在 rc
文件中,以便在每次系统启动时自动启动它们。为了最大限度地提高安全性,它们将在网络接口配置之后,但在接口实际启动之前执行,以防止在防火墙机器重新启动时任何人获得访问权限。
#!/bin/sh
# Flush the 'Forwarding' rules table
# Change the default policy to 'accept'
#
/sbin/ipfwadm -F -f
/sbin/ipfwadm -F -p accept
#
# .. and for 'Incoming'
#
/sbin/ipfwadm -I -f
/sbin/ipfwadm -I -p accept
# First off, seal off the PPP interface
# I'd love to use '-a deny' instead of '-a reject -y' but then it
# would be impossible to originate connections on that interface too.
# The -o causes all rejected datagrams to be logged. This trades
# disk space against knowledge of an attack of configuration error.
#
/sbin/ipfwadm -I -a reject -y -o -P tcp -S 0/0 -D 172.16.174.30
# Throw away certain kinds of obviously forged packets right away:
# Nothing should come from multicast/anycast/broadcast addresses
#
/sbin/ipfwadm -F -a deny -o -S 224.0/3 -D 172.16.37.0/24
#
# and nothing coming from the loopback network should ever be
# seen on a wire
#
/sbin/ipfwadm -F -a deny -o -S 127.0/8 -D 172.16.37.0/24
# accept incoming SMTP and DNS connections, but only
# to the Mail/Name Server
#
/sbin/ipfwadm -F -a accept -P tcp -S 0/0 -D 172.16.37.19 25 53
#
# DNS uses UDP as well as TCP, so allow that too
# for questions to our name server
#
/sbin/ipfwadm -F -a accept -P udp -S 0/0 -D 172.16.37.19 53
#
# but not "answers" coming to dangerous ports like NFS and
# Larry McVoy's NFS extension. If you run squid, add its port here.
#
/sbin/ipfwadm -F -a deny -o -P udp -S 0/0 53 \
-D 172.16.37.0/24 2049 2050
# answers to other user ports are okay
#
/sbin/ipfwadm -F -a accept -P udp -S 0/0 53 \
-D 172.16.37.0/24 53 1024:65535
# Reject incoming connections to identd
# We use 'reject' here so that the connecting host is told
# straight away not to bother continuing, otherwise we'd experience
# delays while ident timed out.
#
/sbin/ipfwadm -F -a reject -o -P tcp -S 0/0 -D 172.16.37.0/24 113
# Accept some common service connections from the 192.168.64 and
# 192.168.65 networks, they are friends that we trust.
#
/sbin/ipfwadm -F -a accept -P tcp -S 192.168.64.0/23 \
-D 172.16.37.0/24 20:23
# accept and pass through anything originating inside
#
/sbin/ipfwadm -F -a accept -P tcp -S 172.16.37.0/24 -D 0/0
# deny most other incoming TCP connections and log them
# (append 1:1023 if you have problems with ftp not working)
#
/sbin/ipfwadm -F -a deny -o -y -P tcp -S 0/0 -D 172.16.37.0/24
# ... for UDP too
#
/sbin/ipfwadm -F -a deny -o -P udp -S 0/0 -D 172.16.37.0/24
良好的防火墙配置有点棘手。此示例应该是您合理的起点。ipfwadm 手册页提供了一些关于如何使用该工具的帮助。如果您打算配置防火墙,请务必四处询问,并从您认为可靠的来源获得尽可能多的建议,并让人从外部测试/健全性检查您的配置。
新的防火墙代码通过“IP 防火墙链”访问。有关更多信息,请参阅 IP 链主页。除其他事项外,您现在需要使用 ipchains 而不是 ipfwadm
来配置您的过滤器。(来自最新内核源代码中的 Documentation/Changes
)。
我们意识到这是一个严重过时的声明,我们目前正在努力使本节内容更加最新。您可以期待在 1999 年 8 月获得更新的版本。
您为什么要将 IP 数据报封装在 IP 数据报中?如果您以前从未见过它的应用,这似乎是一件奇怪的事情。好吧,这里有一些常见的应用场景:移动 IP 和 IP 多播。然而,也许最广泛使用的应用也是最不为人知的,业余无线电。
内核编译选项:
Networking options --->
[*] TCP/IP networking
[*] IP: forwarding/gatewaying
....
<*> IP: tunneling
IP 隧道设备称为 `tunl0
'、`tunl1
' 等。
“但是为什么?”。好吧,好吧。传统的 IP 路由规则规定,IP 网络由网络地址和网络掩码组成。这产生了一系列连续的地址,这些地址都可以通过单个路由条目进行路由。这非常方便,但这意味着您只能在连接到特定网络时使用任何特定的 IP 地址。在大多数情况下,这没问题,但如果您是移动网络公民,那么您可能无法一直保持在一个地方的连接。IP/IP 封装(IP 隧道)允许您通过允许将发往您的 IP 地址的数据报包装起来并重定向到另一个 IP 地址来克服此限制。如果您知道您将在某个其他 IP 网络中运行一段时间,您可以设置一台机器在您的家庭网络上接受发往您的 IP 地址的数据报,并将它们重定向到您将临时使用的地址。
192.168.1/24 192.168.2/24
- -
| ppp0 = ppp0 = |
| aaa.bbb.ccc.ddd fff.ggg.hhh.iii |
| |
| /-----\ /-----\ |
| | | // | | |
|---| A |------//---------| B |---|
| | | // | | |
| \-----/ \-----/ |
| |
- -
该图说明了使用 IPIP 封装的另一个可能原因,虚拟专用网络。此示例假设您有两台机器,每台机器都具有简单的拨号互联网连接。每个主机仅分配一个 IP 地址。在每台机器的后面,是一些配置了保留 IP 网络地址的专用局域网。假设您希望允许网络 A 上的任何主机连接到网络 B 上的任何主机,就像它们已通过网络路由正确连接到互联网一样。IPIP 封装将允许您这样做。请注意,封装不能解决网络 A 和 B 上的主机如何与互联网上的任何其他主机通信的问题,您仍然需要像 IP 地址伪装这样的技巧来实现这一点。封装通常由充当路由器的机器执行。Linux 路由器 `A
' 将配置如下脚本
#!/bin/sh
PATH=/sbin:/usr/sbin
mask=255.255.255.0
remotegw=fff.ggg.hhh.iii
#
# Ethernet configuration
ifconfig eth0 192.168.1.1 netmask $mask up
route add -net 192.168.1.0 netmask $mask eth0
#
# ppp0 configuration (start ppp link, set default route)
pppd
route add default ppp0
#
# Tunnel device configuration
ifconfig tunl0 192.168.1.1 up
route add -net 192.168.2.0 netmask $mask gw $remotegw tunl0
Linux 路由器 `B
' 将配置类似的脚本
#!/bin/sh
PATH=/sbin:/usr/sbin
mask=255.255.255.0
remotegw=aaa.bbb.ccc.ddd
#
# Ethernet configuration
ifconfig eth0 192.168.2.1 netmask $mask up
route add -net 192.168.2.0 netmask $mask eth0
#
# ppp0 configuration (start ppp link, set default route)
pppd
route add default ppp0
#
# Tunnel device configuration
ifconfig tunl0 192.168.2.1 up
route add -net 192.168.1.0 netmask $mask gw $remotegw tunl0
命令
route add -net 192.168.1.0 netmask $mask gw $remotegw tunl0
读取为:“将任何发往 192.168.1.0/24
的数据报封装在 IPIP 封装数据报中,目标地址为 aaa.bbb.ccc.ddd
”。请注意,配置在两端都是相互的。隧道设备使用路由中的 `gw
' 作为 IP 数据报的目标,它将在其中放置它已接收以进行路由的数据报。该机器必须知道如何解封装 IPIP 数据报,也就是说,它也必须配置隧道设备。
不一定必须路由整个网络。例如,您可以仅路由单个 IP 地址。在这种情况下,您可以在“远程”机器上使用其家庭 IP 地址配置 tunl
设备,并在 A 端仅使用主机路由(和代理 ARP),而不是通过隧道设备的网络路由。让我们重新绘制并适当地修改我们的配置。现在我们只有主机 `B
',我们希望它表现得好像它既完全连接到互联网,又是主机 `A
' 支持的远程网络的一部分
192.168.1/24
-
| ppp0 = ppp0 =
| aaa.bbb.ccc.ddd fff.ggg.hhh.iii
|
| /-----\ /-----\
| | | // | |
|---| A |------//---------| B |
| | | // | |
| \-----/ \-----/
| also: 192.168.1.12
-
Linux 路由器 `A
' 将配置为
#!/bin/sh
PATH=/sbin:/usr/sbin
mask=255.255.255.0
remotegw=fff.ggg.hhh.iii
#
# Ethernet configuration
ifconfig eth0 192.168.1.1 netmask $mask up
route add -net 192.168.1.0 netmask $mask eth0
#
# ppp0 configuration (start ppp link, set default route)
pppd
route add default ppp0
#
# Tunnel device configuration
ifconfig tunl0 192.168.1.1 up
route add -host 192.168.1.12 gw $remotegw tunl0
#
# Proxy ARP for the remote host
arp -s 192.168.1.12 xx:xx:xx:xx:xx:xx pub
Linux 主机 `B
' 将配置为
#!/bin/sh
PATH=/sbin:/usr/sbin
mask=255.255.255.0
remotegw=aaa.bbb.ccc.ddd
#
# ppp0 configuration (start ppp link, set default route)
pppd
route add default ppp0
#
# Tunnel device configuration
ifconfig tunl0 192.168.1.12 up
route add -net 192.168.1.0 netmask $mask gw $remotegwtunl0
这种配置更典型的是移动 IP 应用程序。其中单个主机希望在互联网上漫游并始终保持单个可用的 IP 地址。您应该参考移动 IP 部分,以获取有关如何在实践中处理该问题的更多信息。
许多人都有一个简单的拨号帐户来连接到互联网。几乎每个使用这种配置的人都由互联网服务提供商分配一个 IP 地址。这通常足以仅允许一台主机完全访问网络。IP 地址伪装是一种巧妙的技巧,它使您可以让多台机器使用该一个 IP 地址,方法是使其他主机看起来像(因此称为伪装)支持拨号连接的机器。有一个小的注意事项,即伪装功能几乎总是仅在一个方向上起作用,也就是说,伪装主机可以拨出呼叫,但它们不能接受或接收来自远程主机的网络连接。这意味着某些网络服务不起作用,例如 talk,而其他服务(例如 ftp)必须配置为在被动 (PASV) 模式下运行才能运行。幸运的是,最常见的网络服务(例如 telnet、万维网和 irc)可以正常工作。
内核编译选项:
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
Networking options --->
[*] Network firewalls
....
[*] TCP/IP networking
[*] IP: forwarding/gatewaying
....
[*] IP: masquerading (EXPERIMENTAL)
通常,您的 Linux 机器支持 slip 或 PPP 拨号线路,就像它是独立机器一样。此外,它还将配置另一个网络设备,可能是以太网,配置为保留网络地址之一。要伪装的主机将位于此第二个网络上。这些主机中的每一个都将 Linux 机器的以太网端口的 IP 地址设置为其默认网关或路由器。
典型的配置可能如下所示
- -
\ | 192.168.1.0
\ | /255.255.255.0
\ --------- |
| | Linux | .1.1 |
NET =================| masq |------|
| PPP/slip | router| | --------
/ --------- |--| host |
/ | | |
/ | --------
- -
使用 IPFWADM 进行伪装
此配置最相关的命令是
# Network route for ethernet
route add -net 192.168.1.0 netmask 255.255.255.0 eth0
#
# Default route to the rest of the internet.
route add default ppp0
#
# Cause all hosts on the 192.168.1/24 network to be masqueraded.
ipfwadm -F -a m -S 192.168.1.0/24 -D 0.0.0.0/0
使用 IPCHAINS 进行伪装
这类似于使用 IPFWADM,但命令结构已更改
# Network route for ethernet
route add -net 192.168.1.0 netmask 255.255.255.0 eth0
#
# Default route to the rest of the internet.
route add default ppp0
#
# Cause all hosts on the 192.168.1/24 network to be masqueraded.
ipchains -A forward -s 192.168.1.0/24 -j MASQ
您可以从 IP 伪装资源页面 获取有关 Linux IP 伪装功能的更多信息。此外,关于伪装的非常详细的文档是“IP-Masquerade mini-HOWTO”(其中还指导配置其他操作系统以与 Linux 伪装服务器一起运行)。
IP 透明代理是一项功能,它使您可以将发往另一台机器的服务器或服务重定向到此机器上的那些服务。通常,当您将 Linux 机器用作路由器并且还提供代理服务器时,这将非常有用。您会将所有发往远程服务的连接重定向到本地代理服务器。
内核编译选项:
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
Networking options --->
[*] Network firewalls
....
[*] TCP/IP networking
....
[*] IP: firewalling
....
[*] IP: transparent proxy support (EXPERIMENTAL)
透明代理功能的配置是使用 ipfwadm 命令执行的
一个可能有用的例子如下
root# ipfwadm -I -a accept -D 0/0 telnet -r 2323
此示例将导致任何尝试连接到任何主机上的端口 telnet
(23) 的尝试都重定向到此主机上的端口 2323。如果您在该端口上运行服务,则可以转发 telnet 连接、记录它们或执行任何适合您需求的操作。
一个更有趣的例子是将所有 http
流量通过本地缓存重定向。但是,代理服务器使用的协议与本机 http 不同:当客户端连接到 www.server.com:80
并请求 /path/page
时,当它连接到本地缓存时,它会联系 proxy.local.domain:8080
并请求 www.server.com/path/page
。
要通过本地代理过滤 http
请求,您需要通过插入一个小服务器来调整协议,称为 transproxy
(您可以在万维网上找到它)。您可以选择在端口 8081 上运行 transproxy
,并发出此命令
root# ipfwadm -I -a accept -D 0/0 80 -r 8081
然后,transproxy
程序将接收所有旨在到达外部服务器的连接,并在修复协议差异后将它们传递给本地代理。就在您认为您开始理解 IP 网络时,规则发生了变化!IPv6 是互联网协议版本 6 的简写符号。IPv6 的开发主要是为了克服互联网社区中对 IP 地址很快会短缺的担忧。IPv6 地址为 16 字节长(128 位)。IPv6 整合了许多其他更改,主要是简化,这将使 IPv6 网络比 IPv4 网络更易于管理。
Linux 已经在 2.2.*
系列内核中实现了工作但未完成的 IPv6 实现。
如果您希望尝试使用下一代互联网技术,或者有此需求,那么您应该阅读 IPv6-FAQ,该 FAQ 可从 www.terra.net 获得。
术语“IP 移动性”描述了主机能够将其网络连接从互联网上的一个点移动到另一个点,而无需更改其 IP 地址或丢失连接的能力。通常,当 IP 主机更改其连接点时,它也必须更改其 IP 地址。IP 移动性通过为移动主机分配固定 IP 地址并使用 IP 封装(隧道)和自动路由来确保发往它的数据报被路由到它当前正在使用的实际 IP 地址,从而克服了此问题。
正在进行一个项目,为 Linux 提供一套完整的 IP 移动性工具。项目的状态和工具可以从以下位置获得:Linux 移动 IP 主页。
IP 多播允许不同 IP 网络上的任意数量的 IP 主机同时将 IP 数据报路由到它们。此机制被利用来提供互联网范围的“广播”材料,例如音频和视频传输以及其他新颖的应用。
内核编译选项:
Networking options --->
[*] TCP/IP networking
....
[*] IP: multicasting
需要一套工具和一些小的网络配置。请查看 Multicast-HOWTO 以获取有关 Linux 中多播支持的更多信息。
IP 网络地址转换工具在很大程度上是 Linux IP 伪装工具的标准化大哥大。它在您最近的 RFC 存档中的 RFC-1631 中进行了详细说明。NAT 提供了 IP 伪装不具备的功能,这使其更适合用于企业防火墙路由器设计和更大规模的安装。
Michael.Hasenstein,Michael.Hasenstein@informatik.tu-chemnitz.de
开发了适用于 Linux 2.0.29 内核的 NAT 的 alpha 实现。Michael 的文档和实现可从以下位置获得:Linux IP 网络地址 Web 页面
较新的 Linux 2.2.x 内核还在路由算法中包含了一些 NAT 功能。
流量整形器是一个驱动程序,它创建新的接口设备,这些设备的流量以用户定义的方式受到限制,它们依赖于物理网络设备进行实际传输,并且可以用作网络流量的传出路由。
整形器是在 Linux-2.1.15 中引入的,并反向移植到 Linux-2.0.36(它出现在 Alan Cox(整形器设备的作者和 Linux-2.0 的维护者)分发的 2.0.36-pre-patch-2
中)。
流量整形器只能作为模块编译,并通过 shapecfg 程序使用如下命令进行配置
shapecfg attach shaper0 eth1
shapecfg speed shaper0 64000
整形器设备只能控制传出流量的带宽,因为数据包仅根据路由表通过整形器传输;因此,“按源地址路由”功能可能有助于限制使用 Linux 路由器的特定主机的总带宽。
Linux-2.2 已经支持这种路由,如果您需要在 Linux-2.0 中使用它,请查看 Mike McLagan 在 ftp.invlogic.com
上的补丁。有关整形器的更多信息,请参阅 Documentation
networking/shaper.txt。
如果您想尝试(试验性地)整形传入数据包,请尝试 rshaper-1.01
(或更高版本),从 ftp.systemy.it 获取。
最新版本的 Linux 2.2 在路由策略方面提供了很大的灵活性。不幸的是,您必须等待本 howto 的下一个版本,或者去阅读内核源代码。
综合业务数字网络 (ISDN) 是一系列标准,这些标准规定了通用交换数字数据网络。ISDN“呼叫”创建了到目的地的同步点对点数据服务。ISDN 通常通过高速链路交付,该链路被分解为多个离散通道。有两种不同类型的通道,即“B 通道”(实际承载用户数据)和一个称为“D 通道”的单通道(用于向 ISDN 交换机发送控制信息以建立呼叫和其他功能)。例如,在澳大利亚,ISDN 可以通过 2Mbps 链路交付,该链路被分解为 30 个离散的 64kbps B 通道和一个 64kbps D 通道。可以一次使用任意数量的通道,并且可以任意组合。例如,您可以以每个 64kbps 的速度建立 30 个到 30 个不同目的地的单独呼叫,或者您可以以每个 128kbps 的速度建立 15 个到 15 个不同目的地的呼叫(每个呼叫使用两个通道),或者仅建立少量呼叫并使其余通道空闲。通道可以用于传入或传出呼叫。ISDN 的最初目的是允许电信公司提供单一数据服务,该服务可以向您的家庭或企业提供电话(通过数字化语音)或数据服务,而无需您进行任何特殊的配置更改。
有几种不同的方式可以将您的计算机连接到 ISDN 服务。一种方法是使用称为“终端适配器”的设备,该设备插入网络终端单元(您的电信运营商在您获得 ISDN 服务时将安装该单元),并提供多个串行接口。其中一个接口用于输入命令以建立呼叫和配置,而其他接口实际上连接到将在建立数据电路时使用数据电路的网络设备。Linux 将在这种配置中工作,而无需修改,您只需将终端适配器上的端口视为您对待任何其他串行设备的方式。另一种方法(也是内核 ISDN 支持的设计方式)允许您在 Linux 机器中安装 ISDN 卡,然后让您的 Linux 软件处理协议并自行拨打电话。
内核编译选项:
ISDN subsystem --->
<*> ISDN support
[ ] Support synchronous PPP
[ ] Support audio via ISDN
< > ICN 2B and 4B support
< > PCBIT-D support
< > Teles/NICCY1016PC/Creatix support
Linux 的 ISDN 实现支持多种不同类型的内部 ISDN 卡。这些是在内核配置选项中列出的那些
其中一些卡需要下载软件才能使其运行。有一个单独的实用程序可以执行此操作。
有关如何配置 Linux ISDN 支持的完整详细信息,请参见 /usr/src/linux/Documentation/isdn/
目录,并且有关 isdn4linux 的 FAQ 可在 www.lrz-muenchen.de 获得。(您可以单击英国国旗以获取英文版)。
关于 PPP 的注意事项。PPP 协议套件将在异步或同步串行线路上运行。Linux 的常用 PPP 守护进程 `pppd' 仅支持异步模式。如果您希望通过 ISDN 服务运行 PPP 协议,则需要一个经过特殊修改的版本。有关在哪里可以找到它的详细信息,请参阅上面提到的文档。
PLIP 设备名称为 `plip0
'、`plip1
' 和 plip2
。
内核编译选项:
Network device support --->
<*> PLIP (parallel port) support
plip(并行线路 IP)与 SLIP 类似,因为它用于在两台机器之间提供点对点网络连接,不同之处在于它设计为使用机器上的并行打印机端口而不是串行端口(本文档后面的布线图部分包含布线图)。由于可以使用并行端口一次传输多个比特,因此使用 plip 接口可以比使用标准串行设备获得更高的速度。此外,即使是最简单的并行端口(打印机端口)也可以使用,而无需您购买相对昂贵的 16550AFN UART 用于串行端口。与串行链路相比,PLIP 使用大量 CPU,如果您可以获得一些便宜的以太网卡,那么它肯定不是一个好的选择,但当没有其他选择可用时,它会工作得很好。当链路运行良好时,您应该期望数据传输速率约为每秒 20 千字节。
PLIP 设备驱动程序与并行设备驱动程序竞争并行端口硬件。如果您希望同时使用这两个驱动程序,则应将它们都编译为模块,以确保您能够选择要用于 PLIP 的端口以及要用于打印机驱动程序的端口。有关内核模块配置的更多信息,请参阅“模块迷你 HOWTO”。
请注意,某些笔记本电脑使用与 PLIP 不兼容的芯片组,因为它们不允许 PLIP 依赖的某些信号组合,而打印机不使用这些信号。
Linux plip 接口与 Crynwyr Packet Driver PLIP 兼容,这意味着您可以将 Linux 机器通过 plip 连接到运行任何其他类型的 tcp/ip 软件的 DOS 机器。
在 2.0.* 系列内核中,plip 设备映射到 i/o 端口和 IRQ,如下所示
device i/o IRQ
------ ----- ---
plip0 0x3bc 5
plip1 0x378 7
plip2 0x278 2
如果您的并行端口与上述任何组合都不匹配,则可以使用 ifconfig 命令使用 `irq
' 参数更改端口的 IRQ(如果您的 ROM BIOS 支持此选项,请确保在您的打印机端口上启用 IRQ)。作为替代方案,如果您使用模块,则可以在 insmod 命令行上指定“io=
”和“irq=
”选项。例如
root# insmod plip.o io=0x288 irq=5
PLIP 操作由两个超时控制,在大多数情况下,其默认值可能可以接受。如果您的计算机速度特别慢,您可能需要增加它们,在这种情况下,要增加的计时器实际上在另一台计算机上。存在一个名为 plipconfig 的程序,允许您更改这些计时器设置,而无需重新编译内核。它随许多 Linux 发行版一起提供。
要配置 plip 接口,您将需要调用以下命令(或将它们添加到您的初始化脚本中)
root# /sbin/ifconfig plip1 localplip pointopoint remoteplip
root# /sbin/route add remoteplip plip1
此处,正在使用的端口是 I/O 地址 0x378 处的端口;localplip 和 remoteplip 是通过 PLIP 电缆使用的名称或 IP 地址。我个人将它们保存在我的 /etc/hosts
数据库中
# plip entries
192.168.3.1 localplip
192.168.3.2 remoteplip
pointopoint 参数的含义与 SLIP 相同,因为它指定了链路另一端机器的地址。
在几乎所有方面,您可以将 plip 接口视为好像它是 SLIP 接口一样,只是不需要也不可以使用 dip 或 slattach。
有关 PLIP 的更多信息,请参见“PLIP mini-HOWTO”。
在 2.1 内核版本的开发过程中,对并行端口的支持已更改为更好的设置。
内核编译选项:
General setup --->
[*] Parallel port support
Network device support --->
<*> PLIP (parallel port) support
用于 PLIP 的新代码的行为类似于旧代码(使用与上一节中相同的 ifconfig 和 route 命令,但由于高级并行端口支持,设备的初始化是不同的)。
“第一个”PLIP 设备始终称为“plip0”,其中第一个是系统检测到的第一个设备,类似于以太网设备发生的情况。正在使用的实际并行端口是可用端口之一,如 /proc/parport
中所示。例如,如果您只有一个并行端口,您将只有一个名为 /proc/parport/0
的目录。
如果您的内核未检测到您的端口使用的 IRQ 号码,“insmod plip
”将失败;在这种情况下,只需将正确的号码写入 /proc/parport/0/irq
并重新调用 insmod。
有关并行端口管理的完整信息,请参见文件 Documentation/parport.txt
,它是您的内核源代码的一部分。
PPP 设备名称为 `ppp0
'、`ppp1
' 等。设备按顺序编号,第一个配置的设备接收 `0
'。
内核编译选项:
Networking options --->
<*> PPP (point-to-point) support
PPP 配置在 PPP-HOWTO 中进行了详细介绍。
如果您足够幸运地拥有与网络的半永久连接,并且希望在 PPP 连接丢失时让您的机器自动重拨,那么这是一个简单的技巧。
配置 PPP,使其可以通过发出以下命令由 root
用户启动
# pppd
确保您在 /etc/ppp/options
文件中配置了 `-detach
' 选项。然后,将以下行插入到您的 /etc/inittab
文件中,在 getty 定义下方
pd:23:respawn:/usr/sbin/pppd
这将导致 init 程序生成并监视 pppd 程序,并在其终止时自动重新启动它。SLIP 设备命名为 `sl0
'、`sl1
' 等,第一个配置的设备分配为 `0
',其余设备在配置时按顺序递增。
内核编译选项:
Network device support --->
[*] Network device support
<*> SLIP (serial line) support
[ ] CSLIP compressed headers
[ ] Keepalive and linefill
[ ] Six bit SLIP encapsulation
SLIP (串行线路网际协议) 允许您通过串行线路使用 tcp/ip,可以是使用拨号调制解调器的电话线,也可以是某种专线。当然,要使用 SLIP,您需要访问您所在区域的 SLIP 服务器。世界各地的许多大学和企业都提供 SLIP 访问。
Slip 使用您机器上的串行端口来传输 IP 数据报。为此,它必须控制串行设备。Slip 设备名称被命名为 sl0、sl1 等。这些名称如何对应于您的串行设备?网络代码使用所谓的 ioctl (i/o 控制) 调用将串行设备更改为 SLIP 设备。提供了两个可以执行此操作的程序,它们被称为 dip 和 slattach
dip (拨号 IP) 是一个智能程序,能够设置串行设备的速度,命令您的调制解调器拨打链路的远程端,自动登录到远程服务器,搜索服务器发送给您的消息,并从中提取信息,例如您的 IP 地址,并执行必要的 ioctl 以将您的串行端口切换到 SLIP 模式。dip 具有强大的脚本编写能力,您可以利用它来自动化您的登录过程。
您可以在以下位置找到它: metalab.unc.edu。
要安装它,请尝试以下操作
user% tar xvzf dip337o-uri.tgz
user% cd dip-3.3.7o
user% vi Makefile
root# make install
Makefile
假设存在一个名为 uucp 的组,但您可能希望根据您的配置将其更改为 dip 或 SLIP。
与 dip 相比,slattach 是一个非常简单的程序,非常易于使用,但没有 dip 的复杂性。它没有脚本编写能力,它所做的只是将您的串行设备配置为 SLIP 设备。它假设您拥有所需的所有信息,并且在您调用它之前串行线路已建立。slattach 非常适合在您与服务器有永久连接的地方使用,例如物理电缆或专线。
当您与作为您的 SLIP 服务器的机器的链接是拨号调制解调器或其他某种临时链接时,您将使用 dip。当您的机器和服务器之间有专线(可能是电缆),并且无需特殊操作即可使链接工作时,您将使用 slattach。有关更多信息,请参阅“永久 Slip 连接”部分。
配置 SLIP 非常像配置以太网接口(阅读上面“配置以太网设备”部分)。但是,存在一些关键差异。
首先,SLIP 链接与以太网网络不同,因为网络上始终只有两个主机,链接的每一端各一个。与以太网在您连接电缆后即可使用不同,对于 SLIP,根据您拥有的链接类型,您可能需要以某种特殊方式初始化您的网络连接。
如果您使用 dip,则通常不会在启动时完成此操作,而是在稍后的某个时间(当您准备好使用该链接时)完成。可以自动化此过程。如果您使用 slattach,那么您可能希望在您的 rc.inet1 文件中添加一个部分。这将很快描述。
SLIP 服务器主要有两种类型:动态 IP 地址服务器和静态 IP 地址服务器。几乎每个 SLIP 服务器都会在您拨入时提示您使用用户名和密码登录。dip 可以自动处理您的登录。
静态 SLIP 服务器是指您已获得专属于您的 IP 地址的服务器。每次您连接到服务器时,您都将使用该地址配置您的 SLIP 端口。静态 SLIP 服务器将应答您的调制解调器呼叫,可能会提示您输入用户名和密码,然后通过该连接将任何发往您地址的数据报路由给您。如果您有静态服务器,那么您可能希望将您的主机名和 IP 地址(因为您知道它将是什么)的条目放入您的 /etc/hosts
中。您还应该配置其他一些文件,例如:rc.inet2
、host.conf
、resolv.conf
、/etc/HOSTNAME
和 rc.local
。请记住,在配置 rc.inet1
时,您不需要为您的 SLIP 连接添加任何特殊命令,因为是 dip 为您完成了配置接口的所有繁重工作。您需要向 dip 提供适当的信息,它将在命令调制解调器建立呼叫并将您登录到您的 SLIP 服务器后,为您配置接口。
如果您的 SLIP 服务器的工作方式是这样,那么您可以转到“使用 Dip”部分,了解如何适当地配置 dip。
动态 SLIP 服务器是指每次您登录时,都会从地址池中随机分配给您一个 IP 地址的服务器。这意味着不能保证您每次都会拥有任何特定的地址,并且该地址很可能在您注销后被其他人使用。配置 SLIP 服务器的网络管理员将为 SLIP 服务器分配一个地址池以供使用,当服务器收到新的呼入呼叫时,它会找到第一个未使用的地址,引导呼叫者完成登录过程,然后打印一条欢迎消息,其中包含它已分配的 IP 地址,并将在该呼叫期间继续使用该 IP 地址。
为此类服务器进行配置与为静态服务器进行配置类似,只是您必须添加一个步骤,在该步骤中,您获取服务器为您分配的 IP 地址,并使用该地址配置您的 SLIP 设备。
同样,dip 完成了繁重的工作,新版本非常智能,不仅可以登录您,而且还可以自动读取欢迎消息中打印的 IP 地址并存储它,以便您可以使用它来配置您的 SLIP 设备。
如果您的 SLIP 服务器的工作方式是这样,那么您可以转到“使用 Dip”部分,了解如何适当地配置 dip。
如前所述,dip 是一个功能强大的程序,可以简化和自动化拨入 SLIP 服务器、登录、启动连接以及使用适当的 ifconfig 和 route 命令配置您的 SLIP 设备的过程。
基本上,要使用 dip,您需要编写一个“dip 脚本”,它基本上是 dip 理解的命令列表,告诉 dip 如何执行您希望它执行的每个操作。请参阅 dip 随附的 sample.dip
,以了解其工作原理。dip 是一个非常强大的程序,具有许多选项。您应该查看 man 页面、README 和示例文件,这些文件将随您的 dip 版本一起提供,而不是在此处介绍所有选项。
您可能会注意到 sample.dip
脚本假设您正在使用静态 SLIP 服务器,因此您预先知道您的 IP 地址。对于动态 SLIP 服务器,较新版本的 dip 包含一个命令,您可以使用该命令自动读取动态服务器为您分配的 IP 地址并使用该地址配置您的 SLIP 设备。以下示例是 dip337j-uri.tgz 随附的 sample.dip
的修改版本,并且可能是您的良好起点。您可能希望将其另存为 /etc/dipscript
并对其进行编辑以适合您的配置
#
# sample.dip Dialup IP connection support program.
#
# This file (should show) shows how to use the DIP
# This file should work for Annex type dynamic servers, if you
# use a static address server then use the sample.dip file that
# comes as part of the dip337-uri.tgz package.
#
#
# Version: @(#)sample.dip 1.40 07/20/93
#
# Author: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
#
main:
# Next, set up the other side's name and address.
# My dialin machine is called 'xs4all.hacktic.nl' (== 193.78.33.42)
get $remote xs4all.hacktic.nl
# Set netmask on sl0 to 255.255.255.0
netmask 255.255.255.0
# Set the desired serial port and speed.
port cua02
speed 38400
# Reset the modem and terminal line.
# This seems to cause trouble for some people!
reset
# Note! "Standard" pre-defined "errlevel" values:
# 0 - OK
# 1 - CONNECT
# 2 - ERROR
#
# You can change those grep'ping for "addchat()" in *.c...
# Prepare for dialing.
send ATQ0V1E1X4\r
wait OK 2
if $errlvl != 0 goto modem_trouble
dial 555-1234567
if $errlvl != 1 goto modem_trouble
# We are connected. Login to the system.
login:
sleep 2
wait ogin: 20
if $errlvl != 0 goto login_trouble
send MYLOGIN\n
wait ord: 20
if $errlvl != 0 goto password_error
send MYPASSWD\n
loggedin:
# We are now logged in.
wait SOMEPROMPT 30
if $errlvl != 0 goto prompt_error
# Command the server into SLIP mode
send SLIP\n
wait SLIP 30
if $errlvl != 0 goto prompt_error
# Get and Set your IP address from the server.
# Here we assume that after commanding the SLIP server into SLIP
# mode that it prints your IP address
get $locip remote 30
if $errlvl != 0 goto prompt_error
# Set up the SLIP operating parameters.
get $mtu 296
# Ensure "route add -net default xs4all.hacktic.nl" will be done
default
# Say hello and fire up!
done:
print CONNECTED $locip ---> $rmtip
mode CSLIP
goto exit
prompt_error:
print TIME-OUT waiting for sliplogin to fire up...
goto error
login_trouble:
print Trouble waiting for the Login: prompt...
goto error
password:error:
print Trouble waiting for the Password: prompt...
goto error
modem_trouble:
print Trouble occurred with the modem...
error:
print CONNECT FAILED to $remote
quit
exit:
exit
上面的示例假设您正在呼叫 动态 SLIP 服务器,如果您正在呼叫 静态 SLIP 服务器,则 dip337j-uri.tgz 随附的 sample.dip
文件应该适合您。
当 dip 被赋予 get $local 命令时,它会在来自远程端的传入文本中搜索看起来像 IP 地址的字符串,即用“.”字符分隔的字符串数字。此修改专门针对 动态 SLIP 服务器进行,以便可以自动化读取服务器授予的 IP 地址的过程。
上面的示例将自动创建通过您的 SLIP 链接的默认路由,如果这不是您想要的,您可能有一个应该是您的默认路由的以太网连接,然后从脚本中删除 default 命令。在此脚本运行完成后,如果您执行 ifconfig 命令,您将看到您有一个设备 sl0。这是您的 SLIP 设备。如果需要,您可以在 dip 命令完成后,使用 ifconfig 和 route 命令手动修改其配置。请注意,dip 允许您使用 mode
命令选择多种不同的协议,最常见的示例是用于压缩的 SLIP 的 cSLIP。请注意,链接的两端必须一致,因此您应确保您选择的任何内容都与您的服务器设置一致。上面的示例相当健壮,应该能够应对大多数错误。有关更多信息,请参阅 dip 手册页。自然,例如,您可以编写脚本来执行诸如在规定的时间内未获得连接时重拨服务器,甚至在您可以访问多个服务器时尝试一系列服务器之类的操作。
如果您的两台机器之间有电缆,或者您足够幸运拥有专线,或者您的机器和另一台机器之间有其他永久串行连接,那么您无需费心使用 dip 来设置您的串行链路。slattach 是一个非常易于使用的实用程序,它将允许您获得足够的功能来配置您的连接。由于您的连接将是永久连接,因此您需要将一些命令添加到您的 rc.inet1
文件中。本质上,对于永久连接,您需要做的就是确保将串行设备配置为正确的速度,并将串行设备切换到 SLIP 模式。slattach 允许您使用一个命令来完成此操作。添加以下内容到您的 rc.inet1
文件
#
# Attach a leased line static SLIP connection
#
# configure /dev/cua0 for 19.2kbps and cslip
/sbin/slattach -p cslip -s 19200 /dev/cua0 &
/sbin/ifconfig sl0 IPA.IPA.IPA.IPA pointopoint IPR.IPR.IPR.IPR up
#
# End static SLIP.
其中
代表您的 IP 地址。
代表远程端的 IP 地址。
slattach 将第一个未分配的 SLIP 设备分配给指定的串行设备。slattach 从 sl0 开始。因此,第一个 slattach 命令将 SLIP 设备 sl0 附加到指定的串行设备,而 sl1 则在下次附加,依此类推。
slattach 允许您使用 -p
参数配置多种不同的协议。在您的情况下,您将使用 SLIP 或 cSLIP,具体取决于您是否要使用压缩。注意:两端必须就您是否需要压缩达成一致。
如果您有一台可能已连接到网络的机器,您希望其他人能够拨入并提供网络服务,那么您需要将您的机器配置为服务器。如果您想使用 SLIP 作为串行线路协议,那么目前您有三种选择来配置您的 Linux 机器作为 SLIP 服务器。我的首选是使用第一个介绍的 sliplogin,因为它看起来最容易配置和理解,但我将介绍每个选项的摘要,以便您可以做出自己的决定。
sliplogin 是一个程序,您可以将其用作 SLIP 用户的普通登录 shell 的替代品,它将终端线路转换为 SLIP 线路。它允许您将您的 Linux 机器配置为 静态地址服务器(用户每次呼叫时都获得相同的地址)或 动态地址服务器(用户获得分配给他们的地址,该地址不一定与他们上次呼叫时的地址相同)。
呼叫者将按照标准登录过程登录,输入他们的用户名和密码,但是,在登录后,他们不会看到 shell,而是执行 sliplogin,它会在其配置文件 (/etc/slip.hosts
) 中搜索与呼叫者的登录名匹配的条目。如果它找到一个,它会将线路配置为 8 位干净线路,并使用 ioctl 调用将线路规程转换为 SLIP。当此过程完成时,配置的最后阶段发生,其中 sliplogin 调用一个 shell 脚本,该脚本使用相关的 ip 地址、网络掩码配置 SLIP 接口,并设置适当的路由。此脚本通常称为 /etc/slip.login
,但与 getty 类似,如果您有某些呼叫者需要特殊初始化,那么您可以创建名为 /etc/slip.login.loginname
的配置文件,这些文件将专门为他们而不是默认文件运行。
您需要配置三个或四个文件才能使 sliplogin 为您工作。我将详细介绍如何以及在哪里获取软件以及如何详细配置每个文件。这些文件是
/etc/passwd
,用于拨入用户帐户。/etc/slip.hosts
,包含每个拨入用户的唯一信息。/etc/slip.login
,管理用户需要执行的路由配置。/etc/slip.tty
,仅当您为 动态地址分配 配置服务器时才需要,并且包含要分配的地址表/etc/slip.logout
,包含在用户挂断或注销后清理的命令。您可能已经安装了 sliplogin 软件包作为您的发行版的一部分,如果没有,则可以从以下位置获取 sliplogin:metalab.unc.edu。tar 文件包含源代码、预编译的二进制文件和 man 页面。
为确保只有授权用户才能运行 sliplogin 程序,您应该在您的 /etc/group
文件中添加一个类似于以下内容的条目
..
slip::13:radio,fred
..
当您安装 sliplogin 软件包时,Makefile
将更改 sliplogin 程序的组所有权为 slip
,这意味着只有属于该组的用户才能执行它。上面的示例将仅允许用户 radio
和 fred
执行 sliplogin。
要将二进制文件安装到您的 /sbin
目录并将 man 页面安装到第 8 节,请执行以下操作
# cd /usr/src
# gzip -dc .../sliplogin-2.1.1.tar.gz | tar xvf -
# cd sliplogin-2.1.1
# <..edit the Makefile if you don't use shadow passwords..>
# make install
如果您想在安装前重新编译二进制文件,请在 make install
之前添加 make clean
。如果您想将二进制文件安装到其他位置,则需要编辑 Makefile
install 规则。
请阅读软件包随附的 README
文件以获取更多信息。
/etc/passwd
。通常,您会在您的 /etc/passwd
文件中为 Slip 呼叫者创建一些特殊登录名。通常遵循的约定是使用呼叫主机的 主机名,并在其前面加上大写字母“S”。因此,例如,如果呼叫主机名为 radio
,那么您可以创建一个看起来像这样的 /etc/passwd
条目
Sradio:FvKurok73:1427:1:radio SLIP login:/tmp:/sbin/sliplogin
帐户的名称是什么并不重要,只要它对您有意义即可。注意:呼叫者不需要任何特殊的家目录,因为他们不会从这台机器上获得 shell,因此 /tmp
是一个不错的选择。另请注意,sliplogin 用作普通登录 shell 的替代品。
/etc/slip.hosts
/etc/slip.hosts
文件是 sliplogin 搜索与登录名匹配的条目以获取此呼叫者的配置详细信息的文件。正是在此文件中,您指定将分配给呼叫者并配置供其使用的 ip 地址和网络掩码。两个主机的示例条目,一个是主机 radio
的静态配置,另一个是用户主机 albert
的动态配置,可能如下所示
#
Sradio 44.136.8.99 44.136.8.100 255.255.255.0 normal -1
Salbert 44.136.8.99 DYNAMIC 255.255.255.0 compressed 60
#
/etc/slip.hosts
文件条目是DYNAMIC
,则将根据稍后讨论的您的 /etc/slip.tty
文件中包含的信息分配 ip 地址。注意:您必须使用至少 1.3 版本的 sliplogin 才能使其工作。normal
”或“compressed
”。注意:您可以使用主机名或点分十进制表示法的 IP 地址作为字段 2 和 3。如果您使用主机名,则这些主机必须是可解析的,也就是说,您的机器必须能够找到这些主机名的 ip 地址,否则脚本在被调用时将失败。您可以通过尝试 telnet 到主机名来测试这一点,如果您收到“正在尝试 nnn.nnn.nnn...”消息,则表示您的机器已能够找到该名称的 ip 地址。如果您收到消息“未知主机”,则表示它没有找到。如果未找到,请使用点分十进制表示法的 ip 地址,或修复您的名称解析器配置(请参阅“名称解析”部分)。
最常见的 slip 模式是
启用正常的未压缩 SLIP。
启用 van Jacobsen 标头压缩 (cSLIP)
/etc/slip.login
文件。在 sliplogin 搜索 /etc/slip.hosts
并找到匹配的条目后,它将尝试执行 /etc/slip.login
文件,以实际使用其 ip 地址和网络掩码配置 SLIP 接口。sliplogin 软件包随附的示例 /etc/slip.login
文件如下所示
#!/bin/sh -
#
# @(#)slip.login 5.1 (Berkeley) 7/1/90
#
# generic login file for a SLIP line. sliplogin invokes this with
# the parameters:
# $1 $2 $3 $4, $5, $6 ...
# SLIPunit ttyspeed pid the arguments from the slip.host entry
#
/sbin/ifconfig $1 $5 pointopoint $6 mtu 1500 -trailers up
/sbin/route add $6
arp -s $6 <hw_addr> pub
exit 0
#
您会注意到,此脚本只是使用 ifconfig 和 route 命令来使用其 ip 地址、远程 ip 地址和网络掩码配置 SLIP 设备,并为通过 SLIP 设备的远程地址创建路由。就像您使用 slattach 命令时一样。另请注意使用 Proxy ARP 以确保与服务器机器在同一以太网上的其他主机将知道如何访问拨入主机。<hw_addr>
字段应该是机器中以太网卡的硬件地址。如果您的服务器机器不在以太网网络上,那么您可以完全忽略此行。
/etc/slip.logout
文件。当呼叫断开时,您需要确保串行设备恢复到正常状态,以便将来的呼叫者能够正确登录。这是通过使用 /etc/slip.logout
文件来实现的。它的格式非常简单,并且使用与 /etc/slip.login
文件相同的参数调用。
#!/bin/sh -
#
# slip.logout
#
/sbin/ifconfig $1 down
arp -d $6
exit 0
#
它所做的只是“关闭”接口,这将删除先前创建的手动路由。它还使用 arp 命令来删除任何已放置的代理 arp,同样,如果您的服务器机器没有以太网端口,则您不需要脚本中的 arp 命令。/etc/slip.tty
文件。如果您正在使用动态 ip 地址分配(在 /etc/slip.hosts
文件中配置了任何带有 DYNAMIC
关键字的主机),那么您必须配置 /etc/slip.tty
文件以列出分配给哪个端口的地址。如果您希望服务器动态地为用户分配地址,则只需要此文件。
该文件是一个表格,列出了将支持拨入 SLIP 连接的 tty 设备以及应分配给在该端口上拨入的用户的 ip 地址。其格式如下
# slip.tty tty -> IP address mappings for dynamic SLIP
# format: /dev/tty?? xxx.xxx.xxx.xxx
#
/dev/ttyS0 192.168.0.100
/dev/ttyS1 192.168.0.101
#
此表说明的是,在 /dev/ttyS0
端口上拨入并且其 /etc/slip.hosts
文件中的远程地址字段设置为 DYNAMIC
的呼叫者将被分配地址 192.168.0.100
。
通过这种方式,您只需为每个端口分配一个地址,即可供所有不需要专用地址的用户使用。这有助于您将所需的地址数量降至最低,以避免浪费。
首先让我说明一下,以下一些信息来自 dip 手册页,其中简要记录了如何将 Linux 作为 SLIP 服务器运行。另请注意,以下内容基于 dip337o-uri.tgz 软件包,可能不适用于其他版本的 dip。dip 具有输入操作模式,在该模式下,它会自动查找调用它的用户的条目,并根据它在 /etc/diphosts
文件中找到的信息将串行线路配置为 SLIP 链路。此输入操作模式通过将 dip 作为 diplogin 调用来激活。因此,这就是您如何使用 dip 作为 SLIP 服务器的方式,即创建特殊帐户,其中 diplogin 用作登录 shell。您需要做的第一件事是创建一个符号链接,如下所示
# ln -sf /usr/sbin/dip /usr/sbin/diplogin
然后,您需要在您的 /etc/passwd
和 /etc/diphosts
文件中都添加条目。您需要创建的条目的格式如下:要将 Linux 配置为带有 dip 的 SLIP 服务器,您需要为用户创建一些特殊的 SLIP 帐户,其中 dip(在输入模式下)用作登录 shell。建议的约定是让所有 SLIP 帐户都以大写字母“S”开头,例如“Sfredm”。SLIP 用户的示例 /etc/passwd
条目如下所示
Sfredm:ij/SMxiTlGVCo:1004:10:Fred:/tmp:/usr/sbin/diplogin
^^ ^^ ^^ ^^ ^^ ^^ ^^
| | | | | | \__ diplogin as login shell
| | | | | \_______ Home directory
| | | | \____________ User Full Name
| | | \_________________ User Group ID
| | \_____________________ User ID
| \_______________________________ Encrypted User Password
\__________________________________________ Slip User Login Name
在用户登录后,login 程序,如果找到并验证用户没问题,将执行 diplogin 命令。当 dip 作为 diplogin 调用时,它知道它应该自动假定它正在被用作登录 shell。当它作为 diplogin 启动时,它做的第一件事是使用 getuid() 函数调用来获取调用它的用户的用户 ID。然后,它在 /etc/diphosts
文件中搜索与用户 ID 或呼叫传入的 tty 设备的名称匹配的第一个条目,并适当地配置自身。通过明智地决定是否在 diphosts
文件中为用户提供条目,或者是否让用户获得默认配置,您可以构建您的服务器,以便您可以混合使用静态和动态分配地址的用户。dip 将在输入模式下调用时自动添加“Proxy-ARP”条目,因此您无需担心手动添加此类条目。
/etc/diphosts
dip 使用 /etc/diphosts
来查找远程主机的预设配置。这些远程主机可能是拨入您的 linux 机器的用户,或者它们可能是您使用您的 linux 机器拨入的机器。/etc/diphosts
的一般格式如下
..
Suwalt::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:CSLIP,1006
ttyS1::145.71.34.3:145.71.34.2:255.255.255.0:Dynamic ttyS1:CSLIP,296
..
字段是登录名
:由 getpwuid(getuid()) 或 tty 名称返回。unused
:与 passwd 兼容远程地址
:呼叫主机的 IP 地址,可以是数字或名称本地地址
:此机器的 IP 地址,同样可以是数字或名称网络掩码
:以点分十进制表示法表示注释字段
:在此处放置任何您想要的内容。协议
:Slip、CSlip 等。MTU
:十进制数字/etc/net/diphosts
条目可能是
Sfredm::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:SLIP,296
它指定了一个 SLIP 链接,远程地址为 145.71.34.1,MTU 为 296,或者
Sfredm::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:CSLIP,1006
它指定了一个支持 cSLIP 的链接,远程地址为 145.71.34.1,MTU 为 1006。因此,所有您希望允许静态分配拨号 IP 访问的用户都应该在 /etc/diphosts
中有一个条目。如果您希望呼叫特定端口的用户动态分配其详细信息,那么您必须为 tty
设备创建一个条目,并且不要配置基于用户的条目。您应该记住为您的拨号用户使用的每个 tty
设备至少配置一个条目,以确保无论他们拨入哪个调制解调器,都有合适的配置可供他们使用。
当用户登录时,他们将收到正常的登录名和密码提示,他们应该在其中输入他们的 SLIP 登录用户名和密码。如果这些验证没问题,那么用户将看不到任何特殊消息,他们应该只需在其末端更改为 SLIP 模式即可。然后,用户应该能够正常连接,并使用 diphosts
文件中的相关参数进行配置。
Matt Dillon <dillon@apollo.west.oic.com>
编写了一个软件包,它不仅可以拨入,还可以拨出 SLIP。Matt 的软件包是管理您的连接的小程序和脚本的组合。您需要安装 tcsh,因为至少其中一个脚本需要它。Matt 提供了 expect 实用程序的二进制副本,因为它也是其中一个脚本所需要的。您很可能需要一些 expect 经验才能使此软件包按您的喜好工作,但不要因此而气馁。
Matt 在 README 文件中编写了一组很好的安装说明,因此我不会费心重复它们。
您可以从其主站点获取 dSLIP 软件包:apollo.west.oic.com
/pub/linux/dillon_src/dSLIP203.tgz
或从:metalab.unc.edu
/pub/Linux/system/Network/serial/dSLIP203.tgz
在执行 make install
之前,请阅读 README
文件并创建 /etc/passwd
和 /etc/group
条目。以下小节专门针对特定的网络技术。这些部分中包含的信息不一定适用于任何其他类型的网络技术。主题按字母顺序排序。
ARCNet 设备名称为“arc0e
”、“arc1e
”、“arc2e
”等或“arc0s
”、“arc1s
”、“arc2s
”等。内核检测到的第一张卡被分配为“arc0e
”或“arc0s
”,其余的按照检测到的顺序依次分配。末尾的字母表示您选择的是以太网封装数据包格式还是 RFC1051 数据包格式。
内核编译选项:
Network device support --->
[*] Network device support
<*> ARCnet support
[ ] Enable arc0e (ARCnet "Ether-Encap" packet format)
[ ] Enable arc0s (ARCnet RFC1051 packet format)
一旦您正确构建内核以支持您的以太网卡,那么配置网卡就很容易了。
通常您会使用类似
root# ifconfig arc0e 192.168.0.1 netmask 255.255.255.0 up
root# route add -net 192.168.0.0 netmask 255.255.255.0 arc0e
请参阅 /usr/src/linux/Documentation/networking/arcnet.txt
和 /usr/src/linux/Documentation/networking/arcnet-hardware.txt
文件以获取更多信息。ARCNet 支持由 Avery Pennarun 开发,apenwarr@foxnet.net
。
AF_APPLETALK
)
Appletalk 支持没有特殊的设备名称,因为它使用现有的网络设备。
内核编译选项:
Networking options --->
<*> Appletalk DDP
Appletalk 支持允许您的 Linux 机器与 Apple 网络互操作。其一个重要的用途是在您的 Linux 和 Apple 计算机之间共享打印机和磁盘等资源。需要额外的软件,这称为 netatalk。Wesley Craig netatalk@umich.edu
代表密歇根大学的“研究系统 Unix 组”团队,他们制作了 netatalk 软件包,该软件包提供了实现 Appletalk 协议栈和一些有用的实用程序的软件。netatalk 软件包可能已随您的 Linux 发行版一起提供,或者您必须从其位于 密歇根大学 的主站点 ftp 它。
要构建和安装软件包,请执行类似操作
user% tar xvfz .../netatalk-1.4b2.tar.Z
user% make
root# make install
您可能需要在调用 make 以实际编译软件之前编辑“Makefile”。具体来说,您可能需要更改 DESTDIR 变量,该变量定义了稍后将安装文件的位置。默认的 /usr/local/atalk 相当安全。
您需要做的第一件事是确保 /etc/services
文件中存在适当的条目。您需要的条目是
rtmp 1/ddp # Routing Table Maintenance Protocol
nbp 2/ddp # Name Binding Protocol
echo 4/ddp # AppleTalk Echo Protocol
zip 6/ddp # Zone Information Protocol
下一步是在 /usr/local/atalk/etc
目录(或您安装软件包的任何位置)中创建 Appletalk 配置文件。
要创建的第一个文件是 /usr/local/atalk/etc/atalkd.conf
文件。最初,此文件只需要一行,用于指定支持您的 Apple 机器所在的网络的网络设备的名称。
eth0
Appletalk 守护程序将在运行后添加额外的详细信息。
您可以从您的 Linux 机器导出文件系统到网络,以便网络上的 Apple 机器可以共享它们。
为此,您必须配置 /usr/local/atalk/etc/AppleVolumes.system
文件。还有另一个配置文件名为 /usr/local/atalk/etc/AppleVolumes.default
,它具有完全相同的格式,并描述了使用访客权限连接的用户将接收哪些文件系统。
有关如何配置这些文件以及各种选项的完整详细信息,请参阅 afpd 手册页。
一个简单的例子可能如下所示:
/tmp Scratch
/home/ftp/pub "Public Area"
这将导出您的 /tmp
文件系统作为 AppleShare 卷 “Scratch”,并将您的 ftp 公共目录作为 AppleShare 卷 “Public Area”。卷名称不是强制性的,守护程序会为您选择一些名称,但无论如何指定它们也不会有坏处。
您可以非常简单地与您的 Apple 机器共享您的 Linux 打印机。您需要运行 papd 程序,它是 Appletalk 打印机访问协议守护程序。当您运行此程序时,它将接受来自您的 Apple 机器的请求,并将打印作业假脱机到您的本地行式打印机守护程序以进行打印。
您需要编辑 /usr/local/atalk/etc/papd.conf
文件来配置守护程序。此文件的语法与您常用的 /etc/printcap
文件相同。您给定义的名称将在 Appletalk 命名协议 NBP 中注册。
一个示例配置可能如下所示:
TricWriter:\
:pr=lp:op=cg:
这将使名为 “TricWriter” 的打印机可用于您的 Appletalk 网络,并且所有接受的作业都将打印到 Linux 打印机 “lp
”(在 /etc/printcap
文件中定义),使用 lpd。条目 “op=cg
” 表示 Linux 用户 “cg
” 是打印机的操作员。好的,您现在应该准备好测试此基本配置了。netatalk 软件包中提供了一个 rc.atalk 文件,它应该可以正常工作,所以您只需执行以下操作:
root# /usr/local/atalk/etc/rc.atalk
一切都应该启动并正常运行。您应该看不到任何错误消息,并且软件会将消息发送到控制台,指示每个启动阶段。
要测试软件是否正常运行,请转到您的 Apple 机器之一,下拉 Apple 菜单,选择“Chooser”,单击“AppleShare”,您的 Linux 机器应该会出现。
/etc/rc.d/rc.inet1
文件之前启动 Appletalk 软件。.AppleDesktop
” 和 Network Trash Folder
的目录。然后,对于您访问的每个目录,它将在其下方创建一个 .AppleDouble
,以便它可以存储资源分支等。因此,在导出 /
之前要三思,您之后会有很多时间来清理。/proc/net/
目录中找到。有关如何为 Linux 配置 Appletalk 的更详细描述,请参阅 Anders Brownworth 的 Linux Netatalk-HOWTO 页面,网址为 thehamptons.com。
Werner Almesberger <werner.almesberger@lrc.di.epfl.ch>
正在管理一个为 Linux 提供异步传输模式支持的项目。有关项目状态的最新信息,可以从以下网址获得:lrcwww.epfl.ch。
AF_AX25
)
在 2.0.*
内核中,AX.25 设备名称为 “sl0
”、“sl1
” 等,在 2.1.*
内核中为 “ax0
”、“ax1
” 等。
内核编译选项:
Networking options --->
[*] Amateur Radio AX.25 Level 2
AX25、Netrom 和 Rose 协议在 AX25-HOWTO 中进行了介绍。这些协议被世界各地的业余无线电操作员用于数据包无线电实验。
这些协议的大部分实现工作由 Jonathon Naylor 完成,jsn@cs.nott.ac.uk
。
目前正在进行对 DECNet 的支持。您应该期望它出现在稍后的 2.1.*
内核中。
FDDI 设备名称为 “fddi0
”、“fddi1
”、“fddi2
” 等。内核检测到的第一张卡被分配为 “fddi0
”,其余的按检测到的顺序依次分配。
Larry Stefani,lstefani@ultranet.com
,为 Digital Equipment Corporation FDDI EISA 和 PCI 卡开发了驱动程序。
内核编译选项:
Network device support --->
[*] FDDI driver support
[*] Digital DEFEA and DEFPA adapter support
当您构建内核以支持 FDDI 驱动程序并安装后,FDDI 接口的配置几乎与以太网接口的配置相同。您只需在 ifconfig 和 route 命令中指定相应的 FDDI 接口名称即可。
帧中继设备名称对于 DLCI 封装设备为 “dlci00
”、“dlci01
” 等,对于 FRAD 为 “sdla0
”、“sdla1
” 等。
帧中继是一种新的网络技术,旨在适应 “突发” 或间歇性的数据通信流量。您可以使用帧中继访问设备 (FRAD) 连接到帧中继网络。Linux 帧中继支持 RFC-1490 中描述的 IP over Frame Relay。
内核编译选项:
Network device support --->
<*> Frame relay DLCI support (EXPERIMENTAL)
(24) Max open DLCI
(8) Max DLCI per device
<*> SDLA (Sangoma S502/S508) support
Mike McLagan,mike.mclagan@linux.org
,开发了帧中继支持和配置工具。
目前,唯一支持的 FRAD 是 Sangoma Technologies S502A
、S502E
和 S508
。
要在重建内核后配置 FRAD 和 DLCI 设备,您将需要帧中继配置工具。这些工具可从 ftp.invlogic.com 获取。编译和安装这些工具很简单,但缺少顶层 Makefile 使其成为一个相当手动的过程。
user% tar xvfz .../frad-0.15.tgz
user% cd frad-0.15
user% for i in common dlci frad; make -C $i clean; make -C $i; done
root# mkdir /etc/frad
root# install -m 644 -o root -g root bin/*.sfm /etc/frad
root# install -m 700 -o root -g root frad/fradcfg /sbin
rppt# install -m 700 -o root -g root dlci/dlcicfg /sbin
请注意,之前的命令使用 sh 语法,如果您使用 csh 风格(如 tcsh),则 for 循环将有所不同。
安装工具后,您需要创建一个 /etc/frad/router.conf
文件。您可以使用此模板,它是示例文件之一的修改版本。
# /etc/frad/router.conf
# This is a template configuration for frame relay.
# All tags are included. The default values are based on the code
# supplied with the DOS drivers for the Sangoma S502A card.
#
# A '#' anywhere in a line constitutes a comment
# Blanks are ignored (you can indent with tabs too)
# Unknown [] entries and unknown keys are ignored
#
[Devices]
Count=1 # number of devices to configure
Dev_1=sdla0 # the name of a device
#Dev_2=sdla1 # the name of a device
# Specified here, these are applied to all devices and can be overridden for
# each individual board.
#
Access=CPE
Clock=Internal
KBaud=64
Flags=TX
#
# MTU=1500 # Maximum transmit IFrame length, default is 4096
# T391=10 # T391 value 5 - 30, default is 10
# T392=15 # T392 value 5 - 30, default is 15
# N391=6 # N391 value 1 - 255, default is 6
# N392=3 # N392 value 1 - 10, default is 3
# N393=4 # N393 value 1 - 10, default is 4
# Specified here, these set the defaults for all boards
# CIRfwd=16 # CIR forward 1 - 64
# Bc_fwd=16 # Bc forward 1 - 512
# Be_fwd=0 # Be forward 0 - 511
# CIRbak=16 # CIR backward 1 - 64
# Bc_bak=16 # Bc backward 1 - 512
# Be_bak=0 # Be backward 0 - 511
#
#
# Device specific configuration
#
#
#
# The first device is a Sangoma S502E
#
[sdla0]
Type=Sangoma # Type of the device to configure, currently only
# SANGOMA is recognized
#
# These keys are specific to the 'Sangoma' type
#
# The type of Sangoma board - S502A, S502E, S508
Board=S502E
#
# The name of the test firmware for the Sangoma board
# Testware=/usr/src/frad-0.10/bin/sdla_tst.502
#
# The name of the FR firmware
# Firmware=/usr/src/frad-0.10/bin/frm_rel.502
#
Port=360 # Port for this particular card
Mem=C8 # Address of memory window, A0-EE, depending on card
IRQ=5 # IRQ number, do not supply for S502A
DLCIs=1 # Number of DLCI's attached to this device
DLCI_1=16 # DLCI #1's number, 16 - 991
# DLCI_2=17
# DLCI_3=18
# DLCI_4=19
# DLCI_5=20
#
# Specified here, these apply to this device only,
# and override defaults from above
#
# Access=CPE # CPE or NODE, default is CPE
# Flags=TXIgnore,RXIgnore,BufferFrames,DropAborted,Stats,MCI,AutoDLCI
# Clock=Internal # External or Internal, default is Internal
# Baud=128 # Specified baud rate of attached CSU/DSU
# MTU=2048 # Maximum transmit IFrame length, default is 4096
# T391=10 # T391 value 5 - 30, default is 10
# T392=15 # T392 value 5 - 30, default is 15
# N391=6 # N391 value 1 - 255, default is 6
# N392=3 # N392 value 1 - 10, default is 3
# N393=4 # N393 value 1 - 10, default is 4
#
# The second device is some other card
#
# [sdla1]
# Type=FancyCard # Type of the device to configure.
# Board= # Type of Sangoma board
# Key=Value # values specific to this type of device
#
# DLCI Default configuration parameters
# These may be overridden in the DLCI specific configurations
#
CIRfwd=64 # CIR forward 1 - 64
# Bc_fwd=16 # Bc forward 1 - 512
# Be_fwd=0 # Be forward 0 - 511
# CIRbak=16 # CIR backward 1 - 64
# Bc_bak=16 # Bc backward 1 - 512
# Be_bak=0 # Be backward 0 - 511
#
# DLCI Configuration
# These are all optional. The naming convention is
# [DLCI_D<devicenum>_<DLCI_Num>]
#
[DLCI_D1_16]
# IP=
# Net=
# Mask=
# Flags defined by Sangoma: TXIgnore,RXIgnore,BufferFrames
# DLCIFlags=TXIgnore,RXIgnore,BufferFrames
# CIRfwd=64
# Bc_fwd=512
# Be_fwd=0
# CIRbak=64
# Bc_bak=512
# Be_bak=0
[DLCI_D2_16]
# IP=
# Net=
# Mask=
# Flags defined by Sangoma: TXIgnore,RXIgnore,BufferFrames
# DLCIFlags=TXIgnore,RXIgnore,BufferFrames
# CIRfwd=16
# Bc_fwd=16
# Be_fwd=0
# CIRbak=16
# Bc_bak=16
# Be_bak=0
当您构建了 /etc/frad/router.conf
文件后,剩下的唯一步骤是配置实际设备本身。这仅比正常的网络设备配置稍微棘手一些,您需要记住在 DLCI 封装设备之前启动 FRAD 设备。由于命令数量较多,这些命令最好托管在 shell 脚本中。
#!/bin/sh
# Configure the frad hardware and the DLCI parameters
/sbin/fradcfg /etc/frad/router.conf || exit 1
/sbin/dlcicfg file /etc/frad/router.conf
#
# Bring up the FRAD device
ifconfig sdla0 up
#
# Configure the DLCI encapsulation interfaces and routing
ifconfig dlci00 192.168.10.1 pointopoint 192.168.10.2 up
route add -net 192.168.10.0 netmask 255.255.255.0 dlci00
#
ifconfig dlci01 192.168.11.1 pointopoint 192.168.11.2 up
route add -net 192.168.11.0 netmask 255.255.255.0 dlci00
#
route add default dev dlci00
#
AF_IPX
)
IPX 协议最常用于 Novell NetWare(tm) 局域网环境。Linux 包括对该协议的支持,并且可以配置为充当网络端点或 IPX 的路由器。
内核编译选项:
Networking options --->
[*] The IPX protocol
[ ] Full internal IPX network
IPX 协议和 NCPFS 在 IPX-HOWTO 中进行了更深入的介绍。
AF_NETROM
)
NetRom 设备名称为 “nr0
”、“nr1
” 等。
内核编译选项:
Networking options --->
[*] Amateur Radio AX.25 Level 2
[*] Amateur Radio NET/ROM
AX25、Netrom 和 Rose 协议在 AX25-HOWTO 中进行了介绍。这些协议被世界各地的业余无线电操作员用于数据包无线电实验。
这些协议的大部分实现工作由 Jonathon Naylor 完成,jsn@cs.nott.ac.uk
。
AF_ROSE
)
Rose 设备名称在 2.1.*
内核中为 “rs0
”、“rs1
” 等。Rose 在 2.1.*
内核中可用。
内核编译选项:
Networking options --->
[*] Amateur Radio AX.25 Level 2
<*> Amateur Radio X.25 PLP (Rose)
AX25、Netrom 和 Rose 协议在 AX25-HOWTO 中进行了介绍。这些协议被世界各地的业余无线电操作员用于数据包无线电实验。
这些协议的大部分实现工作由 Jonathon Naylor 完成,jsn@cs.nott.ac.uk
。
SAMBA 是会话管理块协议的实现。Samba 允许 Microsoft 和其他系统挂载和使用您的磁盘和打印机。
SAMBA 及其配置在 SMB-HOWTO 中进行了详细介绍。
STRIP 设备名称为 “st0
”、“st1
” 等。
内核编译选项:
Network device support --->
[*] Network device support
....
[*] Radio network interfaces
< > STRIP (Metricom starmode radio IP)
STRIP 是一种协议,专门为 Metricom 无线电调制解调器系列设计,用于斯坦福大学进行的名为 MosquitoNet 项目 的研究项目。这里有很多有趣的阅读材料,即使您对该项目没有直接兴趣。
Metricom 无线电连接到串行端口,采用扩频技术,通常能够达到约 100kbps。有关 Metricom 无线电的信息可从以下网址获得:Metricom Web 服务器。
目前,标准网络工具和实用程序不支持 STRIP 驱动程序,因此您必须从 MosquitoNet Web 服务器下载一些定制工具。有关您需要哪些软件的详细信息,请访问:MosquitoNet STRIP 页面。
配置摘要是,您使用修改后的 slattach 程序将串行 tty 设备的线路规程设置为 STRIP,然后像配置以太网一样配置生成的 “st[0-9]
” 设备,但有一个重要的例外,由于技术原因,STRIP 不支持 ARP 协议,因此您必须手动配置子网上每个主机的 ARP 条目。这不应该太繁琐。
令牌环设备名称为 “tr0
”、“tr1
” 等。令牌环是 IBM 标准 LAN 协议,它通过提供一种机制来避免冲突,该机制只允许 LAN 上的一个站点在同一时间传输。 “令牌” 一次由一个站点持有,持有令牌的站点是唯一允许传输的站点。当它传输完数据后,它会将令牌传递给下一个站点。令牌在所有活动站点之间循环,因此得名 “令牌环”。
内核编译选项:
Network device support --->
[*] Network device support
....
[*] Token Ring driver support
< > IBM Tropic chipset based adaptor support
令牌环的配置与以太网的配置相同,只是要配置的网络设备名称不同。X.25 是由 C.C.I.T.T.
(世界大多数地区的电信公司认可的标准机构)定义的基于电路的包交换协议。X.25 和 LAPB 的实现正在进行中,最新的 2.1.*
内核包括正在进行的工作。
Jonathon Naylor jsn@cs.nott.ac.uk
正在领导开发,并且已经建立了一个邮件列表来讨论 Linux X.25 相关事宜。要订阅,请发送消息至:majordomo@vger.rutgers.edu
,并在消息正文中包含文本 “subscribe linux-x25
”。
早期版本的配置工具可以从 Jonathon 的 ftp 站点 ftp.cs.nott.ac.uk 获取。
Wavelan 设备名称为 “eth0
”、“eth1
” 等。
内核编译选项:
Network device support --->
[*] Network device support
....
[*] Radio network interfaces
....
<*> WaveLAN support
WaveLAN 卡是一种扩频无线局域网卡。实际上,该卡看起来很像以太网卡,并且配置方式大致相同。您可以从 Wavelan.com 获取有关 Wavelan 卡的信息。
那些擅长使用烙铁的人可能想要构建自己的电缆来互连两台 Linux 机器。以下布线图应能帮助您完成此操作。
并非所有 NULL 调制解调器电缆都相同。许多 null 调制解调器电缆的作用仅仅是欺骗您的计算机,使其认为所有适当的信号都存在,并交换发送和接收数据。这没问题,但意味着您必须使用软件流控制 (XON/XOFF),这不如硬件流控制有效。以下电缆在机器之间提供最佳的信号,并允许您使用硬件 (RTS/CTS) 流控制。
Pin Name Pin Pin
Tx Data 2 ----------------------------- 3
Rx Data 3 ----------------------------- 2
RTS 4 ----------------------------- 5
CTS 5 ----------------------------- 4
Ground 7 ----------------------------- 7
DTR 20 -\--------------------------- 8
DSR 6 -/
RLSD/DCD 8 ---------------------------/- 20
\- 6
如果您打算在两台机器之间使用 PLIP 协议,那么无论您安装了哪种类型的并行端口,此电缆都将适用于您。
Pin Name pin pin
STROBE 1*
D0->ERROR 2 ----------- 15
D1->SLCT 3 ----------- 13
D2->PAPOUT 4 ----------- 12
D3->ACK 5 ----------- 10
D4->BUSY 6 ----------- 11
D5 7*
D6 8*
D7 9*
ACK->D3 10 ----------- 5
BUSY->D4 11 ----------- 6
PAPOUT->D2 12 ----------- 4
SLCT->D1 13 ----------- 3
FEED 14*
ERROR->D0 15 ----------- 2
INIT 16*
SLCTIN 17*
GROUND 25 ----------- 25
注释虽然您可能能够长距离运行 PLIP 电缆,但如果可以,您应该避免这样做。电缆的规格允许电缆长度约为 1 米左右。在运行长 plip 电缆时请非常小心,因为强电磁场源(如闪电、电力线和无线电发射器)可能会干扰甚至损坏您的控制器。如果您真的想远距离连接您的两台计算机,您真的应该考虑购买一对细线以太网卡并运行一些同轴电缆。
10base2 是一种以太网布线标准,它指定使用直径约为 5 毫米的 52 欧姆同轴电缆。使用 10base2 布线互连机器时,有几个重要的规则要记住。第一个是您必须在布线的 两端 使用终端电阻器。终端电阻器是 52 欧姆的电阻器,有助于确保信号在到达电缆末端时被吸收而不是反射。如果电缆的每一端都没有终端电阻器,您可能会发现以太网不可靠或根本无法工作。通常,您会使用 “T 型接头” 来互连机器,这样您最终会得到类似以下内容:
|==========T=============T=============T==========T==========|
| | | |
| | | |
----- ----- ----- -----
| | | | | | | |
----- ----- ----- -----
其中,任一端的 “|
” 代表终端电阻器,“======
” 代表带有 BNC 插头的同轴电缆长度,“T
” 代表 “T 型接头” 连接器。您应该尽可能缩短 “T 型接头” 和 PC 中实际以太网卡之间的电缆长度,理想情况下,“T 型接头” 将直接插入以太网卡。如果您只有两个双绞线以太网卡,并且希望将它们连接在一起,则不需要集线器。您可以将两张卡直接连接在一起。显示如何执行此操作的图表包含在 Ethernet-HOWTO 中。
以下是本文档中使用的一些最重要术语的列表。
这是 地址解析协议 的首字母缩写,这是网络机器将 IP 地址与硬件地址关联的方式。
这是 异步传输模式 的首字母缩写。ATM 网络将数据打包成标准大小的块,它可以有效地将这些块从一个点传送到另一个点。ATM 是一种电路交换包网络技术。
这通常是系统中用户所在的终端上的软件。也有例外情况,例如,在 X11 窗口系统中,实际上是带有用户的服务器,而客户端在远程机器上运行。客户端是程序或系统的终端,它接收服务器提供的服务。在 对等 系统(如 slip 或 ppp)的情况下,客户端被认为是发起连接的终端,而被调用的远程终端被认为是服务器。
数据报是数据和标头的离散包,其中包含地址,它是跨 IP 网络传输的基本单元。您可能还会听到它被称为 “数据包 (packet)”。
DLCI 是数据链路连接标识符,用于标识通过帧中继网络的唯一虚拟点对点连接。DLCI 通常由帧中继网络提供商分配。
帧中继是一种网络技术,非常适合承载突发或零星性质的流量。通过让许多帧中继客户共享相同的网络容量,并依靠他们在略微不同的时间想要使用网络,从而降低了网络成本。
这是一个数字,它在媒体访问层唯一标识物理网络中的主机。例如,以太网地址 (Ethernet Addresses) 和 AX.25 地址 (AX.25 Addresses)。
这是 综合业务数字网络 (Integrated Services Digital Network) 的首字母缩写。ISDN 提供了一种标准化的方法,电信公司可以通过这种方法向客户场所交付语音或数据信息。从技术上讲,ISDN 是一种电路交换数据网络。
这是互联网服务提供商 (Internet Service Provider) 的首字母缩写。这些是为人们提供互联网网络连接的组织或公司。
这是一个数字,它唯一标识网络上的 TCP/IP 主机。该地址长 4 个字节,通常以所谓的 “点分十进制表示法” 表示,其中每个字节以十进制表示,字节之间用点 “.” 分隔。
最大段大小 (MSS) 是可以一次传输的最大数据量。如果您想防止本地分片,MSS 将等于 MTU-IP 标头。
最大传输单元 (MTU) 是一个参数,它确定 IP 接口可以传输的最大数据报,而无需将其分解为更小的单元。MTU 应大于您希望不分片传输的最大数据报。请注意,这仅防止本地分片,路径中的其他某些链路可能具有较小的 MTU,并且数据报将在那里分片。典型值是以太网接口为 1500 字节,SLIP 接口为 576 字节。
路由 是您的数据报通过网络到达其目的地的路径。
这通常是远离用户的系统或终端上的软件。服务器为一个或多个客户端提供一些服务。服务器的示例包括 ftp、网络文件系统 (Networked File System) 或 域名服务器 (Domain Name Server)。在 对等 系统(如 slip 或 ppp)的情况下,服务器被认为是链接的被调用端,而调用端被认为是客户端。
窗口 是接收端在给定时间点可以接受的最大数据量。
如果您有兴趣将 Linux 用于 ISP 目的,我建议您查看 Linux ISP 主页,以获取您可能需要和使用的信息的良好指针列表。
我要感谢以下人员对本文档的贡献(排名不分先后):Terry Dawson、Axel Boldt、Arnt Gulbrandsen、Gary Allpike、Cees de Groot、Alan Cox、Jonathon Naylor、Claes Ensson、Ron Nessim、John Minack、Jean-Pierre Cocatrix、Erez Strauss。
版权信息
NET-3-HOWTO,有关如何安装和配置 Linux 网络支持的信息。版权 (c) 1997 Terry Dawson,1998 Alessandro Rubini,1999 {POET} - LinuxPorts
本程序是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新发布和/或修改它;无论是许可证的第 2 版,还是(由您选择)任何更高版本。发布本程序的目的是希望它会有用,但不作任何担保;甚至不包含适销性或特定用途适用性的暗示担保。有关更多详细信息,请参阅 GNU 通用公共许可证。您应该已收到随本程序一起提供的 GNU 通用公共许可证副本;如果没有,请写信给:Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA。