One of the new features in RHEL 6 is NFS version 4. It has a different concept and some administrators can be confused. I highly recommend to read RHEL 6 Storage Administration Guide or other documents related to NFSv4.
The key change in NFSv4 is the concept of the root directory. To get things working for both v4 and v3 clients the most recommended way is to remount everything under one directory (we will create /exports for that). New clients will use relative paths and old clients full paths.
In my example I am exporting /mnt/data directory, thus I am creating /exports directory with data directory in it, binding it there and configuring nfs and firewall.
# mkdir /mnt/data
# mkdir -p /exports/data
# cat /etc/fstab | grep data
/mnt/data /exports/data none bind
# mount -a
# cat /etc/exports
Now it's the time to configure firewall. Uncomment all the lines here:
# grep -v '^#' /etc/sysconfig/nfs
And add all the ports to the firewall config (tcp, udp, tcp, tcp in this order). Open portmapper tcp port 111 as well. You can use GUI/TUI for that, but I prefer config file edit:
# sudo grep -E '\s(32803|32769|892|662|111)\s' /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 892 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 875 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 662 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 32803 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 32769 -j ACCEPT
Now, this is important. Do not restart nfs using simple "restart" command. First of all bring all the services down:
# service nfs stop
# service nfslock stop
# service rpcbind stop
Now, restart iptables and bring all NFS services up in the following order.
# service iptables restart
# service rpcbind start
# service nfslock start
# service nfs start
This is important because when you do "restart", nfs is usually running already by default and it won't show all errors. Make sure nfs, nfslock and rpcbind services are enabled after boot.
# chkconfig nfs on
# chkconfig nfslock on
# chkconfig rpcbind on
# showmount -e localhost
We are almost there. NFSv4 clients must connect with relative address:
# sudo mount -t nfs -o vers=4 server:/data /tmp/my/directory
NFSv3 clients must use full address:
# sudo mount -t nfs -o vers=3 server:/exports/data /tmp/my/directory
Thank to our remount we are able to export any directory within the server.