跳转到内容

LPI Linux 认证/LPIC2 考试 202/网络

来自 Wikibooks,开放世界中的开放书籍
 
LPI logo

章节概述

[编辑 | 编辑源代码]
  • 基本网络配置
    • 概述
    • Getty 简介
    • 关于 mgetty
    • 关于 uugetty
    • 关于 getty_em
    • 关于 agetty
    • 关于 mingetty 和 fbgetty
    • PAP/CHAP 密钥文件
    • PAP 密钥文件
    • CHAP 密钥文件
    • 处理多个 PAP 认证连接
    • 练习
  • 高级网络配置和故障排除
    • 概述
    • 网络数据包过滤
    • Mangle 表
    • NAT 表
    • Filter 表
    • 状态机
    • Conntrack 条目
    • 用户空间状态
    • TCP 连接
    • UDP 连接
    • ICMP 连接
    • 默认连接
    • 复杂协议和连接跟踪
    • 规则的构建方式
    • 命令
    • 匹配
    • 通用匹配
    • 隐式匹配
    • TCP 匹配
    • UDP 匹配
    • ICMP 匹配
    • 显式匹配
    • Limit 匹配
    • MAC 匹配
    • Mark 匹配
    • Multiport 匹配
    • Owner 匹配
    • State 匹配
    • TOS 匹配
    • TTL 匹配
    • 目标/跳转
    • 练习

基本网络配置

[编辑 | 编辑源代码]

描述: 候选人应能够配置网络设备以连接到本地网络和广域网。此目标包括能够在单个网络中的不同子网之间进行通信,使用 mgetty 配置拨号访问,使用调制解调器或 ISDN 配置拨号访问,配置 PAP 和 CHAP 等认证协议,以及配置 TCP/IP 日志记录。

关键文件术语工具包括

/sbin/route 
/sbin/ifconfig 
/sbin/arp 
/usr/sbin/arpwatch
/etc/ 

接口配置通常使用 ifconfig 命令完成。Ifconfig 通常会启动指定的接口并在内核的路由表中为其 IP 地址创建一个路由。要访问单个网络中的各种子网,请使用 route 或 ifconfig 的 netmask 标志。使用 route,您可以设置具有相同 IP 的多个接口,但根据连接到哪个接口来路由数据包。使用 ifconfig,您可以为您的主机设置多个 IP,每个子网一个,从而成为多个子网之间的桥梁。

Getty 简介

[编辑 | 编辑源代码]

getty 是您用于拨号的程序。您不需要它进行拨出。除了显示登录提示符之外,它还可以帮助接听电话。最初,getty 用于从哑终端登录到计算机。如今,它的一种主要用途是登录到 Linux 控制台。有几个不同的 getty 程序,但其中几个可以与调制解调器一起用于拨号。getty 程序通常在启动时启动。它必须从 /etc/inittab 文件中调用。您可能在这个文件中找到一些示例,您可能需要对其进行一些编辑。希望这些示例适合您个人计算机上安装的 getty 版本。

有四种不同的 getty 程序可供选择,可以与调制解调器一起用于拨号:mgetty、uugetty、getty_em 和 agetty。以下小节提供了简要概述。Agetty 是这四种中最弱的一种,它主要用于直接连接的文本终端。mgetty 支持传真和语音邮件,而 Uugetty 不支持。据说 mgetty 缺少 uugetty 的一些功能。getty_em 是 uugetty 的简化版本。因此,mgetty 可能是您的最佳选择,除非您已经熟悉 uugetty(或难以获得 mgetty)。这些 getty 程序的语法不同,因此请确保您在 /etc/inittab 中使用正确的语法,无论您使用哪个 getty。

为了查看您计算机上有关各种 getty 的文档,请使用“locate”命令。键入:locate “*getty*”(包括引号可能会有所帮助)。请注意,许多发行版只是将程序称为 getty,即使它实际上可能是 agetty、uugetty 等。但如果您阅读手册页(键入:man getty),它可能会显示它是哪个 getty。这应该是路径为 /sbin/getty 的 getty 程序。

Getty 在登录后“退出”(并且可以重新生成)

登录后,您会注意到(通过使用“top”、“ps -ax”或“ptree”)getty 进程不再运行。它发生了什么?为什么在您的 shell 被终止后 getty 会重新启动?原因如下:在您输入用户名后,getty 会获取它并调用 login 程序,告诉它您的用户名。getty 进程被 login 进程替换。login 进程会要求您的密码,检查它,并启动您的密码文件中指定的任何进程。此进程通常是 bash shell。如果是这样,bash 会启动并替换 login 进程。请注意,一个进程替换了另一个进程,并且 bash shell 进程最初作为 getty 进程启动。这将在下文中说明。

