Bug 22596

Summary: NFS can't handle asymmetric server routing
Product: Base System Reporter: peter.jeremy <peter.jeremy>
Component: kernAssignee: freebsd-bugs (Nobody) <bugs>
Status: Closed FIXED    
Severity: Affects Only Me    
Priority: Normal    
Version: 5.0-CURRENT   
Hardware: Any   
OS: Any   

Description peter.jeremy 2000-11-04 02:00:02 UTC
	Given the following network configuration.  If the server
	routes to the client via router-3 and the client attempts
	to NFS mount a filesystem via server-2, the mount will
	block indefinitely.

	              +------+  -2  +------+
	+------+  -1  |      |------|      |
	|client|------|router|      |server|
	+------+      |      |------|      |
	              +------+  -3  +------+

	For example "mount server-2:/cdrom /cdrom" produces the
	following network packets:
	
12:16:32.119294 client-1.976 > server-2.111:  udp 56
12:16:32.303056 server-2.111 > client-1.976:  udp 28
12:16:32.305913 client-1.975 > server-2.111:  udp 56
12:16:32.481473 server-3.111 > client-1.975:  udp 28
12:16:32.488073 client-1.855771785 > server-2.2049: 40 null
12:16:32.652983 server-2.2049 > client-1.855771785: reply ok 24 null
12:16:32.656422 client-1.973 > server-2.111:  udp 56
12:16:32.821607 server-3.111 > client-1.973:  udp 28
12:16:32.831160 client-1.972 > server-2.1017:  udp 124
12:16:33.111041 server-2.1017 > client-1.972:  udp 68
12:16:33.180257 client-1.1718190197 > server-2.2049: 124 access fh 117,2/3 003f
12:16:33.421336 server-3.2049 > client-1.1718190197: reply ok 120 proc-135571692
12:16:33.422329 client-1 > server-3: icmp: client-1 udp port 971 unreachable

	The last 3 packets repeat indefinitely (with exponential backoff).

	When I change the routing on the server so packets for client-1
	go via server-2 instead, it recovers and completes the mount:

12:17:44.046144 client-1.1718190197 > server-2.2049: 124 access fh 117,2/3 003f
12:17:44.247190 server-2.2049 > client-1.1718190197: reply ok 120 access c 0023

Fix: 

Unknown.  The client is correct to reject the packets from an
	(unknown) server.  The server should be using a source address
	that matches the address that the client requested to mount.
How-To-Repeat: 
	Set up network and issue mount command as per above.
Comment 1 Doug Barton freebsd_committer freebsd_triage 2000-11-04 05:43:05 UTC
State Changed
From-To: open->closed

Duplicate of 22594, originator request