发信人: con() 
整理人: hahalee(1999-02-17 19:45:52), 站内信件
 | 
 
 
本章内容         第一部分: 设置你的网络
  设置你的网络                  1. 配置网络界面         2. TCP/IP 介绍         3. Inetd, "超级"服务程序         4. 文件传输协议         5. 电子邮件         6. POP3 电子邮件         7. Windows 文件共享: SAMBA         8. Web Servers         9. 设置一个域名服务器         10. 路由/网关         11. 防火墙         12. IP 网络地址转化
  1. 配置网络界面      一个网络界面就是一个使你能同你的网络通信的设备. 这些设备可以是一个网卡, 或者一个调制解调器, 或是其他各种各样的使你能够通信的设备. 这些设备需要进 行配置以便使网络能够认出你是谁. 这些界面将用TCP/IP网络协议来配置. 通常在 /etc/rc.conf里配置, 或者/etc/sysconfig如果你用2.2.1或更老的版本.
  2. TCP/IP 介绍
          2.1 IP - Internet 协议         2.2 TCP - 传输控制协议      TCP/IP 是FreeBSD用来进行网络通信的协议. 当然, TCP/IP也是整个Internet 用来通信的协议, 这意味着FreeBSD也能用在Internet上. 本章试图给你一个 TCP/IP协议的概貌和在一个TCP/IP网络上配置你的FreeBSD机器所需要了解的内容.
    在我们向你对TCP/IP作足够的介绍以使你能把它运行起来的同时, 如果你在维 护一个FreeBSD网络(或者任何类似的TCP/IP网络), 几乎可以肯定你还要对TCP/IP 协议有更多的了解. TCP/IP是一个大的足够用一整本书来描述的协议, 并且需要很 多人来完成! (恕我直言)有本很好的关于这个主题的书就是Craig Hunt所写的 <<TCP/IP Network Administration>>.由O'Reilly and Associates 出版. 这本书 有对TCP/IP的更具深度的描述并且覆盖了很多本书仅简单涉及的UNIX通用服务程序. 这本书在涉及配置文件等的时候会显得有些过时, 但你仍能领会出其中的概念. 如 果你对(TCP/IP)协议本身很感兴趣的话, Richard Stivens写了从理论开始一直到 实践知识的整整三卷书. <<TCP/IP Illustrated>>已由Addison Wesley出版.
          注意:
          虽然FreeBSD也可以使用Apple-talk和IPX/SPX(Novell)协议, 但这并         不是FreeBSD所使用的标准协议,所以我们将把注意力集中到FreeBSD使         用的TCP/IP上.在本书的应用程序部分将看到如何使FreeBSD成为Apple         和Novell 文件/打印服务器的替代品 - 我们在那里将讨论如何打开适         当的协议.
    关于TCP/IP首先你需要知道的是它实际上是一族协议. 这一族协议使我们能把数据 从一台计算机传到另一台 -- 一个源头到一个目标 -- 而不知道数据在这段旅途上走 过的确切的路径.有三个重要的部分你需要了解: IP, TCP, 和 UDP.
  2.1 IP - Internet 协议
    本质上说, IP 产生包(packets). 什么是一个包? 一个包是一个小的数据"单元" 或"包".看下面的例子能使我们很容易理解包是什么, 和IP怎样来制造包. 假设你 有200k的数据要通过Internet传给你的朋友. 你可以把这个文件想成是一个数据 的"流" - 这个文件有一个开始,和一个顺序的字节集合(这里是200K个字节)一直到 文件的末尾. 任何这样的连续性的数据集合被称作"流",由于数据据有方向性. 识 别数据流最关键的是集合里的字节存在次序. IP 所做的就是把这些连续的数据流断 开成为离散的包("packets")以使它们能够被独立发送. IP 把数据流切成一个个的包, 然后包装这些包以使它们适合在Internet上传送, 并且在包上标明源地址和目标地址.
 
  2.2 TCP - 传输控制协议
   有关IP刚才我所没有告诉你的是, 很古怪的说, IP 是不可靠的. IP 并不保证某 个包能到达目的地, 或者全部包到达后再按原来的顺序恢复成数据流. 这就是要有 TCP的原因. TCP 按正确的次序来还原包并且保证所有的包都到达目的地. 没有 TCP, IP几乎没有用! 我猜这就是为什么叫它们TCP/IP的原因!! :-)
    有一个次序号藏在每个包的地址信息里. IP 发送每个包出去的时候递增次序号, 而TCP用这些次序号把到达的包按正确的次序重新装配起来. TCP 也用次序号来判 断是否有包丢失. 如果某个包没有出现(不正确的路由,等等原因)TCP会向源地址 请求再发一次这个包. 并且将保持重试直到所有的包凑成一个数据流. 因此,TCP 使得TCP/IP包传送机制"可靠".
    TCP还加入了IP所没有提供的另一层次上的功能: 端口. IP 地址标识出网络上的 每台计算机, 而TCP 端口号标识出每台计算机上提供的每种服务. 端口号使得你 能同时运行很多种服务, 并且有一种机制保证每个请求能得到正确的服务. Web  服务器也许是你最熟悉的一个例子. WWW服务程序通常运行在80端口上. IP地址 加端口号请求的标准形式是 IP:端口号 - 例如, 192.168.100:80 . TCP使我们 能够同时向同一IP地址的Web 服务程序和telnet 服务程序(端口23)发送包. 太棒了!根据记录, 端口号的范围是 0 - 65000. 所有小于1024的端口号是有限 制的,意味着只有root有权限开始一个监听端口号小于1024的服务程序. 所有大 于1024的则可被任何用户进程使用 - 不需要有root权限.
 
  3. Inetd, "超级"服务程序
    正如我们先前揭示的, 一个FreeBSD系统能同时运行很多程序 - 对于FreeBSD 网络服务程序来说也一样; 它将为你要提供的每一种服务运行一个程序. 问题是, 每个服务程序都会吃掉一大块内存 - 而内存总是宝贵的. 解决方案是在收到请求 后启动相应的服务, 而在发送完应答给产生请求的客户机后又终止它. 然而一个服 务怎么知道什么时候该醒来呢?
    这就是有inetd的原因. 它叫做 Internet "超级服务程序" 因为它控制着很多一 台典型的UNIX主机上存在的服务程序. inetd 监视着所有到达服务器上的请求的端 口号. 当一个请求到达时, inetd 在/etc/services 里寻找服务的名字. 就象我们 能在下面看到的, services 文件是一个端口号和服务名称的简单映射:
                  (图略)
    在inatd知道了要启动的服务的名字后, 它会在它的配置文件, /etc/inetd.conf 里查找配置信息,配置文件看起来象这样:
                  (图略)
    该文件通常的格式是:                 ● 服务名称                 ● socket 类型                 ●  协议                 ●  {wait|nowait}[/max-child]                 ●  用户                 ●  服务程序                 ●  服务程序参数
    现在用一个具体的例子来说明它们分别代表什么.
          telnet stream tcp nowait root /usr/libexec/telnetd telnetd
    第一个字段,telnet,是服务的名称. 这个名字必须和/etc/services里找到 的名字精确匹配. 第二和第三个字段, stream tcp, 描述了该服务所产生的连接的类 型. 在这种情况下, tcp 将处理包的顺序以使下载的信息成为无差错的数据流. 本字 段另外仅有一个选项,dgram udp,指定用UDP,而不是TCP来处理包的顺序(TCP/IP 里所 谓的"不可靠"数据报(datagram)).
    第四个字段,root,指定用来运行服务的用户ID. inetd所启动的大多数程序都以 "root"或"nobody"身份运行. 接下来的字段告诉inetd在哪能找到要运行的程序, 和 任何要求的参数(在这个telnet 的例子里, 没有任何参数).
          注意:
          通过inetd来运行程序的缺点是, 当一个服务被频繁的运行,可能一         秒一次,或甚至一秒数百次的时候用它(inatd)不是很有效率. 你会         问为什么? 通常用inatd来运行程序可以减小占用的内存数量, 但这         带来的惩罚是每当有请求到达的时候都必须"fork"程序. 简单的说,         "fork" 意味着inetd要为服务启动新的进程. 我们不打算详细讨论         fork一个进程所需要的额外开销的技术细节. 而只是说会有一个额         外的开销, 而在一个繁忙的系统上这足以导致一个可观的延迟. 因         此一些服务以"deamons"形式而非"inetd"运行. 你决定如何运行一个         服务程序完全取决于你认为它的重要性. 如果性能是决定因素,使程         序成为一个daemon(即常驻内存). 如果想减少内存的开销,则通过inetd         运行程序. 典型的, FTP,finger,talk,POP3,和telnetd通过inetd服         务程序来运行,但web servers 和邮件发送server(通常是sendmail)         是daemons.象NCSA和Apache之类的web Server甚至会事先"pre-forking"         几份拷贝以消除请求的数量很多时forking产生的额外开销! 如果你         安装了一种新的服务, 附带的文档通常会告诉你最有效使用它的方法.
 
  4. 文件传输协议
  Not yet Scheduled
  5. 电子邮件
  Not yet Scheduled
  6. POP3 电子邮件
  Not yet Scheduled
  7. Windows 文件共享:SAMBA
    如果你用ports来安装,则它把所有东西都装在/usr/lcoal/samba/二进制文件放 在bin目录里. 配置文件位于lib/smb.conf
    如果是用package,它会把东西装到/usr/local/sbin配置文件在 /usr/lcoal/etc/smb.conf. 要想知道如何创建smb.conf配置文件可以读smb.conf 的man page. 这份关于smb.conf的文档写的很好也很全面. 你有可能会放到配置 文件里的每样东西都包含在man page里了.要读它,只需输入:
  man smb.conf                    使用testparm来检查你的配置文件. testparm 也会告诉你缺省的配置文件在 哪里.
    不管你是如何安装samba的, 你需要修改你的/etc/rc.local文件以使Samba在 系统启动时启动. 在你的rc.local里加入这两行:
  /usr/lcoal/sbin/smbd -D /usr/local/sbin/nmbd -D
  8. Web Servers
  Not yet Scheduled
  9. 设置一个域名服务器
    首先你要有一个有效的域名. 你需要在你注册域名的地方给出你的主域名 服务器的IP地址. INTERNIC或你上一级的DNS会把这些做好的.
    如果你设置一个子域名, 你需要在你的域上建立一个映射指向那个域的主 域名服务器.
  首先:
    在/etc/sysconfig文件,或者是新的/etc/rc.conf,加入一行:
  namedflags="-b /etc/namedb.named.boot"
    这将在系统启动时启动名字服务的Daemon, 并让它把/etc/namedb/named.boot 作为配置文件.
    现在进入/etc/namedb/目录,然后输入:
  sh make-localhost
    这将在目录里创建localhost.rev文件. 所有的本地传输都需要这个文件.
    现在创建或编辑named.boot文件
  ++++++++++++++NAMED.BOOT EXAMPLE ++++++++++++++++++++
  ;semi colons comment out statments.
  ; sortlist 128.3.0.0
  ; The sort list gives higher priority to certain domains in the case ;of multi-homed hosts.
  directory       /etc/namedb
  ; this denotes the directory that named should look to find all of the  ; source files.
  ; type    domain                source host/file                backup file
  cache     .                                                     named.root
  ; named keeps a cache of recently looked up hostname in the file mentioned.
  primary   0.0.127.IN-ADDR.ARPA  localhost.rev
  ; this is the local host entry needs to be there. Usually automatic.
       primary  Berkeley.EDU           your.domain.zone      primary  32.128.IN-ADDR.ARPA    your.domain.rev
  ; These lines are a pair.  They represent the primary domain you control ; The first one is your domain and the second is the reverse lookup table. ; You need to have each DNS entry entered in to both files. ; You will need a pair of primary lines for each primary domain that  ; you administer.
       secondary Berkeley.EDU          128.32.130.11 128.32.133.1      ucbhosts.bak      secondary 32.128.IN-ADDR.ARPA   128.32.130.11 128.32.133.1      ucbhosts.rev.bak
  ; These lines are a pair also.  They represent the domains that you are  ; interested in knowing about if their DNS goes down.  Or you may just be ; the back up DNS for them.
  ; Instead of source files, you specify the host that is the primary DNS ; for that domain.  You must also specify that filename that named will ; store the temporary table in. ; You need a pair of these lines for each of the Domains that you are ; a secondary DNS for. ++++++++++++++++++++++End Example Named.boot File++++++++++++++++++
    如果你有域"my.domain.com", IP地址的范围是10.20.40 - 10.20.40.255,并且 需要一个主域名服务器,你可以在named.boot文件里加入这几行:
  primary my.domain.com my.domain.com.zone
  primary 40.20.10.IN-ADDR.ARPA my.domain.com.rev
    现在需要制造primary source文件. 创建一个名为/etc/named/your.domain.zone 的文件(替换成你实际的域名). 它必须和named.boot里的primary段指定的文件名 匹配.
   这是一个这样的文件的例子:
 
       IN      soa     bbcc.ctc.edu.   root.bbcc.ctc.edu. (                                      28      ;serial                                      10800  ;refresh every 3 hours                                      900    ;retry every 15 minutes                                      604800 ;expire after a week                                      86400  ;minimum of a day                                      )                              IN              NS      bbcc.ctc.edu.                              IN              NS      ctc.ctc.edu.                              IN              NS      bb.cc.wa.us.      bbcc.ctc.edu.           IN              A       134.39.180.254      mail                    IN              CNAME   bbcc.ctc.edu.      www                     IN              CNAME   bbcc.ctc.edu.      irc                     IN              CNAME   bbcc.ctc.edu.      bigbend.ctc.edu.        IN              CNAME   bbcc.ctc.edu.      athena                  IN              A       134.39.180.5                              IN              HINFO   intel 586-133 winnt      proto                   IN              A       134.39.180.6      aries                   IN              CNAME   bb.cc.wa.us.      sal                     IN              A       134.39.180.8      dialup3                 IN              A       134.39.180.252      ;end of file.
 
  5)现在要产生主反向解析(primary reverse lookup)文件. 创建一个叫 /etc/named/your.domain.rev的文件.(替换成你实际的域名)
    它必须和named.boot里的primary段指定的文件名匹配. 这是一个例子:
 
       IN      soa     bbcc.ctc.edu.   root.bbcc.ctc.edu. (                                      28      ;serial                                      10800  ;refresh every 3 hours                                      900    ;retry every 15 minutes                                      604800 ;expire after a week                                      86400  ;minimum of a day                                      )      8               IN              PTR     sal.bbcc.ctc.edu.      252             IN              PTR     dialup.bbcc.ctc.edu.
 
 
  10. 路由/网关
  Not yet Scheduled
  11. 防火墙
  Not yet Scheduled
  12. IP 网络地址转化
   12.1. 1)装入核心模块  12.2. 2)设置NAT规则  12.3. 3)装入NAT规则  12.4. 4)在网络界面间允许路由  12.5. 5)到子网的静态路由  12.6. 6)确定你的网络界面已被配置
  在装完IpFilter后,你需要改动这三个文件:
  /etc/rc.local
  /etc/sysconfig
  /etc/natrules
  这是在FreeBSD 2.1.6-RELEASE上用ipfilter 3.1.4的测试.
  12.1. 1)装入核心模块
    如果你使用可装入的核心模块你必须编辑/etc/rc.local文件以使模块在 启动时被装入.
  用这一行: modload /lkm/if_ipl.o
  如果没有使用,跳过此步.
  12.2. 2)设置NAT规则
    产生一个叫/etc/natrules的文件并放入你的系统所需要的规则. 如果你要 使用整个10网络:
  map fxp0 10.0.0.0/8 -> 208.8.0.1/32 portmap tcp/udp 10000:65000
  下面是命令每一部分的解释:
  map 开始命令.
  fxp0 是真实internet地址的界面
  10.0.0.0 是要使用的子网
  /8 子网掩码, 就是 255.0.0.0
  208.8.0.1 所使用的真实IP地址
  /32 子网掩码255.255.255.255, 仅使用此IP地址
  portmap tcp/udp 10000:65000
  整个网络都用此端口号来重定向tcp/udp调用.
  12.3. 3)装入NAT规则      每次计算机重新启动时NAT规则都必须被装入. 在你的/etc/rc.local文件里 放入这行: ipnat -f /etc/natrules
    要检查它是否已装入,以root身份运行: ipnat -ls
  12.4. 4)在网络界面间允许路由
    告诉核心路由这些地址. 在/etc/rc.conf里加入:
  Gateway=YES
    或者在/etc/rc.local里加入:
  sysctl -w net.inet.ip.forwarding=1   12.5. 5)到子网的静态路由
    现在要给子网加入静态路由.编辑你的/etc/rc.conf, 在一个旧一些的系统 上是/etc/sysconfig.
  static_routes="foo" route_foo="10.0.0.0 -netmask 0xf0000000 -interface 10.0.0.1"
  12.6. 6)确定你的网络界面已被配置
    我有两块Intel Ether Express Pro B网卡. 一块是208.8.0.1另一块是10.0.0.1 你需要在/etc/sysconfig里作如下配置:
       network_interfaces="fxp0 fxp1"      ifconfig_fxp0="inet 208.8.0.1 netmask 255.255.255.0"      ifconfig_fxp1="inet 10.0.0.1 netmask 255.0.0.0"
          注意:
          当一台客户机在虚拟网络上使用ftp时,要用passive模式.         否则在取目录列表时会超时. -- ※ 修改:.con 于 Feb 17 13:06:22 修改本文.[FROM: 203.208.6.145] ※ 来源:.网易 BBS bbs.netease.com.[FROM: 203.208.6.145]
  | 
 
 
 |