现在,在 /etc/inittab 文件中,如果 getty 被终止,它应该重新生成(重新启动)。它在调用 getty 的行上这样说。

示例:/etc/inittab 中的 getty 条目 S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102


但是,如果 bash shell(或 login 进程)被终止,getty 会重新生成(重新启动)。为什么?好吧,login 进程和 bash 都是 getty 的替代品,并继承了它们的前身建立的信号连接。事实上,如果您仔细观察,您会注意到替换进程将具有与原始进程相同的进程 ID。因此,bash 在某种程度上是假扮的 getty,具有相同的进程 ID 号码。如果 bash 被终止,就像 getty 被终止一样(即使 getty 不再运行)。这会导致 getty 重新生成。

当用户注销时,该串行端口上的所有进程都会被终止,包括 bash shell。如果启用,这也会在调制解调器通过 DCD 电压下降发送挂断信号到串行端口时发生。注销或 DCD 下降都会导致 getty 重新生成。您可以通过手动终止 bash(或 login)来强制 getty 重新生成,方法是在“top”中按下 k 键等,或使用“kill”命令。您可能需要使用信号 9 终止它(它无法被忽略)。


说明的循环

      init - spawns -> getty -- starts -> login - starts --> shell
        \                                                      /
         \---------------<<  returns control to <<------------/

您可以通过名称开头的减号识别登录 shell。

示例:ps 输出(已过滤)walter 32255 0.0 0.7 4012 1772 pts/36 Ss 14:53 0:00 -bash

关于 mgetty

[编辑 | 编辑源代码]

mgetty 是作为 uugetty 的替代品而编写的,uugetty 早在 mgetty 出现之前就存在了。两者都用于调制解调器,但 mgetty 是最好的(除非您已经致力于使用 uugetty)。Mgetty 也可以用于直接连接的终端。除了允许拨号登录之外,mgetty 还提供传真支持和自动 PPP 检测。它允许在 mgetty 等待传入电话呼叫时拨出。还有一个名为 vgetty 的补充程序,它为某些调制解调器处理语音邮件。mgetty 文档还算不错(除了语音邮件)。要自动启动 PPP,必须编辑 /etc/mgetty/login.conf 以启用“AutoPPP”。您可以在 http://www.leo.org/~doering/mgetty/http://alpha.greenie.net/mgetty/ 找到有关 mgetty 的最新信息。

关于 uugetty

[编辑 | 编辑源代码]

getty_ps 包含两个程序:getty 用于控制台和终端设备,uugetty 用于调制解调器。Greg Hankins(Serial-HOWTO 的前作者)使用 uugetty,因此他关于 uugetty 的文章包含在此。请参见 Uugetty。

关于 getty_em

[编辑 | 编辑源代码]

这是 ``uugetty 的简化版本。它由 Vern Hoxie 编写,在他完全 对 getty_ps 和 uugetty 所需的复杂支持文件感到困惑后。它是 Vern Hoxie 提供的串行端口实用程序和信息的集合的一部分,可以通过 ftp 从 scicom.alphacdc.com/pub/linux 获取。该集合的名称是 ``serial_suite.tgz.

关于 agetty

[编辑 | 编辑源代码]

本小节篇幅较长,因为作者尝试使用 agetty 进行拨号。agetty 似乎很简单,因为它没有初始化文件。但是当我尝试它时,即使没有 CD 信号,它也会打开串行端口。然后,它在建立连接之前向处于 AT 命令状态的调制解调器发送了登录提示和 /etc/issue 文件。调制解调器认为这一切都是一个 AT 命令,如果它确实包含任何“at”字符串(偶然),它可能会对您的调制解调器配置文件产生不利影响。回显冲突可能会开始,其中 getty 和调制解调器会一遍又一遍地来回发送相同的字符串。如果您遇到这种情况,您可能会看到“过快重新生成”错误消息。为了防止这种情况,您需要禁用调制解调器的所有回显和结果代码(E0 和 Q1)。还要使用 agetty 的 -i 选项来防止发送任何 /etc/issue 文件。

