One of the things I have wanted to test over the years was having realistic Internet BGP data inside of a lab network. Traditionally this would entail peering with a real router in production. I have never been in an environment that would be OK with this, so I always just simulated the Internet with a couple of prefixes. This fixes that problem and allows you to run a router and get hundreds of thousands of BGP prefixes into your lab environment.
Finished Product First
This is the BGP table in my lab right now. I now have real BGP data to practice messing with all the BGP nerd knobs, without creating a resumé-generating event.
This works by running a guestshell instance on a CSR1000v router and then using GoBGP to peer from the guestshell to the host router itself. The guestshell GoBGP process is injecting routing data from the RIPE RIS data project into the environment which gets advertised to the CSR1000v BGP process. Once the BGP data is available to the CSR1000v, then you have a more traditional router to then peer elsewhere in your lab network.
Instructions for Use
In order to install this in your lab, follow these instructions.
Two Different Paths (not BGP paths)
In experimenting with this idea, I initially implemented this same solution, but instead of using GoBGP, I used a perl script called
bgp_simple. BGP Simple does something similar by injecting synthetic prefixes into a BGP process. I found it to be a little unstable with this 800k prefixes (the entire internet), so I switched over to using GoBGP. But instead of deleting that information, I just stashed it in a different git branch in the git repo. If you want to try this instead, it is here.