A default route (0.0.0.0/0) in BGP tells a peer "send me everything you don't have a more specific route for." ISPs send default routes to single-homed customers. Enterprises redistribute a BGP-learned default into their IGP. Hub sites advertise defaults to branches. The method you choose for injecting that default route into BGP matters — each has different behavior and failure modes.
Method 1: neighbor default-originate
The most common and cleanest method for sending a default route to a specific peer:
R1-HQ(config)# router bgp 65001
R1-HQ(config-router)# neighbor 10.2.1.1 default-originateThis tells R1-HQ to advertise 0.0.0.0/0 to the neighbor at 10.2.1.1 (R3-BRANCH). Key behavior:
- A default route does NOT need to exist in R1-HQ's own BGP table or routing table
- The default is generated specifically for this peer — it doesn't affect other peers
- The default is always sent as long as the BGP session is up
Conditional Default Originate
You can make the default conditional — only advertised if a specific prefix exists in the routing table:
ip prefix-list CHECK-ISP-A seq 10 permit 100.64.0.0/18
!
route-map DEFAULT-IF-ISP-A-UP permit 10
match ip address prefix-list CHECK-ISP-A
!
router bgp 65001
neighbor 10.2.1.1 default-originate route-map DEFAULT-IF-ISP-A-UPR1-HQ only sends the default to R3-BRANCH if 100.64.0.0/18 exists in the BGP table — a proxy for "ISP-A is up." If ISP-A goes down and that prefix disappears, the default is withdrawn, and R3-BRANCH can fall back to an alternative path.
Method 2: network Command
Advertise 0.0.0.0/0 using the standard network command. This requires the default route to exist in the IP routing table:
ip route 0.0.0.0 0.0.0.0 172.16.0.2
!
router bgp 65001
network 0.0.0.0 mask 0.0.0.0This injects 0.0.0.0/0 into the BGP table (with Origin IGP), and it's advertised to all BGP peers (subject to outbound policy). Unlike default-originate, this is not per-peer — every peer gets the default unless you filter it outbound.
Risk: if the static default route points to an interface that goes down, the default disappears from the routing table, and BGP withdraws it. To make it unconditional, point the static route to Null0:
ip route 0.0.0.0 0.0.0.0 Null0But this creates a blackhole for traffic with no more-specific match — use with caution and only if you have eBGP-learned routes that cover your actual traffic.
Method 3: Redistribution
Redistribute a static default into BGP:
ip route 0.0.0.0 0.0.0.0 172.16.0.2
!
router bgp 65001
redistribute static route-map ONLY-DEFAULT
!
ip prefix-list DEFAULT-ONLY seq 10 permit 0.0.0.0/0
route-map ONLY-DEFAULT permit 10
match ip address prefix-list DEFAULT-ONLYThis gives the route Origin Incomplete (?) instead of IGP — slightly less preferred in best path step 5. Always use a route-map to limit redistribution to just the default route.
Comparison
| Method | Per-peer? | Requires route in RIB? | Origin | Conditional? |
|---|---|---|---|---|
| default-originate | Yes | No | IGP | Yes (route-map) |
| network 0.0.0.0 | No (all peers) | Yes | IGP | Inherently (route must exist) |
| redistribute static | No (all peers) | Yes | Incomplete | Inherently (route must exist) |
Recommendation: use default-originate for sending defaults to specific downstream peers. Use the network command when you need the default in your own BGP table for AS-wide distribution via iBGP.
Receiving a Default Route
By default, if your ISP sends you 0.0.0.0/0, BGP accepts it (assuming no inbound prefix-list blocks it). Some things to be aware of:
- If you receive a default from both ISPs, best path selection chooses one — use local-pref to control which ISP's default is preferred
- If you also have a static default route (from
ip route 0.0.0.0 0.0.0.0), AD determines which wins: eBGP default (AD 20) beats static (AD 1)... wait, no — static AD is 1, which beats eBGP's 20. So a static default overrides a BGP-learned one. - The
default-information originatecommand (used in OSPF) is NOT the same as BGP'sdefault-originate— don't confuse them.
Verification
R1-HQ# show ip bgp neighbors 10.2.1.1 | include Default
Default-originate: advertise always
! Or with conditional:
Default-originate: advertise route-map DEFAULT-IF-ISP-A-UP, conditionally advertised
R3-BRANCH# show ip bgp 0.0.0.0/0
BGP routing table entry for 0.0.0.0/0, version 5
Paths: (1 available, best #1, table default)
65001
10.2.1.1 from 10.2.1.1 (1.1.1.1)
Origin IGP, localpref 100, valid, external, best
R3-BRANCH# show ip route 0.0.0.0
Routing entry for 0.0.0.0/0, supernet
Known via "bgp 65002", distance 20, metric 0
Tag 65001, type external
Last update from 10.2.1.1 00:15:22 agoTroubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| default-originate configured but peer not receiving default | BGP session not in Established state, or outbound prefix-list blocking 0.0.0.0/0 | Check session status. Verify no outbound filter blocks the default. Check conditional route-map if used. |
| Default route in BGP table but not in routing table | Static default with lower AD (1) is preferred, or iBGP default with AD 200 losing to another source | Check show ip route 0.0.0.0 to see which protocol installed the default. |
| Conditional default withdrawn despite ISP being up | The route-map match condition doesn't match the exact prefix in the BGP table | Verify the prefix-list in the route-map matches a prefix that actually exists. Check show ip bgp [prefix]. |
Key Takeaways
neighbor default-originateis the cleanest per-peer method — it doesn't require the default to exist in your own routing table.- Use the conditional form (with route-map) to tie the default to a specific upstream prefix as a health check.
- The
network 0.0.0.0method advertises the default to all peers and requires it in the IP routing table. - Always be deliberate about default routes — an unconditional default via Null0 can create blackholes. A conditional default that tracks upstream health is safer.
- Static default route (AD 1) beats eBGP default (AD 20) — this catches people off guard when both exist.