快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

Linux网络管理员手册(7)


  第七章 串行线路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帐号
顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论