Chapter 9. 网络

Table of Contents
9.1. 网络设定文件
9.2. 连接到 Internet
9.3. 建立小型的家庭网络
9.4. IPNAT
9.5. 经由串行端口连接两台 PC
9.6. NFS

这一章介绍一些基本的网络主题,例如,联机到因特网和联机到 LAN(局域网络)。使用序列 cable 连 接两台计算机的情况也有描述。

为了要连接两台计算机来交换数据,在两者之间必须存在一些连接的类型。 例如,两台机器可以有网络卡 (NICs) 利用缆线连接,或是经由一些装置, 像集线器或是交换器。这个类型通常用作为 LAN (Local Area Network)。

在 Internet 上,则使用 WAN (Wide Area Network): 当你连接到 Internet,你可以存取实际上距离非常远的计算机,而不需要 知道两者间的联机是如何运作的。

9.1. 网络设定文件

以下是网络设定文件的列表。关于这些档案的用途,有一些已经在 第一章谈到过了,而将会在以下做更详细的描述。

/etc/hosts

区域主机数据库文件。每一行包含一台已经承认的主机信息,并 包括主机地址,主机名称和别名。小型的网络可以设定只使用 hosts 档,而不用 name server

/etc/resolv.conf

这个档案指明了 Domain Name System 应该如何运作来存取 Internet。通常它包含了名称服务器的地址。

/etc/ifconfig.xxx

这个档案被用来在开机时,自动地设定网络卡。

/etc/mygate

包含网关器的 IP 地址。

/etc/nsswitch.conf

名称服务交换设定档。它控制了数据库搜寻的工作,包括承认的 主机,使用者,群组等。此外,这个档案还定义了所要搜寻的 数据库,例如此行:

hosts:    files dns
	    
指明主机数据库来自两个地方,files (the local /etc/hosts file) 和 DNS, (the Internet Domain Name System) 并且本机上档案优先于 DNS。

通常不需要修改此檔。

9.2. 连接到 Internet

Internet 联机有许多类型:这一段解释如何使用 modem 经由电话线 并利用 PPP 协议连接到 ISP,提供一个一般 的设定。为了要进行网络联机,以下步骤必须执行:

  1. 从 ISP 获得必要的信息。

  2. 编辑 /etc/resolv.conf 并检查 /etc/nsswitch.conf

  3. 建立 /etc/ppp/etc/ppp/peers 目录。

  4. 建立联机的 script,chat 文件和 pppd 的选项文件。

  5. 建立使用者密码认证文件。

从以上的列表来看,好像需要很多复杂的程序要做。实际上,这些 步骤是非常容易的:这只是修改,建立或简单地检查一些小的 文字文件而已。以下的范例中,我们将假设 modem 连接到第二个 串行端口上 /dev/tty01 (COM2 in DOS.)。

9.2.1. 获得联机信息

第一件事要询问 ISP 必要的联机信息,即:

  • 最近的拨接号码。

  • 使用的认证方法。

  • 用来联机的使用者名称和密码。

  • 名称服务器的 IP 地址。

9.2.2. resolv.conf 和 nsswitch.conf

/etc/resolv.conf 必须使用 ISP 所提供 的信息来设定,特别是 DNS 地址。 此例中,两个 DNS 为 "194.109.123.2" 和 "191.200.4.52"。

Example 9-1. resolv.conf

nameserver 194.109.123.2
nameserver 191.200.4.52
#lookup file bind
      

Note: 最后一行 ("lookup file bind") 指出在名称不 出现在 /etc/hosts 时,才使用 地址服务器。这一行被标注了,因为 NetBSD 1.4 以后 已经不再需要了;这类的信息现在被定义在 /etc/nsswitch.conf。新的 Name Service Switch 改以存取程序所使用的数据库来寻找 基本的系统信息。

现在有个 /etc/nsswitch.conf 文件 的范例。

Example 9-2. nsswitch.conf

# /etc/nsswitch.conf
group:         compat
group_compat:  nis
hosts:         files dns
netgroup:      files [notfound=return] nis
networks:      files
passwd:        compat
passwd_compat: nis
	

Note: 只有以 "hosts:" 为开头一行被修改;当要解析 主机名称时,本机上的 hosts 将会 在使用 DNS 之前被搜寻。

9.2.3. 为 pppd 建立目录

/etc/ppp/etc/ppp/peers 目录将会包含有关 PPP 联机的设定档。在首次安装 NetBSD 后,它们并不存在 而必须被建立 (chmod 700.)

