Today, we will learn to configure eBGP on Juniper Router. We will be using a simple point-to-point topology to keep the tutorial simple and to the point. So, let’s get started.
Every BGP configuration is done by following 2 steps. In first step, we need to tell, who we are by mentioning Autonomous System Number (ASN) and Router ID.
routing-options { router-id 1.1.1.1; autonomous-system 65001; }
In the second step, we need to configure to establish a session with neighbors.
protocols { bgp { group Session-to-R1 { type external; neighbor 1.1.1.2 { peer-as 65002; } } } }
- Part-1: How to configure eBGP on Juniper Router (this article)
- Part-2: How to configure iBGP on Juniper Router
- Part-3: How to advertise BGP routes in Juniper
Configuring eBGP on Juniper Devices
Let’s configure these by following below network topology.
First of all, we will configure the IP addresses of the interface for both of the Routers as per the topology.
R1: set interfaces ge-0/0/0 unit 0 family inet address 1.1.1.1/30 set interfaces ge-0/0/1 unit 0 family inet address 10.1.1.1/24
R2: set interfaces ge-0/0/0 unit 0 family inet address 1.1.1.2/30 set interfaces ge-0/0/1 unit 0 family inet address 172.16.0.1/24
Commit your configuration, and do basic check up.
[edit] root@R1# commit commit complete
Below, is my verification from R1 end. My both interfaces are UP and i can ping Router R2, from R1.
[edit] root@R1# run show interfaces terse | match ge- ge-0/0/0 up up ge-0/0/0.0 up up inet 1.1.1.1/30 ge-0/0/1 up up ge-0/0/1.0 up up inet 10.1.1.1/24 [edit] root@R1# [edit] root@R1# run ping 1.1.1.2 PING 1.1.1.2 (1.1.1.2): 56 data bytes 64 bytes from 1.1.1.2: icmp_seq=0 ttl=64 time=16.820 ms 64 bytes from 1.1.1.2: icmp_seq=1 ttl=64 time=3.746 ms 64 bytes from 1.1.1.2: icmp_seq=2 ttl=64 time=3.899 ms 64 bytes from 1.1.1.2: icmp_seq=3 ttl=64 time=6.043 ms ^C --- 1.1.1.2 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max/stddev = 3.746/7.627/16.820/5.385 ms [edit] root@R1#
Now, let’s move for BGP configuration. In the first step, I will be announcing ASN and Router-IDs.
R1: set routing-options autonomous-system 65001 set routing-options router-id 1.1.1.1
R2: set routing-options autonomous-system 65002 set routing-options router-id 1.1.1.2
In the second step, I will configure bgp session with remote end and commit the changes.
R1: set protocols bgp group BGP-to-R2 neighbor 1.1.1.2 peer-as 65002 set protocols bgp group BGP-to-R2 type external
Here, we are saying that, our BGP type is external, which means it’s eBGP. We will configure internal bgp (iBGP) in another article.
Now, we will check bgp session summary by using “run show bgp summary“. You will see, session status is Active. It’s because remote end, still not configured and R1 actively trying to establish the session.
R1: [edit] root@R1# run show bgp summary Groups: 1 Peers: 1 Down peers: 1 Table Tot Paths Act Paths Suppressed History Damp State Pending inet.0 0 0 0 0 0 0 Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped... 1.1.1.2 65002 5741 5740 0 1 5 Active [edit] root@R1#
So, let’s configure R2 end and commit the changes.
R2: set protocols bgp group BGP-to-R1 neighbor 1.1.1.1 peer-as 65001 set protocols bgp group BGP-to-R1 type external
After completing the configuration in R2 ends, here is the final verification from R1.
[edit] root@R1# run show bgp summary Groups: 1 Peers: 1 Down peers: 0 Table Tot Paths Act Paths Suppressed History Damp State Pending inet.0 0 0 0 0 0 0 Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped... 1.1.1.2 65002 3 2 0 1 18 0/0/0/0 0/0/0/0
“run show bgp neighbor ” is another important command to verify bgp session and it will help to do the troubleshoot if needed.
[edit] root@R1# run show bgp neighbor 1.1.1.2 Peer: 1.1.1.2+49742 AS 65002 Local: 1.1.1.1+179 AS 65001 Group: Session-to-R1 Routing-Instance: master Forwarding routing-instance: master Type: External State: Established Flags: Last State: OpenConfirm Last Event: RecvKeepAlive Last Error: Cease Options: Holdtime: 90 Preference: 170 Number of flaps: 2 Last flap event: Stop Error: 'Hold Timer Expired Error' Sent: 1 Recv: 0 Error: 'Cease' Sent: 2 Recv: 0 Peer ID: 1.1.1.2 Local ID: 1.1.1.1 Active Holdtime: 90 Keepalive Interval: 30 Group index: 0 Peer index: 0 SNMP index: 0 I/O Session Thread: bgpio-0 State: Enabled BFD: disabled, down Local Interface: ge-0/0/0.0 NLRI for restart configured on peer: inet-unicast NLRI advertised by peer: inet-unicast NLRI for this session: inet-unicast Peer supports Refresh capability (2) Stale routes from peer are kept for: 300 Peer does not support Restarter functionality Restart flag received from the peer: Notification NLRI that restart is negotiated for: inet-unicast NLRI of received end-of-rib markers: inet-unicast NLRI of all end-of-rib markers sent: inet-unicast Peer does not support LLGR Restarter functionality Peer supports 4 byte AS extension (peer-as 65002) Peer does not support Addpath Table inet.0 Bit: 20000 RIB State: BGP restart is complete Send state: in sync Active prefixes: 0 Received prefixes: 0 Accepted prefixes: 0 Suppressed due to damping: 0 Advertised prefixes: 0 Last traffic (seconds): Received 159812 Sent 577 Checked 159812 Input messages: Total 24 Updates 1 Refreshes 0 Octets 504 Output messages: Total 22 Updates 0 Refreshes 0 Octets 422 Output Queue[1]: 0 (inet.0, inet-unicast) [edit] root@R1#
If you check routes list, you will not find any routes from the remote end. It’s because, we have not announced any routes yet.
[edit] root@R1# run show route inet.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 1.1.1.0/30 *[Direct/0] 1d 19:52:28 > via ge-0/0/0.0 1.1.1.1/32 *[Local/0] 1d 19:52:28 Local via ge-0/0/0.0 10.1.1.0/24 *[Direct/0] 1d 19:52:28 > via ge-0/0/1.0 10.1.1.1/32 *[Local/0] 1d 19:52:28 Local via ge-0/0/1.0 inet6.0: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both ff02::2/128 *[INET6/0] 1d 20:14:26 MultiRecv [edit] root@R1#
So, let’s announce routes from both ends.
R1: set policy-options policy-statement BGP-Export term 1 from route-filter 10.1.1.0/24 exact set policy-options policy-statement BGP-Export term 1 then accept set policy-options policy-statement BGP-Import term 1 from route-filter 172.16.0.0/24 exact set policy-options policy-statement BGP-Import term 1 then accept set protocols bgp group BGP-to-R2 import BGP-Import set protocols bgp group BGP-to-R2 export BGP-Export
R2: set policy-options policy-statement BGP-Export term 1 from route-filter 172.16.0.0/24 exact set policy-options policy-statement BGP-Export term 1 then accept set policy-options policy-statement BGP-Import term 1 from route-filter 10.1.1.0/24 exact set policy-options policy-statement BGP-Import term 1 then accept set protocols bgp group BGP-to-R1 import BGP-Import set protocols bgp group BGP-to-R1 export BGP-Export
Now, verify final output of “run show bgp summary”.
[edit] root@R1# run show bgp summary Groups: 1 Peers: 1 Down peers: 0 Table Tot Paths Act Paths Suppressed History Damp State Pending inet.0 1 1 0 0 0 0 Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped... 1.1.1.2 65002 61 59 0 2 25:42 1/1/1/0 0/0/0/0
You can see, we announced 1 route and received 1 route. You also can run “run show route” to verify.
[edit] root@R1# run show route inet.0: 5 destinations, 5 routes (5 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 1.1.1.0/30 *[Direct/0] 1d 20:06:55 > via ge-0/0/0.0 1.1.1.1/32 *[Local/0] 1d 20:06:55 Local via ge-0/0/0.0 10.1.1.0/24 *[Direct/0] 1d 20:06:55 > via ge-0/0/1.0 10.1.1.1/32 *[Local/0] 1d 20:06:55 Local via ge-0/0/1.0 172.16.0.0/24 *[BGP/170] 00:03:52, localpref 100 AS path: 65002 I, validation-state: unverified > to 1.1.1.2 via ge-0/0/0.0 inet6.0: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both ff02::2/128 *[INET6/0] 1d 20:28:53 MultiRecv [edit] root@R1#
So, our bgp session are established and we have routes in our routing table. Now, let’s ping from Bob‘s pc to Johns pc.
Bob> ping 172.16.0.100 84 bytes from 172.16.0.100 icmp_seq=1 ttl=62 time=15.025 ms 84 bytes from 172.16.0.100 icmp_seq=2 ttl=62 time=6.166 ms 84 bytes from 172.16.0.100 icmp_seq=3 ttl=62 time=23.729 ms 84 bytes from 172.16.0.100 icmp_seq=4 ttl=62 time=7.194 ms Bob>
Success!
Which emulator are you using?
It depends on the LAB. I have physical hardware as well.
I just ran the lab on EVE-NG using vMX 18.2 evaluation. The EVE-NG Community edition is free.
EVE-NG: eve-ng.net
EVE-NG Installation Video: youtube.com/watch?v=FDbgTlr-tnw
EVE-NG Import Juniper Images: eve-ng.net/index.php/documentation/howtos/howto-add-juniper-vmx-16-x-17-x/
Juniper vMX Eval Download: support.juniper.net/support/downloads/?p=vmx-evaluation