Ok, first of all, I know that this question has been asked before, and I've seen some of the workarounds, but as far as I have read, this problem apparently remains unsolved.
I have a firewall with two internet connections. I use source-based routing as described in the section 4.2.1 of the Advanced Routing & Traffic Control HOWTO to ensure that the correct next-hop is chosen for outgoing packets. This much works well. The problem arises when I use a DNAT'ed connection to an internal webserver. Using tcpdump I see that the syn+ack packet from the webserver is un-NAT'ed correctly, but sent to the wrong next hop. Something happens that prevents my "ip rule" from triggering. Please do not reply and tell me that I can simply use a different internal IP address to correspond to the different external IP address. This is the "common workaround" and it is not acceptable for my purposes. Does anyone have the right answer to this? Does "PREROUTING" not mean pre-routing? Or is the ip rule that selects a route table run before PREROUTING? Even if the answer is, "it can't be done", can anyone definitively say so and why? Thanks for your great work guys! -David Graves