9.2.4. 联机 script 和 chat 档

联机 script 将用来执行 pppd 指令; 它位于 /etc/ppp/peers 而通常具有 ISP 的 名称。例如,如果 ISP 的名称是 BigNet 而你联机到 ISP 的使用者名称是 alan,则联机 script 可以是: 是

Example 9-3. 联机 script

# /etc/ppp/peers/bignet
connect '/usr/sbin/chat -v -f /etc/ppp/peers/bignet.chat'
noauth
user alan
remotename bignet.it
      

在先前的例子中,script 指明了 chat 档 来进行联机。相关的选项在 pppd(8) 在线手册中,有详细地描述。

Note: 如果你发生过联机的问题,加入以下两行到联机 script 中。

debug
kdebug 4
      
你将在系统进行联机时,获得执行运作时的讯息。 详细说明请看 pppd(8), syslog.conf(5)。

联机 script 呼叫 chat 应用程序来 处理实际上的联机 (modem 初始化,拨号, ...)。 chat 的参数也可以设定在联机 script 中,但最好放在另外的档案里。例如,拨接号码是 0299999999,chat script 的范例是:

Example 9-4. Chat 檔

# /etc/ppp/peers/bignet.chat
ABORT BUSY
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
'' ATDT0299999999
CONNECT ''
      

Note: 如果 chat 档有问题,你可以试着使用 cu 来进行手动拨接并检查你接收的的讯息。 请看 cu(1)。

9.2.5. 认证

经由两个系统的认证,可以用来识别相互的系统,在此练习中, 只假设被 ISP 认证,而没有认证 ISP,我们使用以下方法。

  • login

  • PAP/CHAP

大部分的 ISP 使用 PAP/CHAP 认证。

9.2.5.1. PAP/CHAP 认证

认证数据被储存在 /etc/ppp/pap-secrets for PAP 和 /etc/ppp/chap-secrets for CHAP。 并具有以下格式:

user * password
        

例如:

alan * pZY9o
        

Note: 为了安全性的考量, pap-secretschap-secrets 档的拥有者为 root 并且权限为 "600"。

9.2.5.2. Login 认证

这个认证的类型在今日并没有被广泛的使用;如果 ISP 使用 login 认证,user name 和 password 必须写在 chat 档而不是 PAP/CHAP 文件,因为 chat 文件模拟了一个交谈式的认证。在这个 情况里,必须为 chat 档设定适当的权限。

以下为 chat 文件使用 login 认证的范例:

Example 9-5. 使用 login 的 Chat 檔

# /etc/ppp/peers/bignet.chat
ABORT BUSY
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
'' ATDT0299999999
CONNECT ''
TIMEOUT 50
ogin: alan
ssword: pZY9o
        

9.2.6. pppd 选项

剩下唯一要做的事就是建立 pppd 的 选项文件,即为 /etc/ppp/options (chmod 644)。

Example 9-6. /etc/ppp/options

/dev/tty01
lock
crtscts
57600
modem
defaultroute
noipdefault
	

要了解这些选项的意义,请看 pppd(8) 在线手册。

9.2.7. 测试 modem

在执行联机以前,做个快速的 modem 测试是个好主意,来确认 modem 硬件上的联机和沟通的功能。可以使用 cu 进行测试,如以下的例子。

  1. 建立 /etc/uucp/port 并包含 以下这几行:

    type modem
    port modem
    device /dev/tty01
    speed 115200
    	    
    (将 /dev/tty01 换成正确的装置。)

  2. 键入 cu -p modem,开始传送命令给 modem。例如:

    # cu -p modem
    Connected.
    ATZ
    OK
    ~.
    
    Disconnected.
    #
    	    
    在先前的范例中,重置命令 (ATZ) 被送到 modem,而回应是 OK: 沟通正常。要离开 cu,在 . (dot) 后键入 ~ (tilde), 像前例一样。

如果 modem 不能运作,检查所连接的连接埠(例如,在 cu 中所使用的连接埠)。 电话线也常常会导致问题。

Note: 当你使用 cu 时,如果有讯息显示 "Permission denied",检查 /dev/tty## 装置的拥有者是谁: 他必须为 uucp。例如:

$ ls -l /dev/tty00
crw-------  1 uucp  wheel  8, 0 Mar 22 20:39 /dev/tty00
	

如果拥有者是 root,则会发生:

$ ls -l /dev/tty00
crw-------  1 root  wheel  8, 0 Mar 22 20:39 /dev/tty00
$ cu -p modem
cu: open (/dev/tty00): Permission denied
cu: All matching ports in use
	

