一,服务器端配置
首先看NFS服务器的配置,NFS的配置还是很简单的只需修改一个文件/etc/exports
。该文件的格式非常简单:
dir-to-export host-or-subnet-or-domain(options)
例如添加如下:
/etc 192.168.1.0/24(rw,sync)
这行的意思是,我想将/etc的目录共享出去,允许来自192.168.1.0/24网段的客户访问。选项为rw,sync。NFS支持很多可选参数,可以通过man exports获取详细信息。
二,保存退出,重启NFS服务
10 root@ip192-168-1-65-(Master)@16:28:31:~ => service nfs restart Shutting down NFS mountd: [ OK ] Shutting down NFS daemon: [ OK ] Shutting down NFS quotas: [ OK ] Shutting down NFS services: [ OK ] Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS daemon: [ OK ] Starting NFS mountd: [ OK ]客户端配置
首先我们可以查看某个远程主机都共享了哪些服务:
showmount -e 192.168.1.65
结果如下:
[root@localhost ~]# showmount -e 192.168.1.65 Export list for 192.168.1.65:/etc 192.168.1.0/24
我们看到远程主机192.168.1.65
把/etc
目录共享了出来。现在可以尝试挂载了,使用mount命令挂载:
mount-t nfs 192.168.1.65:/etc /mnt
挂载完后可以通过mount命令检查状态:
mount|grep 192.168.1.65
添加/etc/fstab:
192.168.1.65:/etc /mnt nfs defaults 0 0实现自动挂载
上边的内容基本实现了在两台Unix/Linux机器之前实现文件共享,但是我们发现每次使用时都需要手动输入mount命令挂载。可能你会说我们 已经写入/etc/fstab这样就可以每次开机自动挂载了啊。但是有时候有的资源只有在我们使用的时候我们才去挂载,那么在这种情况下我们又不想手动输 入mount命令怎么办呢?可以使用automount功能。
1,首先安装需要的软件包:
yum install autofs -y
2.首先编辑/etc/auto.maste
r文件,该文件的格式如下:
/dir /path/to/config.file
3.例如我添加一行:
/mnt /etc/auto.mnt
表示关于/mnt
目录下子目录的自动挂载配置要从/etc/auto.mnt
文件读取,也就是说当你访问一个目录,如/mnt/etc
时,系统会去/etc/auto.mnt
文件查看有无自动挂载项相对应,如果有,则自动挂载,如果没有就回提示目录不存在。
4,接着在/etc/auto.mnt
目录中添加如下行:
etc -fstype=nfs,rw,sync 192.168.1.65:/etc
这句话表示当需要访问/mnt/etc
目录时,系统要自动从192.168.1.65:/etc
挂载,参数为 -fstype=nfs,rw,sync
。注意第一列只要写etc
,而不要写/mnt/etc
,这是因为/mnt
这个目录已经在/etc /auto.master
中配置过了。
5,现在重启autofs服务:
service autofs restart
6,接着可以测试自动挂载功能:
[root@localhost ~]# mount | grep 192.168.1.65 [root@localhost ~]# ls /mnt/etc acpi dhcp6c.conf inputrc Muttrc rc1.d skel adjtime DIR_COLORS iproute2 Muttrc.local rc2.d slrn.rc aliases DIR_COLORS.xterm isdn my.cnf rc3.d smartd.conf ....省略输出... at.deny exports ldap.conf nsswitch.conf rc.sysinit sudoers audisp fb.modes ld.so.cache ntp readahead.d sysconfig audit filesystems ld.so.conf ntp.conf reader.conf sysctl.conf [root@localhost ~]# mount | grep 192.168.1.65 192.168.1.65:/etc on /mnt/etc type nfs (rw,sync,sloppy,addr=192.168.1.65)
默认情况下,如果5分钟内没有对自动挂载的目录进行操作,autofs会自动断开挂载。这个超时时间可以在/etc/sysconfig/autofs
里进行配置。
三,特殊情况:开了防火墙,如何配置iptables来让我的NFS正常工作呢?
首先我们来看看NFS的大致工作流程:
(1)客户端会向服务器端的RPC(port 111)发出NFS文件存取功能的询问请求。
(2)服务器端找到对应的已注册的NFS daemon端口后会回报给客户端。
(3)客户端了解正确的端口后,就可以直接与NFS守护进程来联机。
RPC最主要的功能就是指定每个NFS功能所对应的端口号,并且回报给客户端,让客户端可以连接到正确的端口上。当服务器在启动NFS时会随机选用 数个端口,并主动地向RPC注册。因此RPC可以知道每个端口对应的NFS功能。然后RPC固定使用端口111来监听客户端的请求并回报客户端正确的端 口,所以可以让NFS的启动更为容易。
从流程看出有以下端口需要在iptables中打开:
TCP/UDP 111 RPCTCP/UDP 2049 NFSDNFS启动时选择的动态端口
可以看出,问题就在这些动态端口,既然是动态的我们就无法在iptables的脚本中写死,因为每次都会变。解决这个问题的方法就是将那些动态选择的端口号固定下来。为了实现这个目的,我们可以编辑/etc/sysconfig/nfs
,将以下行的注释取消:
RQUOTAD_PORT=875 LOCKD_TCPPORT=32803LOCKD_UDPPORT=32769MOUNTD_PORT=892
然后重启nfs服务:
service nfs restart
随后配置防火墙:
iptables -I RH-Firewall-1-INPUT -p tcp -m multiport --dports111,2049,32803,892,875-j ACCEPT
iptables -I RH-Firewall-1-INPUT -p udp -m multiport --dports111,2049,32769,892,875-j ACCEPT
现在就配置好了,你可以在防火墙环境中使用NFS了。