On Mon, 1 Apr 2002 russ@essentialmix.ca wrote: > Hey guys, can anyone comment on this if it is possible? > > My setup: > > Linux Box Cable > _____ E0 _____ > | |_______|___|____ > | | > | | DSL > | | E1 _____ > | |_______|___|____ > |___| > > > Hopefully everyone can interperet my diagram. Anyhow, I have an FTP > server running off the Linux Box. The DNS resolves to Eth0 which is the > NIC attached to the Cable modem provider and the default route is set to > the Cable next-hop. Eth1 is attached to My Network. What I would like to > happen is that all incoming FTP traffic to Eth0 will always return out > Eth0 through the Cable ISP. Any other traffic will take the DSL provider > via a default route to the DSL next-hop > > I can think of 2 ways to do this: > > 1) Mark FTP traffic and create a rule to set the next-hop to the Cable > default route > > 2) Configure policy routing such that if traffic is destined to Eth0 IP > address, the next-hop is set to the Cable provider. The latter is better. :) > Because there is a default route configured on the linux box to the Cable > ISP, all return traffic regardless of the interface it was received on > will always take the Cable ISP. I would prefer option #2. Can anyone > shed some light on the config necessary to do this? This is pretty quick > and dirty with policy routing on IOS, but I am struggling a little bit on > the linux config. Thanks all! Very well: One creates two additional routing tables, say E0 and E1. These are added in /etc/iproute2/rt_tables. Then you set up routing in these tables as follows: ip route add $CABLE_GW dev eth0 src $IP_ETH0 table E0 ip route add default via $CABLE_GW table E0 ip route add $DSL_GW dev eth1 src $IP_ETH1 table E1 ip route add default via $DSL_GW table E1 Next you set up the main routing table. It is usually a good idea to route things to the direct neighbour through the interface connected to that neighbour. Note the `src' arguments, they make sure the right outgoing IP address is chosen. ip route add $CABLE_GW dev eth0 src $IP_ETH0 ip route add $DSL_GW dev eth1 src $IP_ETH0 ip route add $CABLE_NET via $CABLE_GW ip route add $DSL_NET via $DSL_GW Then, your preference for default route: ip route add default via $DSL_GW Next, you set up the routing rules, making sure that you route out a given interface is you already have the corresponding source address: ip rule add from $IP_ETH0 table E0 ip rule add from $IP_ETH1 table E1 This set of commands makes sure all answers to traffic coming in on a particular interface get answered from that interface. I set something like this up back in 1999 for my then-current employer to deal with a 'secure' leased line and a cable-modem, with e-mail coming in over both lines... Doei, Arthur. (Who just now realises that ftpd's may actually still play havoc with this: set your server to passive-only, if you can.) -- /\ / | arthurvl@sci.kun.nl | Work like you don't need the money /__\ / | A friend is someone with whom | Love like you have never been hurt / \/__ | you can dare to be yourself | Dance like there's nobody watching