跳转到内容

Linux 网络/SLIP 服务器

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

SLIP 服务器。

[编辑 | 编辑源代码]

如果您有一台可能连接到网络的机器,您希望其他人能够拨号进入并提供网络服务,那么您需要将您的机器配置为服务器。如果您想使用 SLIP 作为串行线路协议,那么目前您有三种选择来配置您的 Linux 机器作为 SLIP 服务器。我个人更倾向于使用第一个介绍的 sliplogin,因为它似乎最容易配置和理解,但我会提供每个选项的摘要,以便您可以做出自己的决定。

使用 sliplogin 的 SLIP 服务器。

[编辑 | 编辑源代码]

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, for the dialin user accounts.

·  /etc/slip.hosts, to contain the information unique to each dial-in
   user.

·  /etc/slip.login, which manages the configuration of the routing
   that needs to be performed for the user.

·  /etc/slip.tty, which is required only if you are configuring your
   server for dynamic address allocation and contains a table of
   addresses to allocate

·  /etc/slip.logout, which contains commands to clean up after the
   user has hung up or logged out.


哪里可以获取 sliplogin

[编辑 | 编辑源代码]

您可能已将 sliplogin 包作为发行版的一部分安装,如果没有,则可以从以下位置获取 sliplogin:metalab.unc.edu。tar 文件包含源代码、预编译的二进制文件和手册页。

为了确保只有授权用户才能运行 sliplogin 程序,您应该在 /etc/group 文件中添加类似于以下内容的条目

    slip::13:radio,fred


当您安装 sliplogin 包时,Makefile 将更改 sliplogin 程序的组所有权为 slip,这意味着只有属于该组的用户才能执行它。上面的示例将只允许用户 radio 和 fred 执行 sliplogin。

要将二进制文件安装到 /sbin 目录中,并将手册页安装到第 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 安装规则。

请阅读软件包附带的 README 文件以了解更多信息。

配置 /etc/passwd 以用于 SLIP 主机。

[编辑 | 编辑源代码]

通常,您会在 /etc/passwd 文件中为 SLIP 拨号者创建一些特殊的登录名。一个常见的约定是在调用主机的 hostname 前面加上一个大写字母“S”。例如,如果调用主机名为 radio,那么您可以创建一个 /etc/passwd 条目,如下所示

    Sradio:FvKurok73:1427:1:radio SLIP login:/tmp:/sbin/sliplogin

帐户名称实际上并不重要,只要对您有意义即可。

注意:拨号者不需要任何特殊的 home 目录,因为他们不会从这台机器获得 shell,所以 /tmp 是一个不错的选择。还要注意,sliplogin 用作普通登录 shell 的替代品。

配置 /etc/slip.hosts

[编辑 | 编辑源代码]

