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



  8.5.  设定 ethernet device. (选项)

        如果你希望设定你的 ethernet card 你会对这这节有兴趣的。 不然的
        话你可以略过, 跳下一节。

        设定 ethernet card 有点儿复杂, 比起设定 loopback device 来讲。
        你现在就可以指定明确的  network  mask 及 broadcast  address 在
        rc.inet1 中了, 除非你确定内定值跑起来也没问题, 那也可以。

        你需要一个网路管理者  assign  给你的  IP  address,  自己网路的
        network mask, 及 broadcast address.

        linux 的第一个 ethernet device 叫做 `eth0', 第二个叫做 `eth1',
        起馀类推。 你现在可以加入一个新的部份到  rc.inet1  档中,  以下
        shell script 对你来说应该可以跑, 如果你使用真实的位址的话:

             #
             # Attach an ethernet device
             #
             #  configure the IP address, netmask and broadcast address.
             /sbin/ifconfig eth0 IPA.IPA.IPA.IPA
             /sbin/ifconfig eth0 netmask NMK.NMK.NMK.NMK
             /sbin/ifconfig eth0 broadcast BCA.BCA.BCA.BCA
             #
             # add a network route to point to it:
             /sbin/route add -net NWA.NWA.NWA.NWA device eth0
             #
             # End ethernet
             #

        参数说明:

           IPA.IPA.IPA.IPA
              表示你的 IP Address.
                       ^^ ^
           NMK.NMK.NMK.NMK
              表示你的 netmask.
                       ^  ^  ^
           BCA.BCA.BCA.BCA
              表示你的 Broadcast address.
                       ^    ^    ^
           NWA.NWA.NWA.NWA
              表示你的 Network Address.
                       ^  ^    ^
        注意 route 的 -net 参数.  这会叫 route 所加入的 route 是一个对
        网路的 route, 不是对某个 host. 有个修改的方法, 你可以不设 -net
        ,  如果你在   /etc/networks   中有网路的列表的话。  在  10.3.3
        `/etc/networks' 那节中会讲到。


  8.6.  设定 SLIP device (选项)

        SLIP (Serial Line Internet Protocol) 允许你在 serial line 上使
        用 tcp/ip, serial line 可以是电话线  +dialup modem, 或是一个专
        线 (leased  line) 之类的东西。 当然使用  slip 你需要能连到一个
        SLIP server 的管道, 许多大学及公司行号都提供 slip 的管道可以连
        到全世界。

        Slip 使用你机器上的 serial ports 来传输 IP 封包 (datagram), 为
        了达到效果它会控制  serial device.  Slip device 名字叫做  sl0,
        sl1等等,   这样的名字如何对应到你的    serial   devices    呢?

        networking  code 使用 ioctl() (i/o control) system call 来改变
        serial devices成 slip devices 。 这可由 dip 与 slattach 两个程
        式来做到。


  8.6.1.  dip

        dip (Dialup IP) 是个很精明的程式, 能设定 serial device 的速度,
        也可下指令自动连线到远端  server, 自动帮你 login 到 server 端,
        找寻 server 端送出的讯息, 并分析出它给的  IP address, 并执行必
        要的 ioctl 来切换你的  serial port 到 slip mode 下, dip 有一个
        很强大的使用 script 的能力, 能让你的 logon 程序自动化。

        dip 放在 net-032/net-tools package 中。 也有许多别的版本的 dip
        开发出来, 并提供了许多新的特色。可在以下节点找到:

        sunsite.unc.edu

             /pub/Linux/system/Network/serial/dip*

        dip-uri 这个版本似乎是较普遍的版本, 但是我建议你每个版本都看看
        看哪个提供的功能对你比较有用。


  8.6.2.  slattach

        slattach 是个很简单的程式, 容易使用, 但是它没有 dip 那样复杂。
        slattach 是个使用在你用  permanent connection  连到你的 server
        端的理想, 就像一条 physical cable, 或一条 leased line 。


  8.6.3.  什么时候我要用什么?

        你应该使用 dip, 当你使用 modem 连上一台 slip server 时, 或一些
        暂时的连线时。你应该使用 slattach, 当你有个专线 (leased line),
        可能是 cable, 在你的机器与 server 间, 且没有需要特别的动作来连
        线工作 {?} 。请看! 8.6.7 `Permanent Slip connection' 那节。

        设定 slip 跟设定 Ethernet  interface  ( 读 8.5 ` 设定 ethernet
        device'很接近, 只是有些地方不同。 首先, slip  links  是 unlink
        ethernet  networks, 只有两个 host 在这个网路上, 连线两端各一台
        机器, 不像 ethernet  那么快就连线, slip 要看你用什么连线, 你必
        须要用特殊的方法 initialize 你的 network connection 。

        如果你使用 dip, 那在开机时不会正常地跑, 有时是在当你稍后准备好
        连线时。它可以自动跑 procedure, 如果你使用 slattach 那你将可能
        要增加一些东西在 rc.inet1 档中 ( <-- 很快就会提到...)

        slip  server  主要有两种形式: Dynamic  IP address  servers  及
        static IP address servers. 几乎每个 slip server 会提示你 login
        及下 password, 当你拨进来的时候。  dip 可以自动帮你处理  login
        及 password 。


  8.6.4.  Static slip server with a dialup line and DIP.

        Static slip server 会提供你一个 IP address ( 相异于你自己的  )
        , 每次你连上 server 的时候, 它会根据它所提供的 IP address 来设
        定你的 slip port 。并因应你的 modem call, 而要求你输入使用者名
        称与密码, 之后, 它便会开始为你提供传送资料的服务了。假使你有个
        static server, 你可能就会想在  /etc/hosts 里为你的 hostname 与
        IP address 加入一些 entries 。 那你就必须要设定一些其他的档案,
        如: rc.inet2, host.conf, resolv.conf, rc.local , /etc/HOSTNAME
        。 记住!  你不用在  rc.inet1  里为  slip  的连接增加任何特殊的
        commands, 因为那些繁杂的工作会由  dip  为你完成,不过你必须提供
        dip 适当的资讯。届时, dip 就会在你命令 modem建立 the call 之后
        为你设定好界面, 并 logging 到你的 slip server 。

        如果这就是你  slip server 的工作, 那你就可以跳至  8.6.6 ` 使用
        DIP'那一节, 看看如何适当地设定 dip 。


  8.6.5.  Dynamic slip server with a dialup line and DIP.

        每次你 logon 的时候, dynamic slip server 会从一堆 addresses 中
        随机取出一个当作你的  IP  address  。 这表示说你每次取得的  IP
        address  都是不固定的。 通常网路管理者会规划分配一个范围的  IP
        address  给 server 使用, 当有使用者连上  server 的时候, server
        就会找出第一个尚未被使用的    address   并分配给使用者,   并在
        welcome画面上知会, 接著使用者就可以用此一  IP address 开始进行
        工作了。

        对于此类的 server, 设定方法类似  static server, 除了你必须增加
        一个步骤  ---  依据 server 指定的 IP address  来设定你的  slip
        device 。

        同样的, dip 会自动处理一些繁杂困难的工作。 较新版本的 dip 不但
        会帮你 login 还会自动读进显示在  welcome 画面上的 IP address并
        加以储存, 以方便你的 slip device 设定工作。

        如果这就是你  slip server 的工作, 那你就可以跳至  8.6.6 ` 使用
        DIP'那一节, 看看如何适当地设定 dip 。


  8.6.6.  使用 DIP.

        如同先前谈过的, dip 是个威力强大的程式, 可以自动执行 dialin 的
        程式  logon  到远端的  slip server, 帮你连线, 使用 ifconfig  &
        route来帮你设定你的 slip device 。

        想使用 dip 就要先写个  `chat script', 上面写些基本的  commands
        list, 让 dip  依照你的要求来执行  actions  。 下面附上的例子是
        net-032 package 的。  dip 是个相当好用的程式, 有相当多参数可使
        用 , 有需要的人, 可以查看  man page, README, 或者是  tsx-11 与
        net-032 distribution 范例档案上的说明。

        留意下面的例子, 它是假设你所使用的是 static slip server,所以要
        先知道你的 IP address 。若是使用 dynamic slip server, 较新版本
        的 dip 会有个 command, 可自动读进  slip device 与 IP address并
        加以设定。 下面的范例是由 Paul Mossip 所提供的, 很适合刚开始使
        用的人, 可以把它存档为 /etc/dipscript

        #
        # Connection script for SLIP to knoware.nl.mugnet.org
        #

          # Fetch the IP address of our target host.
        main:

          # Set the desired serial port and speed.
          port /dev/cua0
          speed 38400

          # Reset the modem and terminal line.
          reset

          # Prepare for dialing.
          send ATZ1\r
          wait OK 4
          if $errlvl != 0 goto error
          dial 666-0999                    ## Change to your server's number!
          if $errlvl != 0 goto error
          wait CONNECT 60
          if $errlvl != 0 goto error

          # We are connected.  Login to the system.
        login:
          sleep 3
          send \r\n\r\n
          wait gracelands> 20              ## Change to your server's prompt
          if $errlvl != 0 goto error
          send login\n
          wait name: 10                    ## Wait username: prompt
          if $errlvl != 0 goto erro
          send elvisp\n                    ## Change to your own!
          wait ord: 10                     ## Wait password prompt
          if $errlvl != 0 goto error
          send alive\n                     ## Change to your own!
          wait gracelands> 10
          if $errlvl != 0 goto error
          send slip\n                      ## Change to suit your server
          wait SLIP 30                     ## Wait for SLIP prompt
          if $errlvl != 0 goto error
          get $local remote 10             ## Assumes the server sends your IP..
          if $errlvl != 0 goto error       ## address as soon as you enter slip.
          get $remote gracelands           ## slip server address from /etc/hosts
        done:
          print CONNECTED to $remote with address $rmtip we are $local
          default
          mode SLIP
          goto exit
        error:
          print SLIP to $host failed.
        exit:
        #
        # End dip script


        上面的 example 假设你呼叫一个  dynamic slip server, 如果你呼叫
        static slip server, 把以下两行删除 ( 或 comment):

        get $local remote 10             ## Assumes the server sends your IP..
        if $errlvl != 0 goto error       ## address as soon as you enter slip.

        当 dip 被给予 get $local  的 command, 它会在从远端读进的文字档
        中搜寻类似  IP address 的字串, 也就是以 `.' 所分隔的数字字串。
        这项更动是为了  dynamic slip servers 而特别加上的,以便自动读取
        server 所分配的 IP address 。

        上面的例子会自动建出 default route 来对应你的 slip link 。假使
        说这不是你想要的, 而是想以别的当作你的 default route 的话,就将
        这项内定的 command 移走就是了。在跑完这个 script 之后,如果你下
        ifconfig 这个指令, 就会看到你有个 slip device 叫 s10。当你有需
        要的时候, 还可以在 dip 的 command 执行结束之后, 用 ifconfig 和
        route 指令, 自行修改它的设定。

        dip 允许使用者使用  mode 这个指令选择一个号码以使用不同的协定,
        一般用到的通常是 cslip 。 不过必须留意的是这个协定必须是连线两
        端所同意的, 所以无论你选的是何种协定, 你都必须确认 server 也是
        使用相同的协定。

        上面所说的例子是相当简略的, 可能还有些错误存在, 请自行参考 dip
        的 man page 。甚至你可以考虑再加上一些功能, 例如: 在等待时间内
        未连上 server 后重新拨接, 或是一次指定数个 server 来轮流拨接。


  8.6.7.  Permanent slip connection using a leased line and slattach.

        如果你有条 cable, 或是有 leased line 还是其他 permanent serial
        connection 来连接你的机器与其他机器, 那你就不必忍受使用 dip 时
        所必须遭遇的麻烦, 因为有个好用的公用程式 slattach 可提供你足够
        的功能来做连接的设定。

        既然你的连接是属于固定不变的那一类, 你可能会想要在  rc.inet1中
        加入一些设定。 基本上, 你所需要作的就是为 serial device 设定好
        正确的速度与切换 serial device 成 slip mode 。 slattach 这个指
        令可以帮助你做到上述设定。 把下面这段范例加到你的档案 rc.inet1
        之中:

             #
             # Attach a leased line static slip connection
             #
             #  configure /dev/cua0 for 19.2kbps and cslip
             /sbin/slattach -p cslip -s 19200 /dev/cua0 &
             /sbin/ifconfig sl0 IPA.IPA.IPA.IPA pointopoint IPR.IPR.IPR.IPR up
             #
             # End static slip.


        Where:

           IPA.IPA.IPA.IPA
              represents your IP address.

           IPR.IPR.IPR.IPR
              represents the IP address of the remote end.

        slattach  会使用第一个尚未被占用的  slip  device  来当作特定的
        serial device 。  slattach 会由 s10 开始搜寻, 若 s10 被占用了,
        就会查看 s11 是否可用..  以此类推, 直到找到可用的  slip device
        。

        slattach 允许你用 -p 的参数设定使用不同的协定。 可依据你是否需
        要压缩来决定使用 cslip 还是 slip, 不过连线的两端必须使用同样的
        协定就是了。


  8.7.  设定 PLIP device. (选项)

        plip (Parallel Line IP), 它用来提供在两台机器间做点对点的连线,
        除了使用电脑上的平行埠 (parallel ports) 而不使用串列埠 (serial
        ports), 它跟 slip 很像。 因为使用 parallel port 可以一次传输超
        过 1 bit 的资料, 而且 parallel device 可以达到比 serial device
        更高的传输率。 除此之外, 甚至最简单的  parallel ports, printer
        ports   都能使用,  in   lieu   of  you   having   to  purchase
        comparitively expensive 16550AFN UART's for your serial ports.

        请注意有些膝上型电脑使用的晶片组不能提供   PLIP  的功能,  因为
        PLIP要使用到   combinations   of  signals,  印表机并不使用这种
        combinations of signals 。

        Linux plip interface 跟 Crywyr Packet Driver PLIP 相容, 也就是
        说你的 linux 可以透过 plip 连到 DOS 机器跑 TCP/IP 软体。

        compile  kernel 时, 只有一个  /usr/src/linux/driver/net/CONFIG
        这个档案需要设定, 他包含 plip timers in mS. 内定值在大部分的时
        候都没问题, 你可能需要增加一些  , 如果你有特别「龟速」的电脑的
        话, 在这个状况下, the timers to increase  are actually  on the
        other computer 。

        你需要增加下列的数行到 rc.inet1:

             #
             # Attach a PLIP interface
             #
             #  configure first parallel port as a plip device
             /sbin/ifconfig plip0 IPA.IPA.IPA.IPA pointopoint IPR.IPR.IPR.IPR up
             #
             # End plip

        说明:

           IPA.IPA.IPA.IPA
              表示你自己机器的 IP address.
           IPR.IPR.IPR.IPR
              表示远端机器的 IP address.

        这个点对点的参数跟 slip 一样的意思, 它指定 另外一端的 address。

        除了它不需要 dip 与 slattach 之外, 其实你可以把 plip interface
        看成是 slip interface 。


  8.7.1.  PLIP 接脚图

        plip 已经设计来使用 cable 跟相同的接脚建立连线。现在普遍的使用
        是在 MS-DOS 环境下 pc-pc 的档案传输。

        这个接脚图 ( 在 /usr/src/linux/drivers/net/plip.c 内 )看来是这
        锅样子的:

             Pin Name    Connect pin - pin
             ---------   -------------------------------
             GROUND      25 - 25
             D0->ERROR   2 - 15
             ERROR->D0   15 - 2
             D1->SLCT    3 - 13
             SLCT->D1    13 - 3
             D2->PAPOUT  4 - 12
             PAPOUT->D2  12 - 4
             D3->ACK     5 - 10
             ACK->D3     10 - 5
             D4->BUSY    6 - 11
             BUSY->D4    11 - 6
             D5          7*
             D6          8*
             D7          9*
             STROBE      1*
             FEED        14*
             INIT        16*
             SLCTIN      17*

        注意: 不要去接到标有 `*' 的接脚, 额外的 ground 是 18,19,20,21,
              22,23, and 24.

        如果你使用的  cable 外层是用金属包起来的话, 那它应该接到金属包
        外层的 DB-25 (at one end only. {?})

        警告: 乱接 PLIP cable 线可能摧毁你的控制卡, 要非常小心, 每个连
              线都要检查两次, 以确定你不会让自己白做工或是造成心绞痛...

        虽然你可以使用  PLIP cables 来做长距离的连线, 但你应该尽量避免
        。规格中规定只能连大约一公尺, 当你跑长距离的 PLIP  时, 要小心
        强烈的电磁场, 闪电, 电源线, 收音机传送器, 可能会毁损你的控制卡
        。 如果你坚持使要长距离连线,  那你应该找到便宜一点的  ethernet
        card并使用 coaxial cable 。


  9.  Routing(强制的)

        在你设定完所有 network device 之后, 你要想想你的机器要如何绕送
        (route) IP datagrams 。 如果你只有设定一个 network device 那你
        的选择很简单, 因为任何机器的所有封包  (datagrams) 都要经过那个
        interface 来出入。如果你有超过一个以上的 network interface, 那
        你的选择就复杂一点,  你可能在家的机器上同时拥有一个   ethernet
        device 及一个 slip connection, 那你必须将封包都导向家里的机器,
        且其他的则透过 ethernet device 。 Routing 是个很简单的机制, 但
        是不要担心, 如果刚开始的时候你发现对你来说有点难了解, 每个人都
        这样啦!

        你可以显示你的  routing table 的内容, 使用 route 这个命令 ( 不
        加参数 ) 。

        unix network 有很多的常用的机制可以设定。我将简要地逐一介绍。


  9.1.  Static/Manual(手动的) Routes.

        Static routing, 也就是 `hard coded'  routing, 也就是说, 如果你
        的网路挂了的话它不会更动, {?}or if an alternate  route becomes
        available.  Static routes 常用于简单的且没有  alternate routes
        available 的网路, where you have a very simple network with no
        alternate routes available to a destination  host, 也就是说,到
        目的主机只有唯一的路径,  or  where   you  want   to  route   a
        particular  way to a host regardless  of network  changes.  在
        Linux中 manual routes 有一个特别的用处, 增加一个 route 到 slip
        或 plip host, 这些 host 先前已经以 ifconfig 加 pointopint 参数
        来设定。如果你有 slip/plip 连线, 且已经以 pointopoint 参数来指
        定远端主机, 那你应该增加一个  static route 到那个节点  address
        使得 ip routing 软体知道如何绕送封包到那个位址。 你可在 tcp/ip
        连线上使用 route 指令, 透过专线, 先前的例子像这样:

             #/sbin/route add IPR.IPR.IPR.IPR

        说明:

           IPR.IPR.IPR.IPR
              表示远端主机的 IP address


  9.2.  default Route.

        default route 的机制对大部份网路上的 end-user workstation/host
        最普通也最有用, default route 是一个特别的  static route, 它符
        合每个 destination address, 使得如果对一个 datagram 来说已经没
        有其他的 route 可以送了的话, 将会使用 default route 。  {?} 如
        果你已设定定义有单一的  ethernet  interface,  或者单一的  slip
        interface device, 那你应该可以透过它指到你的  default route 。
        在  ethernet  interface  这种状况下, Linux  kernel  就知道要将
        datagram  送到网路上的哪一台主机。 它使用 network  address  及
        network   mask  来运作。  这表示那些   kernel   送不到目的地的
        datagrams 是那些不存在网路上的人。 为使 default route 能正常运
        作, 你要设定 default route 到你的 router address, 因为它是你与
        外面联系的工具。如果你使用 slip connection, 那你的 slip server
        将会变成你的  router, 所以你的 default route 将会透过你的 slip
        server 来达成。

        再来是设定你的 default route, 当你所有的 network device 都设定
        好后, 在 rc.inet1 中加入 以下几行:

             #
             # Add a default route.
             #
             /sbin/route add default gw RGA.RGA.RGA.RGA
             #

        说明:
           RGA.RGA.RGA.RGA
              表示你的 Router/Gateway 的 Address.


  9.3.  Proxy ARP.

        这是个 ugly, hazard prone 的方法, 而且如果你们之中有些人无论如
        何都打算使用它的话, 那就要格外的小心罗。

        大部分会用到  proxy arp 的人都是把  Linux  machine  设定成一台
        slip dial-in server 。 因为这些人会使用到 PPP, 而 PPP daemon为
        了使用上的安全会简化并自动处理这些工作。

        自然地, 当一个 ethernet  上的 host 想与你 talk, 它就只知道你的
        IP  address   而不清楚你的   hardware   address,  也就不知该将
        datagrams 往哪传送。  APR mechanism 为此特别提供了一个 mapping
        function 来处理 network address 与 hardware address 之间的问题
        。

        假使你想把自己的机器当作  server 来服务其他机器时,当其他的机器
        没有实际连上 enthernet 时,就必须让你的机器能代表这些机器, 回应
        对其  IP  address  所提出的  ARP  requests  。  例如你的机器有
        128.253.154.120-124 这几个 IP address 来分配给 dial-in 的 slip
        使用者, 而你所拥有的  ethernet  card  之 hardware  address  为
        00:00:C0:AD:37:1C ( 可以用 ifconfig 这个指令来找 ) 。 你就要在
        Linux server 的 rc.inet1 的最后加上下面这几条 commands, 以便回
        应对这些 addresses 所提出的 arp requests by proxy 。

        #
        # Proxy ARP for those dialin users who will be using this
        #           machine as a server:
        #
        /sbin/arp -s 128.263.154.120 00:00:C0:AD:37:1C pub
        /sbin/arp -s 128.263.154.121 00:00:C0:AD:37:1C pub
        /sbin/arp -s 128.263.154.122 00:00:C0:AD:37:1C pub
        /sbin/arp -s 128.263.154.123 00:00:C0:AD:37:1C pub
        /sbin/arp -s 128.263.154.124 00:00:C0:AD:37:1C pub
        #
        # End proxy arps.

        pub 的参数是表示 `publish', 用来指示你的机器为这些 addresses回
        应  requests, 即使那不是你的机器的  addressses, 也会用你机器的
        hardware address 机来回应。

        当然, 你必须确定在你的  Linux server  的 routes  里,已经将这些
        addresses 与它们要对应连接上的 slip device 都设定好了。

        假使你使用了 PPP, 你不必担心会因人为失误而搞混了  arp table 。
        因为当远端的机器与    server    是在同一个网路上,   若你使用了
        proxyarp 这个参数, pppd 就会为你处理这些 entries 。 不过你也要
        在 server's  pppd 的 command line 加上 the netmask  of network
        。


  9.4.  gated - the routing daemon.

        gated 在有些状况下可以用来代替 proxy arp, 手脚也比较俐落, 但是
        它最大的功能在于:  如果你要把你的   linux  机器当作网路的   ip
        router gated 提供支援许多  routing protocols 。 这些 protocols
        是 RIP, BGP, EGP, HELLO, and OSPF 。最常使用在有 RIP 的小网路,
        RIP 代表 `Routing Information  Protocol' 。 如果你跑 gated, 为
        rip 设定, 你的 linux 机器将定期用特殊的格式广播  routing table
        给你的网路。这样做的话, 所有在你的网路上的机器都会知道哪个位址
        可透过你的 linux 连上。

        gated 可以用来代替 proxy arp, 当所有网路上的  hosts 都跑 gated
        & routed 的时候。如果你有个靠手动及动态的 route 混合的网路, 你
        应该把任何手动修改的  route  标为  `passive', 并确定它们不会被
        gated 摧毁, 因为它不会 update 。

        gated 正常是由你的 rc.inet2 来启动, (rc.inet2 下一节会讲 ), 你
        可能已经看到一个叫 routed 的 daemon 正在跑...  gated 比 routed
        更优越, 因为它更有弹性且功能更强。 所以你应该跑  gated  而不是
        routed 。


  9.4.1.  取得 gated

        Gated 可在以下节点取得:
            sunsite.unc.edu
            /pub/Linux/system/Network/daemons/gated.linux.bin.tgz
                                             /gated.linux.man.tgz
                                             /gated.linux.tgz

        gated.linux.tgz 是原始程式码, 你可能不需要, 除非你因为某些原因而
        希望重新 compile 执行档。


  9.4.2.  安装 gated

        gated 的 binary 版包含三个程式及两个设定档:

        程式:

           gated
              实际上的 gated daemon.

           gdc
              gated 的使用者操作界面。 是用来控制 gated daemon(停止、
              启动及取得状态值)。

           ripquery
              一个用来查询 gateway 已知的 route 的 diagnostic tool。
              (使用 `rip query' 及 `rip poll')

        设定档:

           gated.conf
              gated daemon 的设定档, 允许你指定 gated 要如何运作。
              你可以启动/取消(enable/disable) 任何的 routing protocols,
              并控制 routing protocol 的运作方式。

           gated.version
              描述版次的文件档。

        gated 的 binary 版, 并不会帮你把档案 install 到正确的地方,不过
        还好不多。所以还很容易解决。

        Install binary 的过程如下:

             # cd /tmp
             # gzip -dc .../gated.linux.bin.tgz | tar xvf -
             # install -m 500 bin/gated /usr/etc
             # install -m 444 bin/gated.conf bin/gated.version /etc
             # install -m 555 bin/ripquery bin/gdc /sbin
             # rm -rf /tmp/bin

        我保留一个 networking daemons 在 /usr/etc 中, 如果你的在其他的
        目录中你必须要修改  target directory, gated 的范例档包含模拟旧
        的 routed daemon 的设定:安装 man page, 踹踹下列几行:

             # cd /tmp
             # gzip -dc .../gated.linux.man.tgz | tar xvf -
             # install -m 444 man/*.8 /usr/man/man8
             # install -m 444 man/*.5 /usr/man/man5
             # rm -rf /tmp/man

        man  page  档,  包括了如何设定及使用的细节资讯。  至于如何设定
        gated.conf 请参考 gated-config man page 。


  10.  设定(Configuring) network 的 daemons

        如同前述, 有许多的档案需要设定才能跑网路, 这些档案大部分是高阶
        的网路软体设定。每个重要的部份都会在下面的一节说明, 但是当你若
        摸久了之后, 你会发现, 还有一大堆的设定档要设定。


  10.1.  /etc/rc.d/rc.inet2 (rc.net 的后半段)

        如果你有照以下文件来做, 你应该就已经正确地设定完 rc 档中的网路
        device 的 address, 并且为你的特定的网路设定完所要加入的  route
        了。

        你现在需要启动一些 higher level 网路软体。

        现在天气正好, 可以读读 Olaf's Network Administrators  Guide,因
        为它是一份本节设定定义的文件。

        他将帮助你决定要在档案中加入什么东西, 或许更重要的, 哪些不须加
        入。

        为了安全考量, 它对于你正在跑的网路  service 述说中肯, 很有可能
        你的系统有 security hole, 所以只跑需要的 service 就好了。

        这里有一些重要的 daemons ( 背景执行的系统 porcess) 以要知道的,
        man page 中会谈到, 他们是:


  10.1.1.  inetd.

        inetd  是一种处理   ineternet  connection  request  的背景程式
        (daemon) 。它很聪明你不需一次跑一大堆没人连接的 server 。

        当它发觉有特定的  request ( 如:telnet, ftp) 进来的时候, 它会检
        查 /etc/services  档, 找出要执行该 request 的程式, 启动该程式,
        并处理之间的连线,

        把它想像成是你所有的的   internet   servers   的主人   (master
        server),它也内建一些简单的标准  services inbuilt, 如: 秀出, 忽
        略及产生 services, 这些 serives 会被许多网路测试使用到。


  10.1.2.  syslogd.

        syslogd 是个处理并记录整个系统的 log(message) 的 daemon.他接受
        其他程式产生并输出到 syslog 的讯息。并会根据规则来分散这些讯息
        , 规则定义在 /etc/syslogd.conf 。

        例如: 特定的讯息你可能会希望送到 console, 并且送到 log 档中,或
        者只想送到一个档案中, syslogd 允许你指定讯息要送到的地方。


  10.2.  一个 rc.inet2 范例档

        以下是一个  rc.inet2  的范例档  (Fred  写的 ).  它会启动一驼的
        server所以你可能要把不需要的弄下来,  只留要跑的就可以了...如何
        把它给弄下来呢? 只要把它给直接砍掉砍掉或在  (if 到 fi 的范围内
        的 )该行前加个 '#' 。 加个 echo 上去, 在 boot 的时候提醒自己该
        service已经 disable 掉了, 或执行指令确定它在背景快乐地跑... 想
        要获得  daemon更详细的资料吗? 对啦! 查查  man page  或 Network
        Administrators Guide 。

        #! /bin/sh
        #
        # rc.inet2      这个 shell script 会启动所有的 INET system.
        #               注意, 当这个 script 被呼叫到, 也同时会把 NFS 上
        #               重要的 disk(eg. /usr) 点一把火(fire up)
        #               要特别注意线上正在跑的 binaries...
        #
        # Version:      @(#)/etc/rc.d/rc.inet2  2.18    05/27/93
        #
        # Author:       Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
        #

        # Constants.
        NET="/usr/etc"
        IN_SERV="lpd"
        LPSPOOL="/var/spool/lpd"

        # At this point, we are ready to talk to The World...
        echo -e "\nMounting remote file systems ..."
        /bin/mount -t nfs -v            # This may be our /usr runtime!!!

        echo -e "\nStarting Network daemons ..."
        # Start the SYSLOG daemon.  This has to be the first server.
        # This is a MUST HAVE, so leave it in.
        echo -n "INET: "
        if [ -f ${NET}/syslogd ]
        then
                echo -n "syslogd "
                ${NET}/syslogd
        fi

        # Start the SUN RPC Portmapper.
        if [ -f ${NET}/rpc.portmap ]
        then
                echo -n "portmap "
                ${NET}/rpc.portmap
        fi

        # Start the INET SuperServer
        # This is a MUST HAVE, so leave it in.
        if [ -f ${NET}/inetd ]
        then
                echo -n "inetd "
                ${NET}/inetd
        else
                echo "no INETD found.  INET cancelled!"
                exit 1
        fi

        # Start the NAMED/BIND name server.
        if [ ! -f ${NET}/named ]
        then
                echo -n "named "
                ${NET}/named
        fi

        # Start the ROUTEd server.
        # NOTE: routed is now obselete. You should now use gated.
        #if [ -f ${NET}/routed ]
        #then
        #        echo -n "routed "
        #        ${NET}/routed -q #-g -s
        #fi

        # Start the GATEd server.
        if [ -f ${NET}/gated ]
        then
                echo -n "gated "
                ${NET}/gated
        fi

        # Start the RWHO server.
        if [ -f ${NET}/rwhod ]
        then
                echo -n "rwhod "
                ${NET}/rwhod -t -s
        fi

        # Start the U-MAIL SMTP server.
        if [ -f XXX/usr/lib/umail/umail ]
        then
                echo -n "umail "
                /usr/lib/umail/umail -d7 -bd </dev/null >/dev/null 2>&1 &
        fi

        # Start the various INET servers.
        for server in ${IN_SERV}
        do
                if [ -f ${NET}/${server} ]
                then
                        echo -n "${server} "
                        ${NET}/${server}
                fi
        done

        # Start the various SUN RPC servers.
        if [ -f ${NET}/rpc.portmap ]
        then
                if [ -f ${NET}/rpc.ugidd ]
                then
                        echo -n "ugidd "
                        ${NET}/rpc.ugidd -d
                fi
                if [ -f ${NET}/rpc.mountd ]
                then
                        echo -n "mountd "
                        ${NET}/rpc.mountd
                fi
                if [ -f ${NET}/rpc.nfsd ]
                then
                        echo -n "nfsd "
                        ${NET}/rpc.nfsd
                fi

                # Fire up the PC-NFS daemon(s).
                if [ -f ${NET}/rpc.pcnfsd ]
                then
                        echo -n "pcnfsd "
                        ${NET}/rpc.pcnfsd ${LPSPOOL}
                fi
                if [ -f ${NET}/rpc.bwnfsd ]
                then
                        echo -n "bwnfsd "
                        ${NET}/rpc.bwnfsd ${LPSPOOL}
                fi

        fi
        echo network daemons started.
        # Done!


  10.3.  Name Resolution.

        Name Resolution  是个转换 hostname(eg.  tsx-11.mit.edu)  成 IP
        address  的 process, 因为网路软体指认得  IP address.这里有两个
        install 的工具 (principal mean), 一个较简单, 一个较复杂


  10.3.1.  /etc/hosts

        /etc/hosts  包含了一驼 ip addresses 及相对应的 hostname 的列表
        。这样做的话, 你可以使用 hostname 与网路上的其他机器连线。就跟
        使用  ip  address  的作用一样。 使用  nameserver  ( 看  10.3.2
        `named' 一节 )允许你自动地翻译 hostname 成 ip address 。  ( 当
        然也允许在自己的 linux 机器上跑 nameserver) 这个档中至少要包含
        127.0.0.1 localhost这一行, 如果你不只使用 loopback, 你需要增加
        你机器的 ip address 在这个档案中 ( 全名, 如: loomer.vpizza.com
        ), 你也可以加入 gateway 及 network address。

        例如, 如果 loomer.vpizza.com  的 ip address 是 128.253.154.32,
        /etc/hosts 档中要设成:

             # /etc/hosts
             # List of hostnames and their ip addresses
             127.0.0.1               localhost
             128.253.154.32          loomer.vpizza.com loomer
             # end of hosts

        有必要的时候还要再修改这个档案, 以符合自己的需要。如果你只是在
        loopback 状态下, 在 /etc/hosts 中唯一的一行应该是 127.0.0.1,其
        后接著 localhost 及你的 hostname 。

        注意: 在上面的第二行 , 128.253.154.32  有两个名字:
              loomer.vpizza.com 及 loomer. 第一个是你的系统的全名 ( "
              Fully Qualified Domain Name " ) , 第二个是别名。 第二个
              允许你只打 rlogin loomer 而不用打全名 , 你必须要确定别名
              之前的全名。


  10.3.2.  named - 我需要吗 ?

        `I dub thee ..'

        named 是 UNIX-like 系统的 nameserver daemon.  他允许你机器处理
        name lookup 的 request, 不只给自己用, 也给网路上其他的机器使用
        ,  也就是说,  如果另外一台机器要找   `goober.norelco.com'   的
        address,而你的  named database  中有这个资料, 那你可以处理这个
        request,然后告诉别台机器 `goobers` 的 address 是什么。

        在旧的 Linuc tcp/ip 版本, 如果你要开个  alias ( 就算你要为自己
        的机器开 ), 你必须在自己那一台 linux 跑 named, 才能做 hostname
        -  IP address  的翻译工作, 这造成一个比较难以设定及维护的问题,
        为了解决这个问题,  有个程式   hostcvt.build   于是产生,   会将
        /etc/hosts  档转成  named  database  档, 不过就算这个问题解决,
        named 仍然耗掉一些 CPU的成本, 并增加网路流量。

        最后一行是: 你不需要在  Linux 上跑 named, SLS 指令将会正确地告
        诉你要跑 hostcvt.build  来设定 named, 真的没必要这样做, 除非你
        要你的 linux 当作别台机器的  name server, 那你才需要读相关的文
        件。 当你查询 hostname 时, 你的 linux 机器将先检查  /etc/hosts
        档,然后再问外面的 name server 。

        你要跑 named 的原因不外是:

        o  你正在设定网路, 而且需要一个 nameserver, 在网路外面也没有
           nameserver 的话。

        o  你的网路管理者因为种原因要你跑 Linux system 当作 nameserver。

        o  你有个很慢的  slip  connection,  且希望跑个小的  cache-only
           nameserver 在你的 Linux 机器上, 就不用再跑道外面查询。 如果
           你只连接只有少数机器的网路, 你也知道他们的 ip address, 你可
           以把它们的  ip  address  放到  /etc/hosts  中, 一点也不必做
           nameserver  的 lookup 的动作。 一搬来说, namelookup 也不慢,
           也应该可以在 slip 连线下跑的很顺。

        o  闲闲没事做, 想跑跑 nameserver  玩玩, 刺激嘛! 总比「抓虱母相
           咬」好多了吧! 反正没代志我负责, 有代志就当给他看!

        一般来说, 你不需要跑 named: 这表示你可以将 rc.inet2 档的那行标
        为注解, 也不用跑 hostcvt.build 了, 如果你要做 host 的 alias,例
        如: 如果你要把  loomer.vpizza.com  缩为  loomer,  那你只要加在
        /etc/hosts 就可以啦, 实在没有理由跑 named 除非你有特别的需求。
        如果你有个  nameserver,  (  而且你的网路管理者也告诉该台的  IP
        address), 那就不必跑 named 。

        如果你只跑  loopback, 你可以跑 named 并设定 nameserver address
        为 127.0.0.1, 但是既然你只使用你自己的机器, 那你跑 named 干嘛?


  10.3.3.  /etc/networks

        /etc/networks  列出你自己的 hostnames, addresses, 及 networks.
        这个档案会被  route 使用到, 让你只定自己网路的名字, should you
        so desire.

        每个你想要加入  routing table 中的 network 要在 /etc/netork 中
        占有一行, 除非你也指定 -net 这个参数在 route 命令行。

        格式跟 /etc/hosts 很像, 以下是个例子:

        #
        # /etc/networks: list all networks that you wish to add route commands
        #                for in here
        #
        default         0.0.0.0         # default route    - recommended
        loopnet         127.0.0.0       # loopback network - recommended
        mynet           128.253.154.0   # Example network CHANGE to YOURS
        #
        # end of networks


  10.3.4.  /etc/host.conf

        Linux 系统中有包含  resolver library, 这个档案说明你的系统会如
        何查询 host name, 它应该包含至少以下两行:

             order hosts,bind
             multi on

        这两行告诉  resolve libraries 先检查 /etc/hosts 档, 然后再去问
        nameserver ( 如果有的话  ), 多重 retry 允许在 /etc/hosts  中的
        host有好几个 IP address 。

        这个档案从  Linux 的 resolv+  bind library  发展而来, 你可以在
        man page resolv+(8) 找到更多的文件, 如果你没有  man page 的话,
        请到以下节点抓取:

        sunsite.doc.ic.ac.uk

             /computing/comms/tcpip/nameserver/resolv+/resolv+2.1.1.tar.Z

        这个档案包括这个 resolver library 的 resolv+.8 man page。


  10.3.5.  /etc/resolv.conf

        这个档案实际上是设定系统的   name  resolver,  包含两种  entry:
        nameservers 的 address ( 如果有的话 ), 及自己网路 domain( 如果
        有的话 ), 如果你跑自己的 nameserver( 也就是: 在自己的 linux 机
        器上跑  named  ), 那你的  nameserver  就是 127.0.0.1, loopback
        address 。

        你的 domain name 就是你的 F.Q.D.N 的 hostname ( 如果你的机器在
        Internet 上有注册的话。  ), 去掉 hostname 就是了, 例如: 你的全
        名是: loomer.vpizza.com, 那你的  domain  name 就是 vpizza.com,
        去掉 hostname 'loomer' 。

        例如: 如果你的机器是 goober.norelco.com, 而且有一个 address 是
        128.253.154.5 的 nameserver, 那你的 /etc/resolv.conf 档如下:

             domain norelco.com
             nameserver 127.253.154.5

        你可以指定超过一个 nameserver, 每个都在 resolv.conf 档中有一行。

        记痣: 你如果只跑 loopback, 你不需要 nameserver。


  10.3.6.  设定自己的 Hostname - /etc/HOSTNAME

        在你设定完其的设定之后, 还有一件工作要做, 你需要设定你自己机器
        的名字。 设定 hostname 之后, AP( 如: sendmail) 才能认得你是谁,
        而且你自己的机器才能被台机器辨识出来。

        有两个档案需要设定这类的资讯, 常常被错用。hostname 及 domainname。

        如果你使用 1.1.38- 之前版本的 net-tool 那你可以在 /etc/rc 中加
        入:

             /bin/hostname -S

        这样会促使 hostname 命令去读取 /etc/HOSTNAME, 档中会包含全名。
        也就是说, 你的 hostname 包含 domainname, 他将会把 F.Q.D.N.  转
        成 DNS hostname 及 domainname 两个部份, 帮你适当地设定。

        例如: 以上的机器 /etc/HOSTNAME 档案中有:

             goober.norelco.com

        如果你使用 net-tools-1.1.38+ 版本的 hostname, 那你要在
        /etc/rc.d/rc.inet1 加上一行:

             /bin/hostname goober.norelco.com

        否则, 如果你是从早期的版本升级过来的, 你要改为:

             /bin/hostname -F /etc/HOSTNAME

        它会照早期版本的作法来做。

        /bin/domainname 这个命令是用来设定 "N.I.S. domain name" 而『不
        是』 "D.N.S. domain name", 你不需要设定这个东西, 除非你跑 NIS,
        NIS 稍后我们会好好地聊聊...


  10.4.  其他档案

        当然还有需东档案在 /etc 目录下, 你可能以后会 dabble 到。我将提
        供一些基本的概念让你了解网路, 而不直接在此深入讨论。详细的资讯
        可在 Olaf's Network Administration Guide 中找到。 它会接著这个
        HOWTO 继续讲下去。 ( 因为有些东西可能以后才会在这个 HOWTO 文件
        中慢慢加进来。 )

        一旦你设定好所有的档案, 状况也一直正常, 你应该 reboot 你的系统
        并 net away 到 your hearts  content.不过我建议你保留一份旧的开
        机片, 甚至修复磁片, 至少头突发状况时会用得到。 你可以试试 HJLu
        的 `single disk boot disk', 或 SLS 版本的 `disk1' 。


  11.  介高尚的设定(Advanced Configurations)

        之前介绍的设定仅是针对一个正常的  ( 没事不会乱抓电脑或啃键盘的
        ) end-user 来说明, 只是讲述大概的设定。 有些人觉得是小 case 不
        屑看超过一分钟, 想要来些刺激的... 以下就素啦! ( 本章包括: PPP,
        SLIP, AMD, router)


  11.1.  PPP - Point to Point Protocol(点对点通讯协定)

        PPP 对 conveying multiple protocols( 例如:tcp/ip) 来说, 是一个
        现代的也很有效率的  protocol, ,, 许多人使用  PPP  透过  serial
        links 取代 slip 。它提供更强的功能, 错误侦测, 额外的资料安全。
        它修正一些  SLIP 的 deficiencies, 且适合做同步的传输或非同步的
        传输。 (asynchronous links and synchronous links)

        PPP 运作上的特性是  dynamic address allocation, 这个特性也几乎
        会由你的 PPP server 来做 (exploited), 允许 PPP client 使用特别
        的格式化的封包, 来回应 server 的要求。在这种情况下, 比 SLIP 更
        简化设定。因为回传 address 的能力必须发生在 protocol 之外。

        Linux port 作者是 Michael  Callahan, <callahan@maths.ox.ac.uk>
        及 Al Longyear, <longyear@netcom.com> 。大部分的资讯都来自 PPP
        软体所附的文件中。那些文件也已经十分完整, 会比现在我所讲的更深
        入。

        Linux PPP code 已经经过 Alpha 测试, 现在也以公开发行可以取得。
        1.0.0 Linux PPP code 基本上市架构在 Paul Mackerras 的 free PPP
        for BSD-derivative  operating systems 之上。  1.0.0 版是架构在
        2.1.1 版的 free PPP code 上。

        PPP code 分成两个部份。第一个部份是 kernel module, 负责 handle
        frame 的 assembly 及 disassembly 。第二个部份是叫做 LCP, IPCP,
        UPAP 及 CHAP 的 protocol set, 负责协调连线。并把连线导入可以运
        作的状态中以便认证 (authentication) 。



--
                              钢  铁  战  士 

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