I have a network as such Local Interface eth0 local network 10.0.0.0 Internet Interfaces ppp0 public static ip1 eth1 adsl static ip2 eth2 cable dyn ip3 I am trying to set my iproute2 table such that if any external connection eg. a ping packet, comes up ppp0 to ip1, the reply packet goes back the same way with the source ip of that interface. So if a ping request then came to eth1 ip2 via that link from an external machine then the reply packet would leave as source ip2 via eth1, and the same for eth2. I have tried numerous examples but cannot get this working. I would prefer to do this without using fwmark. Any working examples will put me out of my prolonged agony :) Here is one example of what I have been trying. ip rule add to privatenetwork pref 100 table eth0 ip rule add from default dev eth2 pref 200 table eth2 ip rule add from default dev ppp0 pref 500 table ppp0 ip rule add from default dev eth1 pref 600 table eth1 ip rule add from privatenetwork pref 5000 table eth0 ip rule add from pppip pref 5001 table ppp0 ip route add to random_external_subnet via eth1gwip dev eth1 ip route add default from privatenetwork dev eth2 table eth0 ip route add to random_external_subnet via eth2gwip dev eth2 ip route add to privatenetwork dev eth0 table eth0 route add default dev ppp0 ip route add default dev ppp0 table ppp0 ip route add default dev eth0 table eth0 ip route add default via eth1gwip dev eth1 table eth1 ip route add default via eth2gwip dev eth2 table eth2 ip route add from eth1ip via eth1gwip dev eth1 table eth1 ip route add from eth1ip via eth2gwip dev eth2 table eth2 Thanks Stephen