Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/neptune-networks/peering
A YAML to BIRD configuration generator for transit networks.
https://github.com/neptune-networks/peering
bgp bird ixp network-automation peering router-configuration routing
Last synced: 17 days ago
JSON representation
A YAML to BIRD configuration generator for transit networks.
- Host: GitHub
- URL: https://github.com/neptune-networks/peering
- Owner: neptune-networks
- Created: 2020-05-09T11:57:43.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2021-07-03T22:27:06.000Z (over 3 years ago)
- Last Synced: 2024-08-08T18:25:09.373Z (4 months ago)
- Topics: bgp, bird, ixp, network-automation, peering, router-configuration, routing
- Language: HTML
- Homepage: https://neptunenetworks.org/
- Size: 73.2 KB
- Stars: 25
- Watchers: 2
- Forks: 5
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-starred - neptune-networks/peering - A YAML to BIRD configuration generator for transit networks. (others)
README
# Neptune Networks Peering Config
This used to be the pipeline to build [Neptune Networks](https://neptunenetworks.org)' BGP peering configuration. At the time when this was in use, Neptune used BIRD `2.0.7` for its core customer routers and border routers. We relied on this pipeline to take templates and YAML and turn them into a BIRD configuration.
This BGP configuration has been built to be agnostic to Neptune Networks and should work for you as well. An example configuration file can be seen in [`config/router.fqdn.example.yml`](config/router.fqdn.example.yml). Simply create a similar file with the relevant options to your network and execute the generation steps at the bottom of this README.
The YAML files in [`config/`](config/) go through a transformation step in which they turn into [`bird.conf`](out/router.fqdn.example/bird.conf), [`peers.conf`](out/router.fqdn.example/peers.conf), and [`static.conf`](out/router.fqdn.example/static.conf) files in the [`out/`](out/) directory.
## BGP Community Support
The BIRD configuration in this repostiory uses [BGP large communities](http://largebgpcommunities.net/) inspired by [RFC8195](https://tools.ietf.org/html/rfc8195).
### Informational
Informational BGP communities offer insight into Neptune's routing policies.
#### Origin
| Community | Description |
| --------- | ----------- |
| `YOUR_ASN:101:1` | Originated by you |
| `YOUR_ASN:101:2` | Learned from IX |
| `YOUR_ASN:101:3` | Learned from private peer |
| `YOUR_ASN:101:4` | Learned from transit provider |
| `YOUR_ASN:101:5` | Learned from customer |#### Region
Octets in the function field are the numeric country identifier defined by ISO 3166-1.
| Community | Description |
| --------- | ----------- |
| `YOUR_ASN:102:840` | Learned in U.S. |#### Site
| Community | Description |
| --------- | ----------- |
| `YOUR_ASN:103:1` | Learned at NY1 |### Actionable
BGP communities which manipulate the routing policy.
#### Prepends
| Community | Description |
| --------- | ----------- |
| `YOUR_ASN:900:1` | Prepend `YOUR_ASN` once on export to all AS's |
| `YOUR_ASN:900:2` | Prepend `YOUR_ASN` twice on export to all AS's |
| `YOUR_ASN:900:3` | Prepend `YOUR_ASN` thrice on export to all AS's |
| `YOUR_ASN:991:xxxxx` | Prepend `YOUR_ASN` once on export to AS `xxxxx` |
| `YOUR_ASN:992:xxxxx` | Prepend `YOUR_ASN` once on export to AS `xxxxx` |
| `YOUR_ASN:993:xxxxx` | Prepend `YOUR_ASN` once on export to AS `xxxxx` |#### NO_EXPORT
| Community | Description |
| --------- | ----------- |
| `YOUR_ASN:600:xxxxx` | Do not export to AS `xxxxx` |
| `YOUR_ASN:601:2` | Do not export to IX peers |
| `YOUR_ASN:601:3` | Do not export to private peers |
| `YOUR_ASN:601:4` | Do not export to transit providers |
| `YOUR_ASN:601:5` | Do not export to customers |
| `YOUR_ASN:602:840` | Do not export in U.S. |
| `YOUR_ASN:603:1` | Do not export in NY1 |## Usage
Start by creating a new `.yml` file in [`config/`](config/) with all of the configurations you'll need. You can use [`config/router.fqdn.example.yml`](config/router.fqdn.example.yml) as a reference.
Once you've tuned your configuration file to your liking, build the docker image locally:
```
script/build
```And then generate the configuration:
```
script/generate
```This will create a file for each of the templates defined in [`/templates`](templates/) without the `.erb` suffix in the [`out/`](out/) directory.
If you find that you need to make any adjustments to the templates, simply do so and then re-run the generator.
## Staying up to date
If you use this as a [GitHub Repository template](https://github.blog/2019-06-06-generate-new-repositories-with-repository-templates/), you will occassionally want to sync your version of the repository with the master one located at [neptune-networks/peering](https://github.com/neptune-networks/peering). To do this, you can run the following commands:
```
git remote add upstream https://github.com/neptune-networks/peering.git
git fetch upstream
git merge upstream/master --allow-unrelated-histories
```## Roadmap
- [ ] Community-based local pref
- [ ] PeeringDB max prefix support
- [ ] Blackhole support