When peering with another router within the same AS# (iBGP) is it best practice to use the remote serial interface or L0?
When peering with a different AS# (eBGP) is it best practice to use L0 addresses and why?
Thanks in advance.
I believe that the discussion given by Nicholas is correct. I might phrase the discussion in a slightly different way, but the conclusion is quite the same.
For IBGP neighbors they are both routers within the same enterprise network. Within an enterprise network there are likely to be viable alternate paths that connect the peers. With viable alternate paths it makes very good sense to peer using the loopback interfaces since if the interface currently being used to reach the peer should happen to fail, the neighbor relationship can survive since there is still viable IP connectivity to the peer address on the remote router when peering with loopback addresses. But if you peer with a physical interface for IBGP and if the physical interface goes down then the BGP peer will fail even if there is an alternate path that gets to the remote peer, because there is no path to the peer address.
For EBGP neighbors they are both routers in different enterprise networks and there is much less possibility that there is a viable alternate path that connects the BGP peers. In this case it is more common to peer via physical interface since peering to the loopback introduces complications ( how does router A know how to get to the loopback of router B since they will be in separate networks?) and does not offer much advantage.
My understanding is that it is best practice to use a loopback for iBGP and a physical interface for eBGP except for special circumstances.
Loopback is best for iBGP because alternate routes may very well exist between iBGP peers and will be known by the IGP, e.g. OSPF or ISIS. If you peer based on an IP on a physical interface and it goes down, the session cannot come back until the interface comes up, even if alternate routes may exist. Whereas a loopback won't go down, the IGP will converge, and your session will stay intact.
With eBGP, this is harder to accomplish because generally you are not running an IGP with an external AS and you won't have multiple routes to the neighbor router. But there may be a case where you'd want to peer using loopbacks. A perfect example is when you have multiple physical links, e.g. two DS3s or something. In this case, it makes sense to peer on loopbacks for the same reason it did for iBGP neighbors. Since you aren't running an IGP between your AS and your neighbor, static routes may need to be added to your configuration. You will also want to ensure that load balancing will be performed over the multiple links (though not necessarily if the links are unequal speeds). You would also want to configure ebgp-multihop so the session will establish (ebgp packets have ttl = 1).