如果您在调制解调器端口上启动 getty,并在几秒钟后发现您是在该端口上运行登录进程而不是 getty,则意味着一个错误的用户名已从调制解调器发送到 agetty。为了防止这种情况发生,我必须将我的拨号配置文件保存在调制解调器中,使其在开机时生效。另一个保存的配置文件用于拨号。然后,任何使用调制解调器的拨号程序都必须在其初始化字符串中使用 Z、Z0 或 Z1 来初始化调制解调器以进行拨号(通过加载保存的拨号配置文件)。如果 1 配置文件用于拨号,则使用 Z1 加载它,等等。如果您想稍后监听拨号,则调制解调器需要重置为拨号配置文件。并非所有拨号程序都能在退出时执行此重置。

因此,虽然 agetty 可以在您在调制解调器硬件中正确设置拨号配置文件的情况下正常工作,但它可能最适合虚拟控制台或终端,而不是调制解调器。如果 agetty 正在运行拨号,则没有简单的方法进行拨号。当有人第一次拨号到 agetty 时,他们应该按回车键以获取登录提示。Debian 发行版中的 agetty 只是名为 getty。

关于 mingetty 和 fbgetty

[编辑 | 编辑源代码]

mingetty 是一个小型 getty,它仅适用于显示器(通常的控制台),因此您不能将其用于拨号的调制解调器。fbgetty 与上述相同,但支持帧缓冲区。

基本网络配置

配置 PPP 的 PAP/CHAP 身份验证

如果要连接到的服务器需要 PAP 或 CHAP 身份验证,请编辑您的 PPP 选项文件并添加以下行

#
# force pppd to use your ISP user name as your 'host name' during the authentication process
name <your ISP user name> # you need to edit this line
#
# If you are running a PPP *server* and need to force PAP or CHAP uncomment the appropriate
# one of the following lines. Do NOT use these is you are a client connecting to a PPP server (even if
# it uses PAP or CHAP) as this tells the SERVER to authenticate itself to your machine (which
# almost certainly can't do - and the link will fail).
#+chap
#+pap
#
# If you are using ENCRYPTED secrets in the /etc/ppp/pap-secrets file, then uncomment the
# following line. Note: this is NOT the same as using MS encrypted passwords as can be
# set up in MS RAS on Windows NT.
#+papcrypt

基本网络配置 使用 MSCHAP

Microsoft Windows NT RAS 可以设置为使用 CHAP(挑战/握手身份验证协议)的变体。在您的 PPP 源代码包中,您会找到一个名为 README.MSCHAP80 的文件,其中讨论了这一点。

您可以通过为 pppd 启用调试来确定服务器是否正在请求使用此协议进行身份验证。如果服务器正在请求 MS CHAP 身份验证,您将看到类似于以下内容的行

rcvd [LCP ConfReq id=0x2 <asyncmap 0x0> <auth chap 80> <magic 0x46a3>]

这里的关键信息是 auth chap 80。为了使用 MS CHAP,您需要重新编译 pppd 以支持它。有关如何编译和使用此变体的说明,请参阅 PPP 源文件中的 README.MSCHAP80 文件中的说明。

您应该注意,目前此代码仅支持连接到 MS Windows NT 服务器的 Linux PPP 客户端。它不支持设置使用 MSCHAP80 身份验证来自客户端的 Linux PPP 服务器。

PAP/CHAP 密钥文件

[编辑 | 编辑源代码]

如果您使用的是 pap 或 chap 身份验证,那么您还需要创建密钥文件。这些是

/etc/ppp/pap-secrets
/etc/ppp/chap-secrets

它们必须由用户 root、组 root 拥有,并且出于安全原因具有 740 的文件权限。关于 PAP 和 CHAP 需要注意的第一点是,它们旨在对计算机系统进行身份验证,而不是对用户进行身份验证。啊?有什么区别?我听到你问。好吧,一旦您的计算机建立了与服务器的 PPP 连接,您系统上的任何用户都可以使用该连接——不仅仅是您。这就是您可以使用 PPP 建立连接两个局域网(LAN)的广域网(WAN)链接的原因。

PAP 可以(并且对于 CHAP 来说是必需的)要求双向身份验证——也就是说,每台计算机都需要一个有效的名称和密钥来识别参与的其他计算机。但是,这不是大多数提供拨号 PPP PAP 身份验证连接的 PPP 服务器的操作方式。

