The solution to your question is given in a link provided in one of the replies in the blog you followed http://www.loadbalancer.org/uk/blog/how-to-stop-tproxy-when-used-with-haproxy-breaking-clients-in-the-real-server-subnet
To make it clear, without modifying the routes on the backend servers things are not working when the clients and the servers are in the same subnet because the client starts a connection to the IP of the proxy but gets reply from the IP of the backend server thus the client simply droppes those packets as invalid. That’s why it is important to send the reply traffic back via the proxy server which in this case is a NAT gateway for the backend servers to the local subnet.