Linux网络管理员手册(7)

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

第七章 串行线路IP

串行线路协议SLIP和PPP为资金缺乏者提供Internet连接。除了需要一个modem和一块配有FI

FO缓冲的串行板(卡)外,不再需要其它的硬件了。使用它并不比使用一个邮箱复杂,并且

不断增长的私人机构以可以接受的价格为大家提供拨号上网IP。

Linux有SLIP和PPP两种驱动程序。SLIP已存在相当长的时间了,并且工作的很稳定。PPP驱动

程序是由Michael Callahan and Al Longyear最近开发的。PPP将在下一章中讨论。

7.1 一般需求

要使用SLIP或PPP,你当然必须配置一些如前章所讨论的那些基本网络特性。起码,你必须设

置回送(loopback)接口,并且提供名字解析。当连接到Internet上时,你当然要用到DNS。

最方便的方法是将某个名字服务器的地址写入resolv.conf文件中;SLIP链接一旦被激活,就

会查询这个服务器。名字服务器离你拨入的地方越近越好。

然而,这个方法并不是最佳的,因为所有的名字查找仍然都要通过你的SLIP/PPP链接。如果

你担心这样做所耗费的带宽,你也可以设置一个只缓冲(caching-only)名字服务器。它并

不真的服务于一个域,而只是作为你的主机所产生的所有DNS查询的一个中继。这个方案的优

点在于它建立了一个缓冲,大多数的查询只需往串行线路上发送一次。一个只缓冲服务器的

named.boot文件看上去象这样:

; named.boot file for caching-only server

directory /var/named

primary 0.0.127.in-addr.arpa db.127.0.0 ; loopback net

cache . db.cache ; root servers

除了这个name.boot文件,你也还需要设置db.cache文件,其中含有有效根名字服务器的一张

列表。这些在解析器的配置一章中的最后讨论。

7.2 SLIP操作

拨号(上网)IP服务器通常使用特殊的用户帐号提供SLIP服务。在登陆进这样一个帐号以后

,你不会进入普通的shell程序;而是执行一个程序或shell脚本,激活串行线路的服务器SL

IP驱动程序并且配置适当的网络接口。然后你需要在链接的你这端做同样的工作。

在某些操作系统上,SLIP驱动程序是用户空间程序;在Linux下,它是内核的一部分,这使得

它更快一些。然而,这需要将串行线路明确地转换成SLIP模式。这是通过特殊的tty线路规程

,SLIPDISC,来做到的。当tty为普通线路规程(DISCO)时,它将使用普通的read(2)和wri

te(2)调用只与用户进程交换数据,而SLIP驱动程序不能从tty读取或写进数据。在SLIPDISC

规程里,规则正好相反:现在任何用户空间进程从tty的读取和写入被阻止,此时,从串行端

口来的所有数据将被直接地传递到SLIP驱动程序。

SLIP驱动程序本身可以识别SLIP协议的多种变化。除了普通的SLIP,它也能理解CSLIP,这在

输出的IP包上执行所谓的Van Jacobson头压缩。[1] 这显著地改进了交互式会话的吞吐量。

另外,对于这些协议的每一种有六比特的版本。

将串行线路转换为SLIP模式的一种简单方法是通过使用slattach工具。假设你的modem连在/

dev/cua3上,并且成功地登录上SLIP服务器。然后执行:

# slattach /dev/cua3 &

这将cua3的线路规程转换成SLIPDISC,并把它连接到SLIP网络接口之一。如果这是你的第一

次激活的SLIP链接,该线路将连至sl0;第二个将连至sl1,以此类推。目前的内核同时支持

多达八个SLIP链接。

Slattach所选择的缺省的压缩封装是CSLIP。你可以使用-p开关来选择任何其它的模式。要使

用常规的SLIP(无压缩的),可以使用

# slattach -p slip /dev/cua3 &

其它的模式有cslip、slip6、cslip6(SLIP的六比特版本)、以及适应性SLIP(adaptive S

LIP)的adaptive。后者让内核找出远端所用的是那一种SLIP压缩封装类型。

注意,你必须使用与你的对等点同样的压缩封装。例如,如果cowslip使用CSLIP,你也必须

使用它。如果选择不匹配,那么将会出现ping到远程主机将收不到任何返回信息包的现象。

如果其它的主机ping你,那么在你的控制台上也会出现象“不能建立ICMP头”(“Can’t b

uild ICMP header”)的信息。避免这些问题的一种方法是使用适应性SLIP。

实际上,slattach并不仅仅允许你使能SLIP,同样也可以激活串行线路的其它协议,如PPP或

KISS(另一个由无线电爱好者使用的协议)。详细信息,请参考slattach(8)再线手册。

