FreeBSD完全新手指南
              -----设置你的网络
con

               本章内容
                        第一部分: 设置你的网络

                设置你的网络

                        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模式.
                        否则在取目录列表时会超时.

<返回>