Heat a large frying pan, add the duck legs and dry-fry until browned on both sides. Lift out and transfer to a shallow casserole dish. Pour off half the duck fat and then add the onion to the pan and fry for 5 minutes until softened.
Stir in the flour then gradually mix in the stock. Add the cranberries, orange slices and star anise, then the soy sauce and fish sauce, if using, and some pepper. Bring to the boil then pour over the duck. Cover and cook in a preheated oven, 180°C (350°F), Gas Mark 4, for 1¼ hours. Allow to cool and chill until required.
Meanwhile, cook the celeriac and potatoes in a saucepan of boiling water for 15 minutes or until tender. Drain and mash with the butter, milk and a little seasoning. Spoon into a microwave-proof serving dish and cover with clingfilm. Allow to cool, then chill until required.
When ready to serve, reheat the duck in the covered dish in a preheated oven, 190°C (375°F), Gas Mark 5, for 30 minutes, removing the cover after 15 minutes. Reheat the mash in the microwave on full power for 3–3½ minutes. Stir well, then spoon on to 4 serving plates, top with the duck and spoon the sauce and fruit around.