在将线路转至SLIP驱动程序以后,你必须配置这个网络接口。再一次,我们使用标准的ifco

nfig和route命令来做这个配置。假设从vlager,我们拨号到一个名为cowslip的服务器。那

么你要执行

#ifconfig sl0 vlager pointopoint cowslip

# route add cowslip

# route add default gw cowslip

第一个命令将接口配置成到cowslip的点对点链接,而第二、第三个命令增加到cowslip的路

由以及使用cowslip作为一个缺省的网关。

当拆卸一个SLIP链接时,你首先必须使用带del选项的route命令移去所有通过cowslip的路由

,将接口关闭,并向slattch发送一个hangup信号。然后,你必须再次使用你的终端程序挂断

modem:

# route del default

# route del cowslip

# ifconfig sl0 down

# kill -HUP 516

7.3 使用dip

现在来看,上面讲的是非常简单的。然而,你也许想使上面的步骤自动地执行,这样你就可

以只调用一个简单的命令来执行上面给出的所有步骤了。这也就是dip所要做的。[2] 在写作

这本手册时它的当前发行版本是3.3.7。它已被许多人大大地修改过了,所以它已不再是原来

的dip程序了。这些不同的开发变化有希望在今后的版本中合并。

Dip为简单的脚本语言提供了一个解释器,它能为你处理modem,将线路转变为SLIP模式,并

配置接口。这是非常基本的和有局限性的,但对于大多数情况已足够有效了。某天一个新的

dip版本将能适用于更为广泛的语言。

为了配置SLIP接口,dip需要root权限。现在可以临时使用dip将uid置为root,因此所有的用

户能够拨号到某个SLIP服务器而不需要给这些用户root权限。这是非常危险的,因为用dip设

置假的接口和默认路由可能会严重地破坏网络的路由。更糟的是,这将给你的用户连接到任

何SLIP服务器的能力,并在你的网络上带来危险的攻击。所以如果你想允许你的用户建立一

个SLIP连接,就为每个期望的SLIP服务器写一个小的包装程序,并且让这些包装程序调用包

括建立连接用的特定脚本的dip。那么,这些程序就可以安全地置成root的uid。[3]

7.3.1 一个简单的脚本程序

图7.1列出了一个简单的脚本程序。通过用脚本程序的名字作为参数调用dip,它可以用于连

接cowslip:

# dip cowslip.dip

DIP: Dialup IP Protocol Driver version 3.3.7 (12/13/93)

Written by Fred N. van Kempen, MicroWalt Corporation.

connected to cowslip.moo.com with addr 193.174.7.129

#

当激活了SLIP并连接到cowslip以后,dip将从终端上脱开并运行于后台。此时你就可以在SL

IP连接上使用通常的网络服务了。要想终止连接,只需用-k选项调用dip。这使用/etc/dip.

pid [4]中记录的进程id dip给dip进程发送了一个挂断信号:

# kill ?k

在dip的脚本语言中,前加美元符号的关键字表示变量名。Dip有一个预定义的变量集,将在

下面列出。例如,$remote和$local含有与SLIP连接有关的本地以及远程主机的主机名。

# Sample dip script for dialing up cowslip

# Set local and remote name and address

get $local vlager

get $remote cowslip

port cua3 # choose a serial port

speed 38400 # set speed to max

modem HAYES # set modem type

reset # reset modem and tty

flush # flush out modem response

# Prepare for dialing.

send ATQ0V1E1X1\r

wait OK 2

if $errlvl != 0 goto error

dial 41988

if $errlvl != 0 goto error

wait CONNECT 60

if $errlvl != 0 goto error

# Okay, we"re connected now

sleep 3

send \r\n\r\n

wait ogin: 10

if $errlvl != 0 goto error

send Svlager\n

wait ssword: 5

if $errlvl != 0 goto error

send hey-jude\n

wait running 30

if $errlvl != 0 goto error

# We have logged in, and the remote side is firing up SLIP.

print Connected to $remote with address $rmtip

default # Make this link our default route

mode SLIP # We go to SLIP mode, too

# fall through in case of error

error:

print SLIP to $remote failed.

图7.1 一个dip脚本样本

样本脚本程序中的头两句是get命令,这是dip设置变量的方法。这里,本地和远程主机名分

别设置成了vlager和cowslip。

接下来的五句用来设置终端线路和modem。Reset向modem发送了一个复位串;对于Hayes兼容

的modem,这是个ATZ命令。下一个语句刷出modem的响应,以使得接下来的几行中的登录会话

能够正常的工作。这个对话是非常直观的:它简单地拨出cowslip的号码41988,并且使用口

令hey-jude登录进Svlager帐号

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航