也就是说,您的 ISP 可能已经为您提供了用户名和密码,以允许您连接到他们的系统,然后连接到互联网。您的 ISP 对您的计算机名称并不感兴趣,因此您可能需要使用 ISP 给您的用户名作为您计算机的名称。这是使用 name 用户名选项来完成的。因此,如果您要使用 ISP 给您的用户名,请添加以下行

name your_user name_at_your_ISP

到您的 /etc/ppp/options 文件中。从技术上讲,您应该真正使用 user our_user name_at_your_ISP 来使用 PAP,但 pppd 足够智能,如果需要使用 PAP,它会将 name 解释为 user。使用 name 选项的优势在于它对 CHAP 也有效。

由于 PAP 用于对计算机进行身份验证,因此从技术上讲您还需要指定一个远程计算机名称。但是,由于大多数人只有一家 ISP,因此您可以在密钥文件中使用通配符 (*) 作为远程主机名。还值得注意的是,许多 ISP 运营着多个调制解调器组,这些调制解调器组连接到不同的终端服务器——每个服务器都有一个不同的名称,但通过单个(旋转)拨号号码进行访问。因此,在某些情况下,提前知道远程计算机的名称可能非常困难,因为这取决于您连接的哪个终端服务器!基本网络配置

PAP 密钥文件

[编辑 | 编辑源代码]

/etc/ppp/pap-secrets 文件如下所示

# Secrets for authentication using PAP
# client        server       secret     acceptable_local_IP_addresses

四个字段以空格分隔,最后一个字段可以为空(这是您希望从 ISP 获得动态和可能静态 IP 分配时的情况)。假设您的 ISP 给您提供了名为 fred 的用户名和名为 flintstone 的密码,您将在 /etc/ppp/options[.ttySx] 中设置名为 fred 的选项,并将 /etc/ppp/pap-secrets 文件设置为如下

# Secrets for authentication using PAP
# client        server  secret  acceptable local IP addresses
fred  * flintstone

这表示对于本地机器名称 fred(我们已经告诉 pppd 使用,即使它不是我们的本地机器名称)以及任何服务器,都使用 flintstone 的密码(密钥)。请注意,我们不需要指定本地 IP 地址,除非我们必须强制使用特定的本地静态 IP 地址。即使您尝试这样做,它也不太可能成功,因为大多数 PPP 服务器(出于安全原因)不允许远程系统设置要分配给它们的 IP 号码。

CHAP 密钥文件

[编辑 | 编辑源代码]

这要求您拥有相互身份验证方法——也就是说,您必须允许您的机器验证远程服务器,并且远程服务器验证您的机器。

因此,如果您的机器是 fred,远程机器是 barney,您的机器将设置 name fred remotename barney,远程机器将在它们各自的 /etc/ppp/options.ttySx 文件中设置 name barney remotename fred。

fred 的 /etc/chap-secrets 文件如下所示

# Secrets for authentication using CHAP
# client        server  secret            acceptable local IP addresses
fred  barney flintstone
barney  fred wilma

对于 barney

# Secrets for authentication using CHAP
# client        server  secret            acceptable local IP addresses
barney          fred    flintstone
fred  barney wilma

特别注意,两台机器都必须有双向身份验证的条目。这允许本地机器验证其对远程机器的身份,以及远程机器验证其对本地机器的身份。

处理多个 PAP 认证连接

[编辑 | 编辑源代码]

一些用户有多个使用 PAP 连接的服务器。只要您要连接的每个机器上的用户名不同,这就不成问题。

但是,许多用户在连接的两个(或多个——甚至全部)系统上具有相同的用户名。然后,这在从 /etc/ppp/pap-secrets 中正确选择适当的行时会出现问题。

正如您可能预料的那样,PPP 提供了一种克服此问题的机制。PPP 允许您使用 remotename 选项为连接的远程(服务器)端设置“假定名称”。

假设您使用用户名 fred 连接到两个 PPP 服务器。您将 /etc/ppp/pap-secrets 设置为类似于以下内容

fred pppserver1 barney
fred pppserver2 wilma

现在,要连接到 pppserver1,您将在 ppp-options 中使用 name fred remotename pppserver1,对于 pppserver2,则使用 name fred remotename pppserver2。

由于您可以使用 file filename 选项选择与 pppd 一起使用的 ppp 选项文件,因此您可以设置一个脚本以连接到每个 PPP 服务器,正确选择要使用的选项文件,从而选择正确的 remotename 选项。

关键词、文件和实用程序

/sbin/route
/sbin/ifconfig
PAP, CHAP, PPP
/etc/*

.

华夏公益教科书