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 机器都有它的号码,用以取代前例中 首行的 "?" 字元。