Hello ! Thank you (and others) for good tool :) But I tried to do that is in subject and I couldn't :( I tried something like this (addresses are faked): ip rule add prio 33000 from 123.1.1.1 table one ip route add table one default via 123.1.1.2 ip route add table default via 123.1.1.3 Address 123.1.1.1 is on one of interfaces on that machine where I did that. But that doesnt work :-( All packets from source 123.1.1.2 goes via 123.1.1.3 but not via 123.1.1.2. When I tried: traceroute -s 123.1.1.1 www.yahoo.com I saw: to www.yahoo.com (204.71.200.75) from 123.1.1.1, 30 hops max, 38 byte packets 1 123.1.1.3 65.305 ms 64.161 ms 65.651 ms 2 * * * 3 * * * etc... How I can deal with it? here some additional info: #ip rule ls 0: from all lookup local 32766: from all lookup main 33000: from 123.1.2.1 lookup dialup 33010: from 123.1.2.2 lookup dialup 33020: from 123.1.2.3 lookup dialup 33500: from 123.1.2.4 lookup dialup 33510: from 123.1.1.1 lookup dialup 77777: from all lookup default #ip ro l t default default via 123.1.1.2 dev ppp0 proto kernel src 123.1.1.4 #ip ro l t dialup default via 123.1.1.2 dev eth0 proto kernel That's may be deeper problem with locally genarated packets. may be with working with skb in net/core/rtnetlink.c? but #iptables -t mangle -A OUTPUT -s 123.1.1.1 -j MARK --set-mark 1 helps and thats all works OK. ===== Roman