nixos nfs
I migrated from FreeBSD to NixOS for my nas. Apparently I never tested/used NFS on the new OS. When I went to mount my music share from my OpenBSD client I received the following error.
NFS Portmap: RPC: Program not registered
I followed this guide to add NFS to the NixOS config.
That partially worked. I could use the local client in the example to connect and an Arch Linux client could connect. But my OpenBSD client would not connect.
After some (ok a lot) of searching I stumbled upon this guide, which suggested to run the below rpcinfo commands.
rpcinfo -t hostname mountd rpcinfo -u hostname mountd rpcinfo -t hostname nfs rpcinfo -u hostname nfs
When I got to this one it became obvious what was really going on.
rpcinfo -u nas nfs rpcinfo: RPC: Program not registered program 100003 is not available
It turns out that OpenBSD defaults to using UDP for NFS and Linux defaults to TCP. When I had ran my rpcinfo command I didn't notice that there was a UDP entry missing for the NFS service.
rpcinfo -p nas program vers proto port 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 4000 status 100024 1 tcp 4000 status 100005 1 udp 4002 mountd 100005 1 tcp 4002 mountd 100005 2 udp 4002 mountd 100005 2 tcp 4002 mountd 100005 3 udp 4002 mountd 100005 3 tcp 4002 mountd 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 3 tcp 2049 100021 1 udp 4001 nlockmgr 100021 3 udp 4001 nlockmgr 100021 4 udp 4001 nlockmgr 100021 1 tcp 4001 nlockmgr 100021 3 tcp 4001 nlockmgr 100021 4 tcp 4001 nlockmgr showmount -e nas Exports list on nas: export 192.168.88.0/24 export/music 192.168.88.0/24
I tried mountnfs with the -T option to specify using TCP and it worked!
mount_nfs -T nas:/export/music /mnt/nas-media
I then hunted around for the flag for NixOS to add a UDP service for NFS. You need to add udp=y. The below is the NFS config for my NixOS.
services = { nfs = { server.enable = true; server.exports = '' /export 192.168.88.0/24(rw,fsid=0,no_subtree_check) /export/music 192.168.88.0/24(rw,nohide,insecure,no_subtree_check) ''; # for nvsv3 # fixed rpc.statd port; for firewall server.statdPort = 4000; server.lockdPort = 4001; server.mountdPort = 4002; server.extraNfsdConfig = ''udp=y''; }: }: # Open ports in the firewall. networking.firewall.enable = true; networking.firewall.allowedTCPPorts = [ 111 2049 4000 4001 4002 20048 ]; networking.firewall.allowedUDPPorts = [ 111 2049 4000 4001 4002 20048 ];
Now rpcinfo shows:
rpcinfo -p nas program vers proto port 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100005 1 udp 4002 mountd 100005 1 tcp 4002 mountd 100005 2 udp 4002 mountd 100005 2 tcp 4002 mountd 100005 3 udp 4002 mountd 100005 3 tcp 4002 mountd 100024 1 udp 4000 status 100024 1 tcp 4000 status 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 3 tcp 2049 100003 3 udp 2049 nfs 100227 3 udp 2049 100021 1 udp 4001 nlockmgr 100021 3 udp 4001 nlockmgr 100021 4 udp 4001 nlockmgr 100021 1 tcp 4001 nlockmgr 100021 3 tcp 4001 nlockmgr 100021 4 tcp 4001 nlockmgr
Also NixOS supports NFS versions 3 through 4.2 and OpenBSD supports versions 2 and 3. However both OSs do successfully negotiate to use version 3.