9.2.8. 进行联机

一切都准备就绪,使用以下指令执行:

# pppd call bignet
      

bignet 是以经设定在 联机 script 中的名称。要查看 pppd 的 联机讯息,使用以下指令:

# tail -f /var/log/messages
      

要中断联机,针对 pppd 执行 kill -HUP

9.2.9. 使用 script 执行联机和中断

当联机正确地运作时,则我们可以撰写一些 script 来避免在 每一次进行联机时,都重复同样的指令。我们可以命名两个 script,例如,ppp-upppp-down

ppp-up 用来联机到 ISP。

Example 9-7. ppp-up

#!/bin/sh
MODEM=tty01
POP=bignet
if [ -f /var/spool/lock/LCK..$MODEM ]; then
  echo ppp is already running...
else
  pppd call $POP
  tail -f /var/log/messages
fi
      

ppp-down 用来中断联机:

Example 9-8. ppp-down

#!/bin/sh
MODEM=tty01
if [ -f /var/spool/lock/LCK..$MODEM ]; then
  echo -f killing pppd...
  kill -HUP `cat /var/spool/lock/LCK..$MODEM`
  echo done
else
  echo ppp is not active
fi
      

在执行 pppd 时,这两个 script 都 具有一些方便之处,它会在 /var/spool/lock 目录建立 LCK..tty01 档案。 这个档案包含了 pppdpid

两个 script 必须是可执行的:

# chmod u+x ppp-up ppp-down
      

9.3. 建立小型的家庭网络

网络功能是 Unix 和 NetBSD 的主要优势之一:网络具有强大的 功能又容易设定,而且也不贵,因为不需要购买额外的软件来进行通讯 的运作或是建立服务器。Section 9.4 解释了如何设定 一台 NetBSD 机器来扮演网络中网关器的角色:所有的联机使用 IPNAT 连接到网关器。在建立网络之前,唯一的事就是 购买 NetBSD 支持的网络卡 (参考 INSTALL 可以 得到支持硬件的清单)。

