Source-specific routing

Source-specific routing, also called source-address dependent routing (SADR), is a routing technique in which a routing decision is made by looking at the source address of a packet in addition to its destination address. The main application of source-specific routing is to allow a cheap form of multihoming without the need for provider-independent addresses or any cooperation from upstream ISPs.

The problem


In traditional next-hop routing, a packet is routed according to its destination only, towards the closest router that announces a route that matches that destination. Consider a multihomed end-user network connected to two ISPs, BT&T and PacketCast; such a network will typically have two edge routers, each of which is connected to one ISP.

Both edge routers announce a default route, meaning that they are willing to accept packets destined for the Internet. If a packet with a source in BT&T's network is routed through PacketCast's edge router, PacketCast will assume it is a spoofed packet, and drop it in accordance to BCP 38.

Multihoming with source-specific routing
With source-specific routing, each edge router announces a source-specific default route: a route that applies to packets destined to the Internet but only if their source is in a given prefix. The effect is that each edge router only attracts packets that have a source address in that provider's prefix.

Desirable host changes
With source-specific routing, each host interface has multiple addresses, one per provider-dependent prefix. For outgoing traffic, host software must choose the right source address. Various techniques for doing that have been suggested, at the network layer, above the network layer (see Shim6), or by using multipath techniques at the higher layers (see Multipath TCP and Multipath Mosh ).

Support in routing protocols
On a network with a single edge router, it is possible to implement source-specific routing by manual manipulation of routing tables. With multiple routers, explicit support for source-specific routing is required in the routing protocol.

As of early 2016, there are two routing protocols that implement support for source-specific routing:
 * The Babel routing protocol has support for source-specific routing for both IPv4 and IPv6; this is implemented for IPv6 in babeld and in BIRD (earlier versions of babeld supported source-specific routing for IPv4 );
 * There exists an implementation of IS-IS with support for source-specific routing for IPv6 only.

The IETF Homenet protocol suite requires support for source-specific routing in its routing protocol.