What is IP unnumbered?
In Cisco routers, the ip unnumbered <other_interface> command allows you to borrow the IP address of another interface.
Although the Cisco help page explains in detail how to do it, and to some extent the reasons to do so, let’s go deeper and explain the real howto.
Why IP unnumbered?
It goes back to the time when the routing protocols were in classfull mode. One consequence was that, in an internetwork connecting many networks with routers, all these networks had to have the same size, most often Class C type (I will explain why in another post).
For example, here are networks 18.104.22.168/8 and 10.0.0.0/8 connected by routers R1 and R2, themselves connected by a Serial link (or any point-to-point link). We want to have a routing protocol announcing network 11/8 to router R2 and 10/8 to router R1.
What is necessary?
Two main conditions must be met in order for each network to be advertised to the other router:
- if we want the routers to forward packets to the other network, IP must be activated on the Serial link.
- if we want routing protocols to advertise routes to the other router, there must be an IP address on the Serial interfaces of the routers, otherwise routing advertisements can’t have a source IP address.
Solution 1 : the worst
Since we are in Classfull mode, the IP addresses on the Serial link must belong to a network with the same size (same mask) as the other networks. If they were Class C networks, ie 254 IP addresses, it would be a TOTAL WASTE of address space, since this link will never use more than 2 IP addresses!
In our example it’s even worse: the serial link would have to have Class A IP addresses…
Solution 2 : waiting for Classless protocols
The best solution is to apply a classless protocol, like OSPF, RIPv2 or EIGRP that transport the network masks along with the network id in the updates. But at the time IP unnumbered was created, these routing protocols were not existing yet…
Solution 3 : find a compromise
What could we do then ? It’s just not possible to disable IP forwarding. The middle network needs to be activated in order for IP packets (including Network Protocols packets) to transit between the routers.
The solution is to borrow IP addresses from other interfaces and apply them on the Serial interfaces.
In our example, S1/0 on R1 would have 22.214.171.124/8 borrowed from E0/0 and S1/0 on R2 would have 10.0.0.1/8 borrowed from E0/0.
The 2 conditions explained earlier are met :
- IP forwarding is activated on both interfaces on the Serial link (it won’t be if there’s no IP address)
- Each interface has an IP address
- it works : I will show a proof of concept in a later post
- it’s a compromise : it means it doesn’t look totally clean
- it can IP unnumbered only on point-to-point links and it has to be activated on both ends of the link.
Why does it work?
Because we don’t give a monkey having different IP addresses on the Serial link, since they won’t be used!
Indeed, in the simplest situation, on R2 you would just need that kind of static IP route pointing to 126.96.36.199/8:
ip route 188.8.131.52 255.0.0.0 Serial1/0
As you can see here, that’s no next-hop IP address. If R2 wants to send packets to network 184.108.40.206/8, it knows he just has to throw them out of Serial 1/0. Since we are on a point-to-point link, the packets will just get to the next-hop, whatever its IP address, since there’s only ONE other router on the link. That means IP unnumbered cannot work on multiaccess links, like Ethernet.