How to set up source based routing with Linux

  • 7008874
  • 21-Jun-2011
  • 27-Apr-2012

Environment

Novell Open Enterprise Server Linux
SUSE Linux

Situation

How to set up source based routing with Linux
Source based routing with Linux

Resolution

On standard internet systems, when a packet is received and needs to be routed, the decision is made based on the destination of the packet. However let's deal with a situation where there are two interfaces eth0 and eth1. All the traffic not in the local subnet will be routed to the default gateway of x.x.x.x. But what if the packets originating from eth1 should be routed to y.y.y.y. The following steps will help in achieving this
  1. Edit /etc/iproute2/rt_tables.
  2. At the bottom, please type 100 SECONDPOA.
    Replace SECONDPOA with any other string.
  3. Save the file.
  4. Please type ip rule add from s.s.s.s table SECONDPOA where s.s.s.s is the IP Address of the eth1.
  5. Please type ip route add default via y.y.y.y dev eth1 table SECONDPOA and press Enter where y.y.y.y is the IP Address of the next hop for packets originating from eth1.
  6. To test it, please type
    traceroute www.novell.com -S p.p.p.p where p.p.p.p is the IP Address of eth0 and notice the next hop. This should be x.x.x.x

    traceroute www.novell.com -S s.s.s.s where s.s.s.s is the IP Address of eth1 and notice the next hop. This should be y.y.y.y
  7. Once the above test is successful, please follow the sub steps below to make ip rule statement persistent across reboot.
    • Create a file /etc/rc.d/rclocal .
    • Paste the following in the file. Modify the ip rule statement accordingly.
      #!/bin/bash
      ### BEGIN INIT INFO
      # Provides: rclocal
      # Required-Start: $local_fs $remote_fs $network
      # X-UnitedLinux-Should-Start: $ALL
      # Required-Stop:
      # X-UnitedLinux-Should-Stop:
      # Default-Start: 3 5
      # Default-Stop: 0 1 2 6
      # Short-Description: Simulates rc.local
      # Description: Simulates redhat's rc.local: contains
      # commands to execute after system has booted (all services are already
      # available)
      ### END INIT INFO
      case "$1" in
      start)
      ip rule add from s.s.s.s table SECONDPOA
      ;;
      *)
      exit 0
      ;;
      esac
    • Save the file 
    • Type "chmod +x rclocal" without quotes and press Enter.
    • Type "chkconfig rclocal on" without quotes and press Enter.
  8. Once the above test is successful, please make the ip route statement persistent. Please edit /etc/sysconfig/network/routes and type
    default y.y.y.y - eth1 table SECONDPOA
    where y.y.y.y is the next hop that packets originating from eth1 needs to take.