6

I have two gateway to access internet, somehow I want to load balancing it, so far its working, but some connection or service need persistent gateway IP to be used, so the client should never change its gateway once it have connected to dest., my current implementation seems to be round-robin or whatever it is.

this is my iproute

...
...
default
    nexthop via 192.168.1.1 dev eth0 weight 1
    nexthop via 192.168.1.2 dev eth0 weight 1

now i want to fix it somehow the gateway the client will use is predetermined, for example by using source port, if the source port is even number we use gw.1 and odd number go through gw.1, can we do that using ip route?

*note that I only have one outbound interface : eth0 here.

Gilles 'SO- stop being evil'
  • 807,993
  • 194
  • 1,674
  • 2,175
uray
  • 3,830
  • 11
  • 36
  • 42

1 Answers1

1

Use policy routing with marking packets. I'm not sure what format of configuration it is but you should check it in your distro.

In commandline it should look like (not tested but should work)

iptables -A PREROUTING -t mangle -p tcp --dport 22 --set-mark 0x1 -j CONNMARK
echo "200 ssh" >> /etc/iproute2/rt_tables
ip rule add fwmark 1 table ssh
ip route add default dev eth0 via 192.168.1.2 table ssh

Edit: lines

echo "200 ssh" >> /etc/iproute2/rt_tables

Names routing table 200 by name "ssh". It is preserved between boots.

ikaerom
  • 171
  • 1
  • 9
Maciej Piechotka
  • 16,578
  • 11
  • 57
  • 93
  • can you explain what does this line do : `cat "200 ssh" >> /etc/iproute2/rt_tables` ? – uray Aug 25 '10 at 15:03
  • 1
    Explained in edit. `/etc/iproute2/rt_tables` is a file which names routing tables by user-readable names. – Maciej Piechotka Aug 25 '10 at 16:56
  • In case someone is reading this 4.5 years later, here's my experience on Ubuntu 14.04: I had to do `iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 1` instead fo the `CONNMARK` thingy, plus this: sysctl net.ipv4.conf.eth1.rp_filter=2 – tuomassalo May 06 '15 at 13:26