章内容
第一部分: 设置你的网络
设置你的网络
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所写的
<
>.由O''Reilly and Associates 出版. 这本书
有对TCP/IP的更具深度的描述并且覆盖了很多本书仅简单涉及的UNIX通用服务程序.
这本书在涉及配置文件等的时候会显得有些过时, 但你仍能领会出其中的概念. 如
果你对(TCP/IP)协议本身很感兴趣的话, Richard Stivens写了从理论开始一直到
实践知识的整整三卷书. <>已由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模式.
否则在取目录列表时会超时.