首先,网络卡必须安装并连接到集线器,交换器或是另一张网络卡。 (请看 Figure 9-1

下一步,检查网络卡是否被核心支持,可查看 dmesg 指令的输出。在以下的例子中,被核心支持的网络卡是 NE2000 相容卡:

...
ne0 at isa0 port 0x280-0x29f irq 9
ne0: NE2000 Ethernet
ne0: Ethernet address 00:c2:dd:c1:d1:21
...
    

如果卡没有被核心承认,检查它是否在核心设定档内并且卡的 IRQ 是否和核心期望的值相符合。例如,在核心设定档中,有一行 isa NE2000 的设定;核心预期卡的 IRQ 为 9。

...
ne0 at isa? port 0x280 irq 9 # NE[12]000 ethernet cards
...
    

如果卡的设定并不相同,它在开机时,将不能被侦测到。在此例中, 你以更改核心设定档并重新编译一个核心,或是改变卡的设定(通常 可经由设定磁盘来设定,如果是老旧的卡,则使用 jumper)。

以下的指令显示网络卡目前的设定:

# ifconfig ne0
ne0: flags=8822<BROADCAST,NOTRAILERS,SIMPLEX,MULTICAST> mtu 1500
	  media: Ethernet 10base2
    

网络卡的软件设定是非常容易的。IP 地址 "192.168.1.1" (为内部的网络所保留的)被指派到这张卡上。

# ifconfig ne0 inet 192.168.1.1 netmask 0xffffff00
    

重复前项指令并得到不同的结果:

# ifconfig ne0
ne0: flags=8863<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	  media: Ethernet 10base2
	  inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
    

ifconfig 的输出现在被改变了:IP 地址被 印出来了而且有两个新的 flags,"UP" 和 "RUNNING"。如果接口不是 "UP",它将不能被 系统用来传送封包。

For example, if 192.168.1.2 is the address of the active host: 主机被指派了 IP 地址 192.168.1.1,这是被内部网络所保留的而不能 经由 Internet 到达的地址。设定已经完成了而必须被测试;如果有 另一台主机在网络上,可利用 ping 来测试。

# ping 192.168.1.2
PING ape (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: icmp_seq=0 ttl=255 time=1.286 ms
64 bytes from 192.168.1.2: icmp_seq=1 ttl=255 time=0.649 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=255 time=0.681 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=255 time=0.656 ms
^C
----ape PING Statistics----
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.649/0.818/1.286/0.312 ms
    

但是现在的设定在下一次开机时会消失,必须重复进行一次网络卡 的设定。为了避免每次开机时重复设定网络卡,需要完成两件事: 第一,建立 /etc/ifconfig.ne0 档并包含 以下这行:

inet 192.168.1.1 netmask 0xffffff00
    

接着,在 /etc/rc.conf 中,设定以下选项

auto_ifconfig=YES
    

在下一次开机时,网络卡将会被自动地设定了。

/etc/hosts 是 IP 地址和别名的数据库: 它应该包含属于这个内部网络中的主机地址。例如:

#	$NetBSD: chap-net.sgml,v 1.1.1.2 2001/09/05 17:04:08 jrf Exp $
#
# Host Database
# This file should contain the addresses and aliases
# for local hosts that share this file.
# It is used only for "ifconfig" and other operations
# before the nameserver is started.
#
#
127.0.0.1		localhost
#
# RFC 1918 specifies that these networks are "internal".
# 10.0.0.0	10.255.255.255
# 172.16.0.0	172.31.255.255
# 192.168.0.0	192.168.255.255

192.168.1.1	ape.insetti.net ape
192.168.1.2	vespa.insetti.net vespa
    

/etc/nsswitch.conf 应该被修改像 Example 9-2 所解释的一样。

Note: 在此例中,/etc/ifconfig.ne0 被建立因为 被核心承认的网络卡为 ne0;如果你使用不 同的卡,置换适当的名字以取代 ne0。

摘要,设定网络卡必须执行以下的步骤:网络卡必须被安装并与其它 主机相连接。接着必须设定网络卡(使用 ifconfig) 并且,最后,/etc/hosts/etc/nsswitch.conf 档必须被修改。 这种网络类型的管理非常简单,而且适合不太复杂的小型网络。

9.4. IPNAT

这个字 IPNAT 是由以下字母的开头组成的 Internet Protocol Network Address Translation,可以进行内部网络 和真实网络 (Internet) 的联机工作。这是指只有一个 "真实的" IP,静态的或动态的属于一台跑着 IPNAT 的网关器, 它也可以让内部网络上的主机,同时联机到 Internet。

一些 IPNAT 范例的使用可以在 /usr/share/examples/ipf 目录中找到:参考 BASIC.NATnat-setup

以下设定的例子的详细描述在 Figure 9-1host 1 可以利用 modem 拨接连接到 Internet 并且获得动态 IP 地址。host 2host 3 不能直接与 Internet 沟通:IPNAT 将 会允许他们如此做:host 1 将扮演 hosts 2 and 3 的网关器。

Figure 9-1. 在网络中使用网关器

9.4.1. 设定网关器/防火墙

要使用 IPNAT 则在核心设定档中 "pseudo-device ipfilter" 选项必须打开。 要检查在目前核心中是否已经包含此选项:

# sysctl net.inet.ip.forwarding
net.inet.ip.forwarding = 1
      

如果结果是 "1",如上述例子一般,则选项是打开的, 否则如果结果是 "0",则选项是关闭的。你可以做 这两件事:

  1. 编译新核心,并加入 GATEWAY 选项为默认值。

  2. 使用以下指令在目前的核心中打开选项:

    # sysctl -w net.inet.ip.forwarding=1
    	    

    如果你将前项指令放入开机 script 中(例如, /etc/rc.local), 它将在下一次开机时自动地被执行。

这一段剩余的部份将解释如何建立 IPNAT 设定,并使它在进行 PPP 联机时被自动地启动。使用这个设定,在家庭网络中(例子) 的所有主机,都将能够经由网关器连接到 Internet,甚至它们 并不使用 NetBSD。

首先,建立空白的 /etc/ipf.conf 檔:

# touch /etc/ipf.conf
      

接着,建立 /etc/ipnat.conf 文件并 包含以下规则:

map ppp0 192.168.1.1/24 -> 0/32 proxy port ftp ftp/tcp
map ppp0 192.168.1.1/24 -> 0/32 portmap tcp/udp 40000:60000
map ppp0 192.168.1.1/24 -> 0/32
      

The third line is used to enable ICMP, ping, etc. 192.168.1.1/24 是应该被映对的网络地址(此例中, 192.168.1.0/24 也是)。第一行的设定是选择性的:它使得 FTP 能经由网关器运作。第二行设定用来修正 tcp 和 udp 封包; portmapping 是必要的,因为多对一的关系)。

/etc/rc.conf 中, portmap 必须被打开。 (ipfilter 则不需要)

建立 /etc/ppp/ip-up 檔;它将在每次 进行 PPP 联机时被呼叫。

#!/bin/sh
# /etc/ppp/ip-up
/usr/sbin/ipnat -F
/usr/sbin/ipnat -C
/sbin/ipf -E
/usr/sbin/ipnat -f /etc/ipnat.conf
      

建立 /etc/ppp/ip-down;它将在每次 PPP 进行 断线时被呼叫。

#!/bin/sh
# /etc/ppp/ip-down
/sbin/ipf -D
/usr/sbin/ipnat -C
      

ip-upip-down 都 必须是可执行的:

# chmod u+x ip-up ip-down
      

网关器已经准备好了。

9.4.2. 设定 clients

Create a /etc/resolv.conf file like the one on the gateway machine. 建立 /etc/resolv.conf 档并和 网关器上的一样。

键入以下指令:

# route add default 192.168.1.1
      

192.168.1.1 是网关器的地址。

当然,你不需要每次执行这个指令,最好设定 "defaultroute" 选项在 /etc/rc.conf 中或是写入网关器的地址到 /etc/mygate 中: default route 将在系统初始化的时候,被自动地设定,并使用 /etc/mygate 的内容 (或 defaultroute 选项) 作为 route add default 指令的参数。

如果 client 机器不使用 NetBSD,设定将会不相同。 在 Windows PC 上,你需要适当地设定 TCP/IP 协议的网关器为 NetBSD 网关器 的 IP 地址。

这就是 client 机器所要做的事。

9.4.3. 一些有用的指令

以下有用的指令可以用来诊断问题:

ping

netstat -r

显示 routing table (类似 route show).

traceroute

在 client 端显示封包到其它目的地的路径。

tcpdump

在网关器上用来监督 TCP/IP 流量。

9.5. 经由串行端口连接两台 PC

如果你需要在两台没有网络设备的 PC 之间传输数据,而将数据复制到 磁盘上又是不太方便的时候,最简单的解决方案是:两台机器利用序列 缆线做网络连接 (a null modem cable.) 以下的段落描述一些设定。

9.5.1. 使用 BSD 或 Linux 连接到 NetBSD

最简单的例子就是两台机器都执行 NetBSD:使用 SLIP 协议联机是非常简单的。在第一台机器上 执行以下指令:

# slattach /dev/tty00
# ifconfig sl0 inet 192.168.1.1 192.168.1.2
      

在第二台机器上执行以下指令:

# slattach /dev/tty00
# ifconfig sl0 inet 192.168.1.2 192.168.1.1
      

现在你可以使用 ping 做测试;例如, 在第二台 PC 上执行:

# ping 192.168.1.1
      

如果一切正常,则现在在两台机器上已经具有网络联机了,而 ftptelnet和其它相似的指令也能运用了。 机器的别名可写在 /etc/hosts 中。

  • 在以上的例子中,两台 PC 都使用第一串行端口 (/dev/tty0)。如果和你使用的不同, 请置换成适当的装置。

  • IP 地址像 192.168.x.x 是被保留用在"内部" 网络上的。第一台 PC 的地址是 192.168.1.1 而第二台 则为 192.168.1.2。

  • 要使用更快的传输,可以在slattach 指令中加上 -s 选项。

  • 要使用 ftp 传输档案,必须先启动 inetdftpd

Linux: 如果其中一台 PC 跑的是 Linux,则指令会有些不同 (只有在 Linux 机器上)。如果 Linux 机器的地址是 192.168.1.2,则需要以下指令:

# slattach -p slip -s 115200 /dev/ttyS0 &
# ifconfig sl0 192.168.1.2 pointopoint 192.168.1.1 up
# route add 192.168.1.1 dev sl0
      
别忘了要加上 "&"。

9.5.2. 连接 NetBSD 和 Windows NT

NetBSD 和 Windows NT 经由序列 null modem 缆线做网络联机也是相当容易的。基本上需要做的事是,在 Windows NT 下建立"远程访问"联机并在 NetBSD 上启动 pppd

在成为 root 后,在 /root 目录中建立 .ppprc 文件并启动 pppd 参考以下范例。

connect '/usr/sbin/chat -v CLIENT CLIENTSERVER'
local
tty00
115200
crtscts
lock
noauth
nodefaultroute
:192.168.1.2
      

第一行的意思将在稍后解释;192.168.1.2 是被 NetBSD 指派 到 Windows NT 主机的地址;tty00 是 用作联机的串行端口(第一串行端口)。

在 NT 上,null modem 必须从控制台 (调制解调器图标)中安装而使用这个 modem 的 Remote Access 联机必须建立。在 Windows NT 4 底下 null modem driver 是 标准配备,但它并不是 100% 的 null modem:当联机建立时, NT 会传送字符串 CLIENT 并期望接收到 CLIENTSERVER。这便是 .ppprc 中第一行的意义: 当联机建立时,chat 必须回答 NT, 否则联机将中断。

在远程访问联机的设定中,必须指明以下设定: 使用 null modem,电话号码 "1"(虽然不被使用), PPP 服务器,并只打开 TCP/IP 协议,使用的 IP 地址和 namservers(此例中为 NetBSD)。选择硬件控制流量并设定为 115200 8N1。

现在一切就绪,准备联机。

  • 使用 null modem 缆线连接两台机器的串行端口。

  • 在 NetBSD 中执行 pppd。 要查看 pppd 的讯息: tail -f /var/log/messages

  • 在 Windows NT 中建立远程访问联机。

9.5.3. 连接 NetBSD 和 Windows 95

Windows 95 的设定和 Windows NT 相似:Windows 95 使用远程访问 而 NetBSD 使用 PPP server。大部分(如果不是全部) Windows 95 的版本都没有null modem 驱动程序,这将会使事情较为复杂。最简单的解决方案是,从 Internet 搜寻一个有效的 null modem 驱动程序 (它是个小 .INF 档) 并重复和 Windows NT 一样 相同的步骤。唯一的不同是,.ppprc 的第一行 (用来呼叫 chat的) 可以 被移除。

如果你不能替 Windows 95 找到 null modem 驱动程序,我们 仍然可以进行:

  • 建立远程访问联机,如 Section 9.5.2 所述, 但是要使用"标准的调制解调器"。

  • .ppprc 中,置换呼叫 chat 的那一行为

    connect '/usr/sbin/chat -v ATH OK AT OK ATE0V1 OK AT OK ATDT CONNECT'
          

  • 建立联机,如Section 9.5.2 所述。

在这个方法中,当联机建立时,chat 会被 呼叫,用来模拟 Windows 95 认为的标准调制解调器,传回和 标准调制解调器一样的回答给 Windows 95。无论 Windows 95 传送 什么字符串,chat 都传回 OK。

9.6. NFS

我们在网络上可以使用 NFS 来共享档案和 目录。从档案共享的观点来看,提供档案和目录存取的计算机称之 为 server,而使用这些档案和目录的 计算机称之为 client。一台计算机可同时 成为 client 和 server。

client 主机可以经由 NFS 存取远程的目录,如果:

对远程的目录而言,mount 指令提供了丰富的 选项以供设定。

9.6.1. NFS 设定范例

警告:我从 NetBSD mailing list 上挑选了较为复杂的范例,而我 还没有测试过;它应该可以为 NFS 的运作 提供一些意见。

以下的情况为:五台 client 机器 (cli1, ...,cli5) 共享了在 server (buzz.toys.org.) 上的一些目录。某些 server 上的目录 只向特定的 client 开放,其它的目录则开放给所有的 client。 所有的 client 从 server 上开机并且必须挂上目录。

从 server 上开放的目录为:

/export/cli?/root

五个 root 目录分配给五台 client 机器。 每台 client 都有它自己的 root 目录。

/export/cli?/swap

五个 swap 目录分配给五台 swap 机器。

/export/common/usr

/usr 目录被所有的 client 主机共享。

/usr/src

/usr/src 目录被所有的 client 主机共享。

在 server 上存在以下的档案系统。

/dev/ra0a on /
/dev/ra0f on /usr
/dev/ra1a on /usr/src
/dev/ra2a on /export
      

每一台 client 都需要以下的档案系统。

buzz:/export/cli?/root on /
buzz:/export/common/usr on /usr
buzz:/usr/src on /usr/src
      

server 的设定像这样:

# /etc/exports
/usr/src -network 123.45.67.0 -mask 255.255.255.0
/export  -alldirs -maproot=root -network 123.45.67.0 -mask 255.255.255.0
      

在 client 机器上,/etc/fstab 包含

buzz:/export/cli?/root / nfs rw
buzz:/export/common/usr /usr nfs rw,nodev,nosuid
buzz:/usr/src /usr/src rw,nodev,nosuid
      

每一台 client 机器都有它的号码,用以取代前例中 首行的 "?" 字符。