/etc/slip.hosts 文件是 sliplogin 搜索与登录名匹配的条目的文件,以获取此拨号者的配置详细信息。您可以在此文件中指定分配给拨号者的 IP 地址和网络掩码,并配置其使用。两个主机(一个为主机 radio 的静态配置,另一个为用户 host 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 文件条目如下所示:


1. 拨号者的登录名。

2. 服务器机器的 IP,即这台机器。

3. 将分配给拨号者的 IP 地址。如果此字段被编码为 DYNAMIC,则将根据您稍后讨论的 /etc/slip.tty 文件中包含的信息分配 IP 地址。注意:您必须使用至少 1.3 版本的 sliplogin 才能使其正常工作。

4. 以点分十进制表示法分配给拨号机器的网络掩码,例如 255.255.255.0 用于 C 类网络掩码。

5. SLIP 模式设置,允许您启用/禁用压缩和 SLIP 其他功能。此处允许的值为“normal”或“compressed”。

6. 超时参数,指定线路在空闲状态(未接收数据包)下可以保持多长时间,之后线路将自动断开连接。负值将禁用此功能。

7. 可选参数。


注意:您可以在字段 2 和 3 中使用主机名或以点分十进制表示法的 IP 地址。如果您使用主机名,则这些主机必须可解析,也就是说,您的机器必须能够为这些主机名找到一个 IP 地址,否则脚本将在调用时失败。您可以通过尝试 telnet 到主机名来测试这一点,如果您收到“正在尝试 nnn.nnn.nnn...”消息,那么您的机器已经能够为该名称找到一个 IP 地址。如果您收到“未知主机”消息,则它没有找到。如果不是,请使用以点分十进制表示法的 IP 地址,或修复您的名称解析器配置(参见名称解析部分)。

最常见的 SLIP 模式为


  normal
     to enable normal uncompressed SLIP.


  compressed
     to enable van Jacobsen header compression (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 命令来配置 SLIP 设备及其 IP 地址、远程 IP 地址和网络掩码,并通过 SLIP 设备创建远程地址的路由。就像您使用 slattach 命令一样。

还要注意使用代理 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 的 SLIP 服务器。

[编辑 | 编辑源代码]

首先我要说的是,以下信息来自 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


在用户登录后,如果登录程序发现并验证了用户没问题,它将执行 diplogin 命令。dip 在被调用为 diplogin 时,知道它应该自动假定它被用作登录 shell。当它以 diplogin 启动时,它所做的第一件事是使用 getuid() 函数调用来获取调用它的用户的用户 ID。然后,它在 /etc/diphosts 文件中搜索第一个与用户 ID 或调用进入的 tty 设备的名称匹配的条目,并相应地配置自身。通过明智地决定是否在 diphosts 文件中为用户提供条目,或者是否让用户获得默认配置,您可以构建服务器,使其能够混合使用静态分配地址的用户和动态分配地址的用户。

如果 dip 在输入模式下被调用,它将自动添加一个“Proxy-ARP”条目,因此您无需担心手动添加此类条目。

配置 /etc/diphosts

[编辑 | 编辑源代码]

/etc/diphosts 用于 dip 来查找远程主机的预设配置。这些远程主机可能是拨号到您的 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
      ..

各个字段分别表示:

1. 登录名:由 getpwuid(getuid()) 返回,或 tty 名字。

2. 未使用:与 passwd 兼容。

3. 远程地址:呼叫主机的 IP 地址,可以是数字,也可以是名称。

  by name

4. 本地地址:此机器的 IP 地址,可以是数字,也可以是名称。

5. 网络掩码:用点分十进制表示。

6. 注释字段:在此处输入任何您想要的内容。

7. 协议:Slip、CSlip 等。

8. MTU:十进制数字。

  An example /etc/net/diphosts entry for a remote SLIP user might be:
    Sfredm::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:SLIP,296

它指定了一个远程地址为 145.71.34.1 且 MTU 为 296 的 SLIP 连接,或者

    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 登录用户 ID 和密码。如果这些验证没问题,那么用户将不会看到任何特殊消息,他们应该在自己的终端上切换到 SLIP 模式。然后,用户应该能够正常连接并使用 diphosts 文件中的相关参数进行配置。

使用 dSLIP 包的 SLIP 服务器。

[编辑 | 编辑源代码]

Matt Dillon <[email protected]> 编写了一个包,它不仅可以拨号,还可以拨出 SLIP。Matt 的包是一组小型程序和脚本的组合,它们可以为您管理连接。您需要安装 tcsh,因为至少有一个脚本需要它。Matt 提供了 expect 实用程序的二进制副本,因为它也是其中一个脚本所需要的。您很可能需要一些使用 expect 的经验才能让这个包按您的意愿工作,但不要因此而气馁。Matt 在 README 文件中编写了一套完善的安装说明,所以我就不重复了。

您可以从其主页 apollo.west.oic.com/pub/linux/dillon_src/dSLIP203.tgz 或 metalab.unc.edu/pub/Linux/system/Network/serial/dSLIP203.tgz 获取 dSLIP 包。

阅读 README 文件,并在执行 make install 之前创建 /etc/passwd 和 /etc/group 条目。

华夏公益教科书