Internal BGP Configuration
Module Introduction
Before you start the hands-on part of this module, you should load the appropriate configuration and verify that the testbed is up and running by executing the corresponding robot file:
student@tour:~/trainings_resources/robot$ robot bgp_ibgp/bgp_ibgp_setup.robot
Internal BGP Peering
In the last module we have configured a BGP peering to a router in another autonomous systems. We now want to configure a BGP peering to a router in the same autonomous system and learn how internal and external BGP peerings differ. We use the following setup:
One of the main differences between internal BGP and external BGP is, that in general there is no IGP running between external peers which implies that the BGP peering is setup on interface IP addresses. In contrast, within an autonomous system there is an IGP (e.g., OSPF or IS-IS) running. As BGP peerings are based on TCP sessions, internal BGP peering are setup based on IP addresses of loopback interfaces for the sake of reliability.
Configure BGP peering to R2, R3, and ISP according to the following table:
Peer | Peer Group | Peer Address | Peer AS | Address Family |
---|---|---|---|---|
R2 |
Internal |
192.168.0.2 |
64500 |
IPv4/IPv6 Unicast |
R3 |
Internal |
192.168.0.3 |
64500 |
IPv4/IPv6 Unicast |
Click to reveal the answer
cfg> set instance default protocol bgp hostname R1
cfg> set instance default protocol bgp local-as 64500
cfg> set instance default protocol bgp router-id 192.168.0.1
cfg> set instance default protocol bgp address-family ipv4 unicast
cfg> set instance default protocol bgp address-family ipv6 unicast
cfg> set instance default protocol bgp peer-group AS64501 remote-as 65100
cfg> set instance default protocol bgp peer-group AS64501 address-family ipv4 unicast
cfg> set instance default protocol bgp peer-group AS64501 address-family ipv6 unicast
cfg> set instance default protocol bgp peer ipv4 192.168.1.2 192.168.1.1 peer-group AS64501
cfg> set instance default protocol bgp peer-group Internal remote-as 64500
cfg> set instance default protocol bgp peer-group Internal address-family ipv4 unicast
cfg> set instance default protocol bgp peer-group Internal address-family ipv6 unicast
cfg> set instance default protocol bgp peer ipv4 192.168.0.2 192.168.0.1 peer-group Internal
cfg> set instance default protocol bgp peer ipv4 192.168.0.3 192.168.0.1 peer-group Internal
cfg> commit
cfg> show bgp peer
Instance: default
Peer Remote AS State Up/Down Time PfxRcvd PfxSent
R2 64500 Established 0d:00h:00m:10s 1 4
R3 64500 Established 0d:00h:00m:19s 1 4
ISP 64501 Established 0d:00h:00m:16s 4 6
Difference between iBGP and eBGP
There are only a couple of prefixes learned, so let’s analyze them. First, we look at the prefixes we have received from an external peer (here R4) and how they are sent to an internal peer (e.g., R2):
cfg> show bgp rib-in ipv4 unicast peer ISP
Instance: default, AFI: ipv4, SAFI: unicast
Hostname: ISP, Peer IP: 192.168.1.2, Source IP: 192.168.1.1, Received routes: 2
Prefix Next Hop MED Local Preference AS Path Status
172.16.100.0/24 192.168.1.2 0 - 64501 Valid
192.168.0.4/32 192.168.1.2 0 - 64501 Valid
cfg> show bgp rib-out ipv4 unicast peer R2
Instance: default, AFI: ipv4, SAFI: unicast
Peer: R2, Sent routes: 2
Prefix MED Local Preference Origin Next Hop AS Path
172.16.100.0/24 0 100 Incomplete 192.168.1.2 64501
192.168.0.4/32 0 100 Incomplete 192.168.1.2 64501
A BGP speaker advertises prefixes learned from an external BGP peer to an internal BGP. The nexthop attributes remains unchanged. |
The problem is that the BGP nexthop for the routes learned from R4 is the IP address of the directly connected interface between R1 and R4. As there is no IGP running on this interface, the internal BGP neighbors won’t be able to resolve this nexthop. There are two possible solutions:
-
Distribute the nexthop via IGP (e.g., redistribution or passive interface)
-
Rewrite the nexthop before sending update to iBGP peer
The most common method used is to rewrite the nexthop to the loopback address of the peering router. This can be achieved either via the update-next-hop
or the nexthop-self
option in the peer-group configuration. The first one is more flexible, while the second one only allows to set the nexthop to the peer IP address.
Configure for the peer-group Internal for both address-families the nexthop to be updated to 192.168.0.1.
Click to reveal the answer
cfg> set instance default protocol bgp peer-group Internal address-family ipv4 unicast update-nexthop ipv4-address 192.168.0.1
cfg> set instance default protocol bgp peer-group Internal address-family ipv6 unicast update-nexthop ipv4-address 192.168.0.1
cfg> commit
cfg> show bgp rib-out ipv4 unicast peer R2
Instance: default, AFI: ipv4, SAFI: unicast
Peer: R2, Sent routes: 2
Prefix MED Local Preference Origin Next Hop AS Path
172.16.100.0/24 0 100 Incomplete 192.168.0.1 64501
192.168.0.4/32 0 100 Incomplete 192.168.0.1 64501
From the output, we can also see that the local preference of 100 is attached to the prefixes sent to internal peers as a default. Modifying local preference values is best done via routing policies, but it is possible to change the default setting for the whole BGP protocol within an instance:
cfg> set instance default protocol bgp local-preference 150
cfg> commit
Now let’s look at the opposite direction and see how prefixes learned from internal peers are sent to external peers:
cfg> show bgp rib-in ipv4 unicast peer R2
Instance: default, AFI: ipv4, SAFI: unicast
Hostname: R2, Peer IP: 192.168.0.2, Source IP: 192.168.0.1, Received routes: 1
Prefix Next Hop MED Local Preference AS Path Status
172.16.123.64/26 192.168.0.2 - 100 - Valid
cfg> show bgp rib-out ipv4 unicast peer ISP
Instance: default, AFI: ipv4, SAFI: unicast
Peer: R4, Sent routes: 4
Prefix MED Local Preference Origin Next Hop AS Path
172.16.100.0/24 0 - Incomplete - 64500, 64501
172.16.123.0/26 0 - Incomplete - 64500
192.168.0.4/32 0 - Incomplete - 64500, 64501
172.16.123.64/26 0 - Incomplete - 64500
A BGP speaker advertises prefixes learned from an internal BGP peer to an external BGP. The BGP AS_PATH attributed is prepended with the local AS number and the nexthop attributes is updated. |
We also see that a MED value of 0 is assigned to the prefix. This default value can be modified within the BGP protocol:
cfg> set instance default protocol bgp med 50
cfg> commit
An interesting aspect of internal BGP can be seen if we compare the prefixes learned from R2 and the prefixes sent to R3:
cfg> show bgp rib-in ipv4 unicast peer R2
Instance: default, AFI: ipv4, SAFI: unicast
Hostname: R2, Peer IP: 192.168.0.2, Source IP: 192.168.0.1, Received routes: 1
Prefix Next Hop MED Local Preference AS Path Status
172.16.123.64/26 192.168.0.2 - 100 - Valid
cfg> show bgp rib-out ipv4 unicast peer R3
Instance: default, AFI: ipv4, SAFI: unicast
Peer: R3, Sent routes: 3
Prefix MED Local Preference Origin Next Hop AS Path
172.16.100.0/24 0 150 Incomplete 192.168.0.1 64501
192.168.0.4/32 0 150 Incomplete 192.168.0.1 64501
A BGP speaker does not advertise IP prefixes it has learned from an iBGP peer to another iBGP peer. |
This rule is very important to know. The main reason for this behavior is that BGP uses AS_PATH for loop prevention and within an autonomous system, AS_PATH is not updated. We will deal with the impact in the next module.
By default, a BGP speaker only advertises prefixes to neighbors which it has learned from other neighbors. In order to make AS64500 reachable to the outside world, you need to bring the internal networks into BGP. Create a static route summarizing the loopback addresses (192.168.0.1-3) and redistribute it into BGP.
Click to reveal the answer
cfg> set instance default static nexthop-profile NULL exit-interface null0
cfg> set instance default static route ipv4 192.168.0.0/30 unicast NULL
cfg> set instance default static route ipv6 fc00:c0a8::192:168:0:0/126 unicast NULL
cfg> set instance default protocol bgp address-family ipv4 unicast redistribute static
cfg> set instance default protocol bgp address-family ipv6 unicast redistribute static
cfg> show bgp rib-out ipv4 unicast peer R4
Instance: default, AFI: ipv4, SAFI: unicast
Peer: R4, Sent routes: 5
Prefix MED Local Preference Origin Next Hop AS Path
192.168.0.0/30 50 - Incomplete - 64500
172.16.100.0/24 50 - Incomplete - 64500, 64501
172.16.123.0/26 50 - Incomplete - 64500
192.168.0.4/32 50 - Incomplete - 64500, 64501
172.16.123.64/26 50 - Incomplete - 64500
Description | internal BGP | external BGP |
---|---|---|
Local AS number added to path |
no |
yes |
Nexthop overwritten |
no |
yes |
MED added |
no |
yes |
Local Preference added |
yes |
no |
TTL |
64 |
1 |
Updates from eBGP peer |
all iBGP peers |
all eBGP peers |
Updates from iBGP peer |
no |
all eBGP peers |