Solution:
For an arbitrary real number z we set a=f(z), b=z+f(0), n=f(2a+b) and m=f(0)−2a+b. Since Df=R, a, b, n and m are well-defined. Substituting x=0, y=z into (∗) gives f(z+f(0))=f(f(z)), hence f(a)=f(b) (I).
Substituting x=m and y=a resp. y=b into (∗) gives
f(f(m)+a)=2m+f(f(a)−m)f(f(m)+b)=2m+f(f(b)−m)
which, because of (I), we can combine into f(f(m)+a)=f(f(m)+b) (II).
Substituting x=a resp. x=b and y=n into (∗) gives
f(f(a)+n)=2a+f(f(n)−a)f(f(b)+n)=2b+f(f(n)−b)
which, because of (I), we can combine into 2a+f(f(n)−a)=2b+f(f(n)−b) (III).
Substituting x=2a+b, y=0 into (∗) gives f(f(2a+b))=a+b+f(f(0)−2a+b), hence f(n)=a+b+f(m), or, stated differently, f(n)−a=f(m)+b resp. f(n)−b=f(m)+a. This together with (III) immediately gives 2a+f(f(m)+b)=2b+f(f(m)+a), from which, using (II), we now obtain a=b, hence f(z)=z+f(0).
Thus it is shown that every function f satisfying (∗) must have the form f(x)=x+c (c= constant). Substituting into (∗) confirms that every f of this form indeed satisfies the given equation: f(f(x)+y)=x+y+2c=2x+f(f(y)−x).