发信人: Steely_Fighter@bbs.ustc.edu.cn (麻烦大了), 信区: cnlinux
标  题: Linux NET HowTo (中文版) (3)
发信站: 中国科大BBS站 (Mon Apr 21 13:44:01 1997)
转信站: Lilac!ustcnews!ustcnews!ustcbbs



  11.1.1.  为何我要使用 PPP 代替 SLIP ?

        使用 PPP 代替 SLIP 通常的原因有:

           提供你连 Internet 的设备只支援 PPP
              你会使用 PPP 而不使用 SLIP 最明显的原因 , 主要在于提供连
              线的单位仅提供 PPP, 而没有 SLIP。 Ok, I said it is obvious.

           你有一个「饱受摧残」的 serial line
              PPP 对每个传输的 frame 都会做 frame check, SLIP 不会。
              如果你的线路容易受干扰,而且你使用 SLIP, error correction
              将会在连线两端(自己的机器与目的机器, end to end)来做, 而
              PPP 却在自己的一端做 error  detection , 在你的机器与 PPP
              server。这样允许快速的修复 errors。

           你需要用到 PPP 提供的其他功能
              PPP 提供许多需 SLIP 不提供的功能。
              例如在同一条 serial link, 你可能不只要传 IP, 也同时要传
              DECNET 或 AppleTalk 的封包, PPP 允许你做这样的事情。


  11.1.2.  何处可取得 PPP 软体 ?

        ppp 软体可在下列节点取得:

        sunsite.unc.edu

             /pub/Linux/system/Networking/serial/ppp-2.1.2a.tar.gz

        这个档案包含  kernel  source, 及  pppd  source  及  binary  。
        Version 1.0.0 可与 kernels 1.0.x and 1.1.x. 配合使用。现在并不
        支援 Fred's Net-2E 的 kernel 。


  11.1.3.  安装 PPP 软体

        PPP 的安装是很直接的。( <---唉...我竟然在翻译废话 )


  11.1.3.1.  The kernel driver.

        有些支援 ppp 的部份已经建入 kernel 了。 设定 kernel 是很简单的
        啦, 以下步骤绝对 OK! 不会随便当给你看...

             # cd /usr/src
             # gzip -dc ppp-2.1.2a.tar.gz | tar xvf -
             # cp /usr/src/ppp-2.1.2a/linux/ppp.c /usr/src/linux/drivers/net
             # cp /usr/src/ppp-2.1.2a/pppd/ppp.h /usr/src/linux/include/linux

        你将需要把 CONFIG_PPP define 上来, 在 /usr/src/linux/config.in
        中。如果你正在跑的 kernel 是 1.1.4+ 的, 那拟就还要把 NET02D 标
        为注解!!!在 /usr/src/linux/drivers/net/ppp.c  中, 如果你跑的是
        最新的版本,好胆你就卖踩小伊。

        然后你可以  make  config,  选择  PPP  support,  然后再下  make
        dep;make.打个蛋花就好啦!

        当你 reboot 新 kernel 时, 你会在画面上看到类似下列讯息:

             PPP: version 2.1.1 (4 channels)
             TCP compression code copyright 1989 Regents of the University of California
             PPP line discipline registered.

        现在呢, 来看看 /proc/net/dev 的内容, 看起来似乎是这锅样子地...

       Inter-|   Receive                  |  Transmit
        face |packets errs drop fifo frame|packets errs drop fifo colls carrier
           lo:      0    0    0    0    0        0    0    0    0     0    0
         ppp0:      0    0    0    0    0        0    0    0    0     0    0
         ppp1:      0    0    0    0    0        0    0    0    0     0    0
         ppp2:      0    0    0    0    0        0    0    0    0     0    0
         ppp3:      0    0    0    0    0        0    0    0    0     0    0

        能看到这些东西就是说你不必再重头来过啦... 唉... 累啊...


  11.1.3.2.  pppd

        如果你要重新  compile pppd, 在 pppd Install 的子目录中打 make,
        在 compile lcp.c, upap.c, 及 chap.c 时会有警告发生  (warning),
        不过没关系的。

        如果你要 recompile chat, 现了解 chat 目录中的 README.linux.

        Install 时, 在 chat 及 pppd 目录中打 make install, 将会把 chat
        及 pppd 的二进位档放到  /usr/etc 中, pppd.8 的 man page 会放在
        /usr/man/man0 。

        pppd 需要用 root 来执行。 你可以用 suid 到 root 或直接以  root
        的身分来执行。  make install 时会尝试 suid 到 root, 所以如果你
        已是 root , 那应该没问题。


  11.1.4.  设定并使用 PPP 软体

        就像 slip, 你可把 PPP 设定成 server 端或 client  端, chat 的功
        能跟 dip 很类似。 会自动的拨号及  login 到远端的机器中有一点跟
        dip 不像的地方, 他不会执行  ioctl  把 serial  line 转换成  PPP
        line  。 这个动作会由  pppd 来执行, pppd  可以当作  client  或

        server 来跑。当作 client 时, 它会呼叫 chat 来建立连线及 login,
        然后它执行 ioctl 把连线转成 ppp, 而后让你使用。

        请参考 pppd 及 chat 的 man pages 查看更详尽的内容。 也顺便看看
        PPP 软体中所附的 README 档。它会介绍一些执行档如何运作, 比我在
        这口沫横飞所讲得还多。

  11.1.4.1.  Configuring a PPP client by dial-up modem.

        这可能是大部分人想做的事, 所以先讲。你会使用到这个设定, 当你透
        过 dialup modem 连上有支援  ppp 的网路。 当你要建立你的连线时,
        你只要启动 pppd 程式, 并加上必要的参数。

        以下的例子可能起初看起来会搞不清楚况, 但是你若把  ' ' 内的那段
        文字看成是 pppd 的第二个参数, 把 " " 内的文字看成是, chat 的参
        数, 那就容易得多了。

        pppd connect 'chat -v "" ATDT5551212 CONNECT "" ogin: ppp word: password'\
             /dev/cua1 38400 debug crtscts modem defaultroute 192.1.1.17:

        这一行是在说:

        o  用以下这一行来呼叫 chat:

             chat -v "" ATDT5551212 CONNECT "" ogin: ppp word: password

        那就是说: 拨 5551212, 等待 `CONNECT' 字串送初一个  CR(carriage
        return), 等待 `ogin:', 送出 `ppp'  字串, 等待 `word'  然后送出
        `password', 然后跳出。

        o  使用 serial device /dev/cua1

        o  设定速度到 38400 bps.

        o  debug 代表 log(动词) status messages 到 syslog

        o  crtscts 表示对 modem 使用 hardware handshaking  - 强烈建议。.

        o  modem 表示 pppd 将会在拨号前后, 尝试挂断(hang up)。

        o  defaultroute 会指示 pppd 增加一个产生 default route 的 routing
           entry。大部分的状况下将会是你要的。

        o  192.1.1.17: 表示把 ppp interfaces address 设成 192.1.1.17。
           这个参数正常的时候, 看来应该像: x.x.x.x:y.y.y.y , x.x.x.x 是
           你的 IP address, y.y.y.y 是 server 的 IP address, 如果你省略
           server 端的 IP address, pppd 将会 ask for it, x.x.x.x 将会被
           设成你的 ip address.

        请参考 pppd 及 chat 的 man pages.......
        (这一段请参考 11.1.4 最后一段)


  11.1.4.2.  以专线(leased line) 来设定 PP client

        以专线 (leaseed  line) 来设定 PPP client 跟用 slattach  来设定
        slip 来得更直接。你还是会用到 pppd, 但是因为你不需要建立 modem
        的连线, 所以会较减单。

        例如: 我在此假设  ppp server 不用特别的 login procedure.我这样
        做是因为每次的 login 都会不一样。如果你只跑区域的连线,你可能要
        这样设定:

        pppd connect 'echo connecting...' defaultroute noipdefault debug \
              kdebug 2 /dev/cua0 9600

        上一行会在萤幕上秀出讯息,  并设定  ppp  interface  的  default
        route  "noipdefault"  这个参数会叫  pppd 从 server  端取得这个
        device 的 address, 除错的讯息会送到 syslog 中。  "kdebug 2" 这
        个参数会把除错讯息设成 level 2, 这样做会给你更多的资讯来了解到
        底出了什么状况。它会使用到 /dev/cua0 (9600bps 的速率 ) 。

        如果你的 ppp server 不需要 login procedure  之类的东西, 在这个
        例子中, 你可以使用 chat 。

        请参考 pppd 及 chat 的 man pages.......
        (这一段请参考 11.1.4 最后一段)

  11.1.4.3.  Configuring a PPP server.

        设定 PPP server 的程序跟架个 slip server 类似。 你可以开个特别
        的  `ppp'  帐号, 这个帐号使用一个可执行的  script来当作  login
        shell 。 /etc/passwd 档中的该行看起来像这样:

             ppp:EncPasswd:102:50:PPP client login:/tmp:/etc/ppp/ppplogin

        那锅 /etc/ppp/ppplogin shell script 看起来向这锅样子:

             #!/bin/sh
             exec /usr/etc/pppd passive :192.1.2.23

        你提供的 address 将是呼叫的机器会被 assign 的。

        当然,  如果你要允许许多   user   同时  access,  你必须开许多的
        startup scripts 及各人的 accounts, 因为你只能在一个  script 中
        使用一个 IP address 。


  11.1.5.  哪儿可以取得更详尽的 PPP 或 bug 报告 的资讯呢 ?

        大部分linux PPP 的讨论都在 PPP mailing list 上面。

        若想要加入mail list server 中的 PPP channel, send mail 到:

             linux-activists@niksula.hut.fi

             with the line:

             X-Mn-Admin: join PPP

             at the top of the message body (not the subject line).

        记得若是你要报告  bug 或问题上去, 你应该尽可能地详细描述你的问
        题那会帮助你了解你的问题, 也使别人能更清楚地了解你的问题。

        你也可以查查:

        RFCS 1548, 1331, 1332, 1333, and 1334. 这些是 PPP 定义的文件。

        W.   Richard  Stevens  也在  `TCP/IP  Illustrated  Volume  1',
        (Addison- Wessley, 1994, ISBN 0-201-63346-9) 一书中讨论到 PPP.


  11.2.  把 Linux 设定成 Slip Server

        如果你有一台连网路的机器, 你可能会想要提供一些像  dial in 的网
        路服务, 那拟就需要把你的机器设成一个 server, 如果你要使用 slip
        当作 serial  line protcocol, 那你有两条路可以走...我会两个都说
        明。


  11.2.1.  Slip Server using sliplogin

        sliplogin 是一个程式, 可用来代替一般  slip user 的 login shell
        会将 terminal line 转成 slip line 。  caller 会 login 成标准的
        login  process, 输入  username  及  password, 在  login  之后,
        sliplogin  会被执行, 去找 /etc/slip.hosts  查询跟 caller match
        的 entry, 而不跑 shell 。 如果它 locate 成功一个 login, 它就把
        连线设成 8bit 的线, 并使用 ioctl call 把连线转成 slip 。当这个
        process 完成之后, 最后一个步骤就完成了。 这时 sliplogin 会呼叫
        一个 shell script, 把设定  slip interface  相关的  ip address,
        netmask    及适合的    routing   。   这个   script   通常叫做
        /etc/slip.login,  但是跟  getty  的相同的规则。 如果你有特定的
        caller 要求使用特别的 initialisation, 你可以写个设定的  script
        叫做 /etc/slip.login.loginnmae, 会取代内定的 script 。


  11.2.1.1.  何处取得 sliplogin

        sliplogin 可在下列节点取得:

        sunsite.unc.edu

             /pub/Linux/system/Network/serial/sliplogin.tar.gz

        tar 档中同时包括  source code, precompiled binary, 及 man page
        。 把它 (binary) 给 install 到 /sbin 目录中, man page 就给他灌
        到 section 8, 做看看:

             # cd /usr/src
             # gzip -dc .../sliplogin.tar.gz | tar xvf -
             # cd src
             # make install

        如果你要重新  compile  出 binaries, 在 make install 之前, 下个
        make clean 指令, 如果你要安装  binary 到其他的所在, 那你就要修
        改 Makefile 内的规则罗...


  11.2.1.2.  设定 slip host 的 /etc/passwd

        你需要在 /etc/passwd 中为 caller 开一些特别的 login user 。 依
        照惯例, 我们将使用 calling host 的 hostname 当作 login name,前
        面再加个大写的  S, 所以, 例如: 如果 calling host 叫做 radio,那
        你可在 /etc/passwd 中开个 login name:

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

        备注:  caller  不需要任何的   home  directory,  因为它们不会跑
        shell.所以 /tmp 是个不错的选择。 也要注意 sliplogin 是使用来代
        替一般的 login shell 。


  11.2.1.3.  设定 /etc/slip.hosts

        /etc/slip.hosts 是用来给 sliplogin 找寻相对应的 login name, 以
        取得 caller 的设定内容。 它也是你指定  caller 的 ip address 及
        netmask 的地方, 一个简单的 user name 为 `radio' 的例子如下:

             Sradio    `hostname`    radio    <netmask>    <opt1>    <opt2>

        /etc/slip.hosts 的内容为:

        1. caller 的 login name

        2. server 的 ip address, 也就是本身这一台。

        3. 设定给 caller 的 ip address

        4. the netmask assigned to the calling machine in hexadecimal notation
           eg 0xffffff00 for a Class C network mask.

        5. optional parameters to enable/disable compression and other
           features.

        备注: 你可以在第二栏及第三栏使用 hostnames 或 IP addresses, 如
              果你使用  hostnames  那这些  host  就必须要先翻译成   ip
              address,也就是说, 你的机器必须对这些机器做 ip address 的
              定址 ( <- 很玄吗? ), 不然 script 被呼叫后会失败。 你可以
              先    telnet    到那台主机看看,    如果你看到    `Trying
              nnn.nnn.nnn...'  的讯息,  那你的机器就可找到相对应的  ip
              address, 如果你看到的是 `Unknown host', 那表示无法找到该
              台主机, 如果不行, 直接用 ip address来连。或修改 resolver
              的设定 ( 通常是 /etc/resolv.conf) 。

        opt1 opt2 最普通的参数是:

           normal
              启动(enable) normal uncompressed slip.

           compress
              启动(enable) van Jacobsen header compression (cslip)

        当然, 这些是互斥的 (mutually exclusive)( 有一就不能有二  ), 你
        只能使用其中的一种, 其他参数请看 man page.


  11.2.1.4.  设定 /etc/slip.login 档

        在 sliplogin 搜寻 /etc/slip.hosts 档, 并且在找到之后, 它会去执
        行 /etc/slip.login  档, 用 ip address  及 netmask  来设定 slip
        interface 。

        使用 sliplogin package 的 /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     7-n
        #   slipunit ttyspeed loginname local-addr remote-addr mask opt-args
        #
        /sbin/ifconfig $1 $4 pointopoint $5 mtu 1500 -trailers up
        /sbin/route add $5
        exit 0

        要注意这个  script 只使用  ifconfig  及 route 指令来设定  slip
        device 。 ( 设定: ip address, remote, ip address and netmask),
        透过 slip device 为 remote address 开一个 route 。就跟你喜欢如
        果你使用 slattach指令。


  11.2.1.5.  Configuring the /etc/slip.logout file.

        当一个 connect close 后, 你要确定 serial device 回复原来的状态
        。以使未来的使用者能正确的 login, 这要使用 /etc/slip.logout 档
        来达成, 很简单的啦, script sample 如下:

             #!/bin/sh -
             #
             #               slip.logout
             #
             /sbin/ifconfig $1 down
             /sbin/route del $5
             exit 0

        它所做的是把 interface `down' 下并删除先前开设的 route。


  11.2.2.  使用 dip 的 Slip Server

        现在我所要讲的, 有一部份来自  dip 的 man page, man page 内已经
        包含了简要的设定。

        设定  Linux  成  slip  server,  你需要为使用者开设特别的  slip
        accounts,在 slave  mode 的 dip 被当作  user  account  的 login
        shell 。

        Fred  建议使用惯例,  在  account  前面加上大写  S,  他的  slip
        accounts以 `S' 开头, 如: `Sfredm' 。

        因为 login 程式不接受 login shell 的参数, 所以你要写个小的程式:

        /* dip-i.c - from a mail message of Karl kkeyte@esoc.bitnet */
        int main()
        {
           execlp("dip", "dip", "-i", (char *) 0);
        }

        请用 gcc -O dip-i.c -o dip-i 来编译(compile)。
        设定 permissions 为 555. 我建议把他叫做 /usr/bin/dip-i,
        /etc/passwd 档内给 slip user 看起来像这个样子:

             Sfredm:ij/SMxiTlGVCo:1004:10:UUNET:/tmp:/usr/bin/dip-i
             ^^         ^^        ^^  ^^   ^^    ^^   ^^
             |          |         |   |    |     |    \__ 要执行的 shell program
             |          |         |   |    |     |         dip -i as login shell
             |          |         |   |    |     \_______ Home directory
             |          |         |   |    \_____________ User 全名
             |          |         |   \__________________ User Group ID
             |          |         \______________________ User ID
             |          \________________________________ 加密后的密码
             \___________________________________________ Slip User Login Name
                                                          (大写 S 开头)

        在 user log in 之后, 如果确认 user 正确的话, login(1) 这个程式
        会执行  shell dip-i, 而 dip-i 会执行  dip -i, 之后, dip 会扫描
        /etc/net/diphosts  档, 找寻 login  user name, 因此, 每个  slip
        user 比需都要在 /etc/net/diphosts 中有一行。

        你要重新读 9.3 `Proxy Arp' 哪一节, 重新为 slip user 安排 proxy
        arp, 如果你要让他们使用到 slip server 所连到的网路的话。


  11.2.2.1.  Configuring /etc/net/diphosts

        dip 会使用到 /etc/net/diphosts  来查询远端主机现在的设定, 远端
        主机可能是拨进你的 linux 主机的 user, 或是你拨进去的主机。

        /etc/net/diphosts 的一般格式如下:

        Suwalt::145.71.34.1:SLIP uwalt:CSLIP,1006
         ^    ^  ^            ^         ^     ^
         |    |  |            |         |     \___ MTU
         |    |  |            |         \_________ protocol (SLIP, CSLIP,
         |    |  |            |                    KISS)
         |    |  |            \___________________ 注解栏
         |    |  \________________________________ 对方的 IP address
         |    |                                     或 host.domain.name
         |    \___________________________________ unused (compat. with passwd)
         \________________________________________ login name (as returned by
                                                   getpwuid(getuid()))

        /etc/net/diphosts 中的一个例子:

             Sfredm::145.71.34.1:SLIP uwalt:SLIP,296

        以上是说以 296 MTU 建立 slip 的连线。

             Sfredm::145.71.34.1:SLIP uwalt:CSLIP,1006

        以上指定 以 1006 MTU 建立 cslip 的连线。

        当一个  user  logs  in 的时候, 他们会觉得像是平常的  login  及
        password 的提示, 不过他们要输入他们的 slip-login userid 及密码
        ,如果通过检查, user 不会看到特别的讯息, 他们要在自己的一端切换
        成 slip 的模式, 之后, 就连线成功啦, 系统会在 diphosts 档案中设
        定。


  11.3.  使用 Automounter Daemon - AMD.

        这个部份由  Mitch DSouza 来供应, 我已经用最少的修改包含进来,感
        谢 Mitch.

  11.3.1.  什么是 automounter, 为何我要使用这种东西咧 ?

        automounter 提供一个方便的随需要 (ie. 当有要求时 ) 才 mount FS
        的工具。这将会同时减少 server 端及 client 端的负载, 且提供一个
        更具据弹性的处理, 甚至在没有 NFS mount 上来的时候。

{?}     它也提供一个过多的机制(redundency mechanism) 凭什么一个 mount
        point 会自动地切换到 第二个 server 要是 主要的 server 无法读取
        时。
        { It also offers a redundancy mechanism whereby a mount
          point will automatically switch to a secondary server
          should a primary one be unavailable.
        }

        一个更有用的  mount 叫做 union mount 赋予 automounter 合并多个
        目录到单一的目录中的能力, 这份文件必须完全读透以便完全使用延伸
        的功能。

        有几点要跟您好好地建议建议的: (没有特别的顺序)

        o  amd maps 与 Sun maps 并不相容, 也不与  HP maps ad infintum.
           不过这点在此素这锅样煮的: amd  可以免费获得, 而且与所有以上
           提到的系统相容, 这让你可以 share maps 如果 amd 在网路上到处
           安装的话, Mitch 把他拿来跟 Linux/Dec/NeXt/Sun  机器混和使用
           。

        o  Sun  automount  maps  可以使用在   contrib  directory  中的
           automount2amd.pl perl script 转成 amd 形式的 maps 。

        o  在执行 amd 之前要先跑 portmapper。

        o  UFS mounts 不会 timeout.

        o  UFS mounts, 仅能使用于 Linux, 已经可以延伸处理所有的 natice
           FS ( 如: minix, ext, ext2, xiafs...) 内定是 minix. 没有文件
           说明的特色可加像以下的选项:

              ..., opts:=type=msdos,conv=auto

        o  不要 mount 已经存在的目录除非你使用一个直接 automount 选项,
           不然,  他会把你的  disk  mount  在  /home  下, 当有些  user
           diectory是 /home/fred 时。

        o  总是开启  full logging,( 加 `-x all' 参数到 amd) 如果你有任
           何困扰查察下列命令是什么:

             % amq -ms

           reports, 当他发生问题时它将会只出问题。

        o  GNU getopt() 有时对自己很聪明, 可在 非选项前加 '--', 例如:

             # /etc/amd -x all -l syslog -a /amd -- /net /etc/amd.net


  11.3.2.  何处取得 AMD(AutoMounter Daemon)

        amd 可在下列节点取得:

        sunsite.unc.edu

             /pub/Linux/system/Misc/mount/amd920824upl67.tar.gz

        这包含可执行的 binaries, 完整的 sources 及 texinfo 格式的文件。


  11.3.3.  一个设定 AMD 的例子

        你不可以从 /etc/fstab 档案来设定 AMD, 你将已经使用了来包含资讯
        关于档案系统, 而使用 command line 启动方式。

        使用 /etc/fstab 来 mount 两个 nfs FS, 你可能会使用两个类似以下
        两个 entries:

             server-1:/export/disk  /nfs/server-1  nfs  defaults
             server-2:/export/disk  /nfs/server-2  nfs  defaults

        i.e. 你会把 server-1 and server-2 的目录 mount 到你的机器上的
             /nfs/server-1 及 /nfs/server-2 目录。

        在把它标为注解之后, 或从 /etc/fstab 中删除以上的两行那你只能用
        以下语法来达到相同的工作:

             /etc/amd -x all -l syslog -a /amd -- /nfs /etc/amd.server
             |      | |    | |       | |     |  | |  | |             |
             |      | |    | |       | |     |  | |  | |             |
             `------' `----' `-------' `-----' -' `--' `-------------'
              |        |      |         |      |   |    |
              (1)      (2)    (3)       (4)    (5) (6)  (7)

        参数说明:

        1. The full  amd binary  path  (obviously  optional)  端看你的
           $PATH 环境变数如何设定, 所以只有 `amd' 可以在此被指定。

        2. `-x all' 会开启 full loggon. 请读读其他 login level 的文件。

        3. `-l syslog' 会透过 syslogd 来记录讯息, 也可把它输出到一个档
           案, dump 出来, 或 pass 过去, 到没被使用到的  tty console.这
           个 syslog 可以改为一个档名, i.e.  `-l foo' 将会把讯息转到一
           个叫做 foo 的档案。

        4. `-a /amd' 使用 /amd 目录作为暂时的  automount point这个目录
           会自动地被 amd 开出, 也应该会在开始 amd 之前砍掉。  (amd 放
           在 rc 中 )

        5. `--' 表示告诉 getopt() 停止处理 (parse) 其他的 command line
           参数, 这对直接在 command line 下 `type:=' 参数特别有用。 不
           然 getopt() 会不正确地将他解码。

        6. `/nfs' 是真的 nfs mount point. 这也会自动开出此目录, 且不应
           该在其下再包含有子目录, 除非使用 `type:=direct' 参数。

        7. amd map (也就是 一个档案) 叫做 `amd.server' 包含以下这些行:


        # /etc/amd.server
        /defaults    opts:=rw;type:=nfs
        server-1     rhost:=server-1;rfs:=/export/disk
        server-2     rhost:=server-2;rfs:=/export/disk

        一旦启动而且成功地跑起来, 你可以用下列命令查询 mount 的状况:

             % amq -ms

        如果你用:

             % ls /nfs

        应该看不到任何档案。 不过以下的命令:

             % ls /nfs/server-1

        将会自动地 mount `server-1' 那台 host 。挖咧靠邀! amd 跑起来了
        ! (voila! amd is running.)在内定的  timeout 到期后, 这会自动地
        unmount 下来。 你的 /etc/password 档 ( 译注一 ) 可能包含下列的
        项目:

        ...
            linus:EncPass:10:0:God:/nfs/server-1/home/linus:/bin/sh
            mitch:EncPass:20:10:Mitch DSouza:/nfs/server-1/home/mitch:/bin/tcsh
            matt:EncPass:20:10:Matt Welsh:/nfs/server-1/home/matt:/bin/csh

        意思就是说当   Linus,  Matt,  or  Mitch  login   进来时,  home
        directory将会跑到特定的 remote 目录中, 而在 user logout 的时候
        会自动地 unmount 下来。

        译注一: 应该是 /etc/passwd 吧, 或许有些系统不一样 ?


  11.4.  把 Linux 当作一个 router

        把 linux 档做 router  是没问题的啦! 你跑个像  gated 的 routing
        daemon  就可以啦,  如果你只有简单的  routing  要求只要用  hard
        coded routes 就可以啦。 如果你使用的是较新的版本 (1.1.*), 那你
        应该要确定在 make kernel 的时候, 你有回 'y':

        IP forwarding/gatewaying (CONFIG_IP_FORWARD) [y] y

        Olaf  Kirch's  Network  Administrators   Guide  讨论网路设计及
        routing项目,   你可以读看看,   有更多的资料,  参考书目在文件的
        "Releated Documentation" 那一节。


  12.  实验中及发展中的 modules

        现在有许多人为 linux 网路程式码在发展新的特色及 modules 。之中
        有些还很先进, 这些也是我想要包含到这节的, 直到变成标准版程式码
        。他们将会被往前搬移。


  12.1.  AX.25 - 业馀无线电玩家的通讯协定

        AX.25 protocol 是用在全球业馀无线电玩家。 它同时提供 connected
        及 connectionless 的运作模式, 并且可使用来做点对点的连线, 或用
        来运送 TCP/IP 的封包。

        这跟 X.25 level 2 在结构上很类似。更可延伸到业馀无线电环境, 使
        它更有用。

        Alan Cox 也发展了一些以 AX.25 软体为基础的 kernel, 支援 linux,
        这些也可在  ALPHA form 取得, Alan's code 支援 KISS based TNC's
        (Terminal Node Controllers), 及 the Z8530 SCC driver.

        User programs 包含一个 P.M.S.  (Personal Message System), 一个
        信号灯机构  (facility), 一个  line  mode  connect  program, 及
        `listen'如何去撷取所有在 RAW 界面层的 AX.25 封包例子

        确定要去读 /usr/local/ax25/README 这个档, 内容包含更多、更完整
        的资讯。


  12.1.1.  何处取得 AX.25 软体。

        ftp 至:

        sunacm.swan.ac.uk

             /pub/misc/Linux/Radio/*

        你会发现有许多的目录,    每个包含不同版本的程式码,    因为它与
        kernel code 相互的关系很密切, 所以你要选择一个与你的 kernel 较
        适合的版本,互相的对应大概是这样:

        AX25007                 Prehistoric
        AX25010                 Obsolete
        AX25012                 for release 1.0.* kernels and higher
        AX25016                 for release 1.1.5 kernels
        AX25017                 for release 1.1.6 kernels
        AX25018
        AX25021
        AX25022                 for release 1.1.28 kernels

        每个目录中你会发现只少两个档案, 一个叫做 krnl022.tgz 之类的,另
        一个叫做  user022.tgz  。 这些是 kernel 软体, 及相对应的  user
        program.


  12.1.2.  安装 AX.25 软体

        这讨软体包含两大部分, kernel drivers, 及 user programs.


  12.1.2.1.  The kernel drivers.

        安装 kernel drivers, 请打:

             # cd /usr/src
             # gzip -dc krnl022.tgz | tar xvf -

        有需要也可   uncomment(  定义上去  )  /usr/src/linux/config.in
        CONFIG_AX25 这个 define 。

        然后:

             # cd /usr/src/linux
             # make config
             # make dep;make

        备注: 如果你应该包含 AX.25 support, 在 make config 被问到的时候,
              记得回 `yes', 如果你要 AX.25 code 支援 KISS TNC, 也要回 'yes'


  12.1.2.2.  The user programs.

        安装 user programs 请下:

             # cd /
             # gzip -dc user022.tgz | tar xvvof -

        然后:

             # cd /usr/local/ax25/src
             # make install


  12.1.3.  设定及使用 AX.25 软体

        设定 AX.25 port 跟设定 slip device 很像。  AX.25 软体已被设计,
        用来在 kiss mode 下与 TNC 一起运作, 你需要事先设定  TNC 并连线
        。

        使用 axattach 就像在使用 slattach, 例如:

             # /usr/local/ax25/bin/axattach -s 4800 /dev/cua1 VK2KTJ &

        上面这一行会把你的  /dev/cua1 serial device 设定成 4800 bps 的
        kiss interface, 使用 hardware address VK2KTJ.

        你可以使用  ifconfig  来设定  ip address  and  netmask  就像对
        ethernet device 一样:

             # /sbin/ifconfig sl0 44.136.8.5
             # /sbin/ifconfig sl0 netmask 255.255.255.0
             # /sbin/ifconfig sl0 broadcast 44.136.8.255
             # /sbin/ifconfig sl0 arp mtu 257 up

        以下列命令来测试:

             /usr/local/ax25/bin/call VK2DAY via VK2RVT

        call program 是个 linemode  terminal  program  用来产生  ax.25
        call.以空白开头来表示命令列 ` ', `.' 来结束连线:

        你也需要设定一些项目, 例如: 使用的视窗。 这只需要修改一个档案,
        编辑  /usr/local/ax25/etc/ports  档, 这是一个  ascii  档, 每个
        AX.25  port  一行。  档案中必须要有这几行,  与你设定的   AX.25
        interface 一样的顺序。

        格式为:

        callsign baudrate window frequency

        在这个地方并没用到许多资讯, 它将会在以后的发展中被用到。

        我没机会亲自来  try 这个程式, 请参考在 /usr/local/ax25/man  的
        man page 及在 /usr/local/ax25 中的 README 档, 查询更多的资讯。


  12.2.  Z8530 SCC driver.

        Zilog Z8530  SCC 提供 Synchronous/Asynchronous, HDLC, NRZI编码
        及其他功能。 有许多的卡也使用 Z850 当作设计的基础。这个 driver
        已由 Joerg  Reuter, <dl1bke@melaten.ihf.rwth-aachen.de>,可在下
        列节点取得:

        ftp.ucsd.edu

             /hamradio/packet/tcpip/incoming/sccdrv-1.4a.dl1bke.tar.gz

        详情请看 README。


  12.3.  Ottawa PI/PI2 card driver.

        Ottawa PI card 是一个在 IBM PC 机器上, 以 Z8530 SCC 为基础的卡
        。  通常用在全球业馀无线电的工作者  (Amateur  Radio  operators
        worldwide).在它被无线电业馀者广泛的使用的同时,  他也能提供别的
        领域的服务这些领域需要 Z8530 的特性。

        它支援一个高速的半双工   (half   duplex)   port  (single   DMA
        channel),及一个慢速的全双工 (full duplex) port ( 小于 19.2kbps
        interrupt  driven) 。  PI2 是个较新版本的卡支援母版内建  radio
        modem, 并改善硬体设计。

        这张卡的 driver 已由 David Perry <dp@hydra.carleton.edu>  撰写
        完成。可在以下节点取得:

        hydra.carleton.ca

             /pub/hamradio/packet/tcpip/linux/pi2-0.5ALPHA.tgz

        详情请读 README 档。


  12.4.  NIS - Sun Network Information System.

        事实上有两个版本的 NIS 已经分散出来。首先有个使用标准的 libc的
        雏型版本, 不过 libc 要求在使用前先透过 ypbind 做一些对 servers
        的 binding 工作。 更乾净的版本趋向于 NIS+ 的撰写方式,叫做 NYS,
        由 Peter Eriksson, <pen@lysator.liu.se> 撰写, 可在以下节点取得
        :

        ftp.funet.fi

             /pub/OS/Linux/BETA/NYS/nys-0.26.tar.gz

        NIS 型态的 server 可在以下节取得点:

        ftp.funet.fi

             /pub/OS/Linux/BETA/NYS/ypserv-0.5.tar.gz

        确定那里没有更新的版本, 因为这个资讯现在可能已经有点儿旧了。

        这两个都功能强大, 而且与 Sun NIS information  servers 也相安无
        事,  如: passwd/hosts/group  等等。 也不要求对任意  server  的
        binding 。 事实上它们允许以指定提供 services 的 server, 并可以
        选择 yp/dns/file 选项来做指定 name/passwd/etc  的 resolution工
        作。

        这些都很容易设定起来  (set up), 而且强烈建议需要整合进大网路的
        client  机器。 明显地, 你的网路  daemons  及 clients  需要重新
        compile 来与 shared library libnsl.so 以便使用 YP 功能。这些都
        是很稀松平常的事, 所有网路  NYS package 的 clients  & daemon都
        compile 过了。

        如果你有更详细的 NIS 资讯, 请寄给我(给原作者, 不是译者哦)。


  12.5.  snmp agent.

        linux 有个实验的 snmp agent, 由 Erik Schoenfelder,
        <schoenfr@ibr.cs.tu-bs.de> 做系统转移。

        可在以细节点取得:
          ftp.ibr.cs.tu-bs.de

             /pub/local/cmu-snmp2.1.2l2.tar.gz

        请先读  cmu-snmp2.1.2l2.README, 因为它包含了你需要的资讯, 可以
        帮助你了解这个 packge 。

        这个 package 提供一个近似完全的 MIB-II variable set.  在现在的
        状况下, 你只能读这些变数, 不能设定它们。

        nstat.tar.gz  包含一个  /proc/net/snmp  输出的 formatter, 叫做
        nstat 。

        你需要跑新的  kernel 并对 kernel 做 patch, 详情请看明日各大报!
        啊! 不! 不! 请看 README 档。


  12.6.  Experimental ARCNet driver

        许多人在寻找  ARCNet 网路卡的 driver 。  ARCNet 只提供约 2Mbps
        的传输率, 但可提供比 10base2(thinnet)  LAN 更长的连线距离。 而
        ARCNet cards 也较便宜, 也因为这样许多公司用  ARCNet 取代别的网
        路卡。

        Avery Pennarun <apenwarr@tourism.807-city.on.ca>  已经撰写了一
        个 linux 的 ARCNet driver, 但是还在做 ALPHA 测试, 当然这中间还
        会有许多 error 也可能会造成 kernel 挂住...

        source code 及 kernel patch 可在以下节点取得:

        sunsite.unc.edu

             /pub/Linux/system/Network/drivers/arcnet-0.12.tar.gz

        备注: 为了简化 patching 的工作, 用 kernel version 1.1.51 因为
              driver 就是针对这个版本的来做 patch
              的, 不过也可在 1.1.45+ 来跑。

        有一些已知的虫虫, 你可以读 arcnet.c 档获得细节的说明。 Avery他
        现在需要人来帮他抓臭虫, 或还没发现的问题, 并 guage  在其他环境
        下跑的情形。 Avery 将会很高兴接受任何透过网路的报告, 或 e-mail
        到:
             <apenwarr@tourism.807-city.on.ca> 或 <Avery.Pennarun@NorLinK.Com>

        Avery 在 News 方面有问题, 所以透过任何 newsrroups 可能无法让他
        收到... Avery 不只想要知道你是否有问题, 也想知道你是否有试成功
        。


  12.7.  实验中的 Token Ring driver

        实验中的 Token Ring driver 由 Peter De Schrijver
        <stud11@cc4.kuleuven.ac.be>所发展, 最新的版本可在以下节点取得:

        sunsite.unc.edu

             /pub/Linux/Incoming/linux-1.1.44-TR.tar.gz


  12.8.  V.35 界面板(interface board)

        V.35 是一个 C.C.I.T.T. 的标准界面, 用来提供高速平衡的串列界面,
        可高达 2 Mbps 。 使用 differential  pair balanced transmission
        允许 V.35 界面支援较长的线, 与 V.24/RS232C  相类似, 但提供更高
        的传输率。

        Pete Kruckenberg  <kruckenb@sal.cs.utah.edu>  开了一家公司供应
        ISA  bus 机器的  V.35  界面硬体, 这家公司亦为这个卡开发  Linux
        driver, 也进入了 Beta 测试。 这个允许你直接用 leased line 连到
        Linux machine, 速度可达 48/56kbps synchronous  的同步的传输.这
        张卡支援多种 protocols 并允许速度达到 12 Mbps 。

        更多的资讯可在以下节点取得:

        ftp.std.com

             pub/sdl/n2

        不然你可以 mail 给 Dale Dhillon <sdl@world.std.com>


  12.9.  Slip 套餐软体

        Matthew Dillon, dillon@apollo.west.oic.com  已经将程式组合成一
        套处理  SLIP 连线 (incoming  & outgoing)  的 package, 一些这个
        S/W的特色会自动拨号, 自动重新拨号, 也会在单一的 serial port 上
        做 shifting.

        Matt 已经用  kernel 1.1.x 测试过程式码了, 但是他说程式码应该也
        要在 1.0.x 的 kernel 上跑没问题才可以。

        请到以下节点抓 S/W:
        ftp://ftp.west.oic.com
             /pub/linux/dillon_src/dslip203.tgz
        ftp://sunsite.unc.edu
             /pub/Linux/system/Network/serial/dslip203.tgz


  12.10.  tcpdump 工具程式

        Adam Caldwell <acaldwel@103mort2.cs.ohiou.edu>  已经将 tcpdump
        转至 linux. tcpdump 允许你追踪网路活动, 拦截流经你的机器的网路
        封包。这对侦测网路问题很有用。

        执行档或原始程式码都可取得, 3.0 版已经在 kernel 0.99.15, 1.0.8
        及 1.1.28 测试过。

        程式可在下列节点取得:

        ftp://103mort2.cs.ohiou.edu
             /linux/tcpdump-3.0-linux-src.tar.gz
        ftp://sunsite.unc.edu
             /pub/Linux/system/Network/tcpdump-3.0-linux-src.tar.gz


  13.  一些 FAQ 及简要的答案

        以下是一些常问的问题及答案


  13.1.  一般问题

           我只有一条对网路上一个机器的 dialin terminal access, 我可以
           使用当作网路连线 ?"

              当然可以,  看看  TERM,  TERM  允许你透过正常的  terminal
              session连上网路。 它需要修改一些网路应用软体。但是最普通
              的 binaries及 sources 已经可以取得。看看 TERM-HOWTO:

                      http://sunsite.unc.edu/mdw/HOWTO/Term-HOWTO.html

           我想架设自己的独立网路, 我的 addresses 要怎么设定 ?

              RFC1597 已经指定一些 IP addresses 给私人的网路。你应该使
              用这些位址以免产生一些不必要的困扰,     如果你决定要连上
              Internet. 以下 addresses 保留做特殊用途:

                10.0.0.0        -   10.255.255.255
                172.16.0.0      -   172.31.255.255
                192.168.0.0     -   192.168.255.255

           备注:保留的网路位址 addresses 是 classes A, B and C, 所以你
                自己的网路并不会受到设计或 size 的限制。既然你不打算连
                上 Internet, 那你根本不需要担心设定与其他 Internet上的
                节点相同的 IP address 会发生什么事情。 只要你使用的 IP
                address 是你自己网路上唯一的位址就可以了。

           如果 sunacm.swan.ac.uk 没开, 我如何取得这些指定的档案 ?
              `sunacm' 被 mirrored 在:

              ftp.Uni-Mainz.DE

                /pub/Linux/packages/Net2Debugged

           我如何知道我正在跑的 kernel/net code 的版本 ?
              network code 与 kernel 现在已经同步使用相同的版次, try:

              uname -a

              或:

              cat /proc/version


  13.2.  错误讯息

           一直出现 `eth0: transmit timed out' 耶 !!! 这是什么意思 ?

              通常是说你的  Ethernet  cable 没插好啦! 或者网路卡的参数
              (I/O address, IRQ, 等等 ) 没有设对。检查开机时出现的讯息
              ,确定一下你的 Ethernet address 能够被辨认出来。 如果没问
              题, 再检查有没有与其他的界面卡冲到。 如: soundblaster 的
              IRQ 与 I/O control port 。

           当我使用网路时, 遇到 `check Ethernet cable'

              你的 Ethernet card 可能设定不正确。
              再次检查 /usr/src/linux/drivers/net/CONFIG 中的设定。 如
              果没问题,问题可能出在网路线, 检查是否有断线。


  13.3.  Routing 的问题

         为何在我使用 route 命令时, 会出现 `obselete route request' ?

              你使用了比你的  kernel  更旧的  route  程式了。 你应该把
              route  upgrade   到更新的版本。  请参考这份文件的   "The
              network configuration tool suite" 那一节。他会告诉你何处
              取得 tool set 。

         为何会出现 `network unreachable' 的讯息 ?

              这个讯息是说你的机器或其他的机器, 不知道如何去  route 这
              个你想要连或 ping 的 host如果对所有的 host 都是这样的话,
              有可能你并没有内定的  route资料, 重新读 `routing' 那一节
              。

         我可以 ping 我的 server/gateway, 但是无法 ping 或连到其他的远
         端 host。

              可能是因为 routing 的问题, 重新读 `routing' 那一节。如果
              看起来都正常, 就检查你要连的机器是否能  route 到你的机器
              。如果你是 dialin user, 这就是一个普通的问题了, 确定你的
              server 有同时跑  routing program 像是 gated 或 routed,或
              者那是 `prox arping', 如果不是的话, 你将可以接到对方传来
              的封包。但是却不知道如何回传封包给你。


  13.4.  使用网路档案系统(NFS, Network File System):

           如何使用现有的 Novell fileserver 跟我的 Linux host 相连 ?

              如果你有 Novell NFS Daemon code 那就容易多了, 只要让 NFS
              mount  到你想要使用的  Novell  volume  。 如果你没有这个
              daemon  code, 而执意要做这个东西的话, 而你也有  sparc PC
              这种机器恣意让你挥霍, 那你就太幸运了。 你可以在 sparc PC
              跑一个叫  Stan's Own Server  的程式。 首先, 把 PC 设定为
              novell 的 workstation  将 nfs mount maps 到你要的目录中,
              然后跑   SOS, 并  export   这些   maps   。   SOS   可在
              spdcc.com:pub/sos/sossexe.zoo 取得。

           当跑在网路上 NFS 时, 档案烂掉(corrupted)了 ?

              某些厂商 ( 主要是 Sun) 承载 (shipped)  许多机器来跑  NFS
              而且并不做 UDP checksums 。 在 ethernet 表现极好, 在其他
              环境下就等于在自杀。   UDP  checksums  在大部分的   file
              server 可以启动  (enabled), Linux 内定从 pl13 onwards 启
              动, 但双边都要启动。

           为何所有 NFS 档案都是 read only ?

              Linux NFS server 内定是 read only 。  RTFM the `exports'
              and nfsd man pages.  如果是非 Linux servers 的话你可能也
              需要修改 /etc/exports 。



--
                              钢  铁  战  士 

※ 来源: 中国科大BBS站 [bbs.ustc.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:619.346毫秒