{"id":13845826,"url":"https://github.com/pierky/arouteserver","last_synced_at":"2025-07-12T03:32:58.263Z","repository":{"id":16690625,"uuid":"80448443","full_name":"pierky/arouteserver","owner":"pierky","description":"A tool to automatically build (and test) feature-rich configurations for BGP route servers.","archived":false,"fork":false,"pushed_at":"2024-09-09T19:39:48.000Z","size":13496,"stargazers_count":284,"open_issues_count":18,"forks_count":46,"subscribers_count":16,"default_branch":"master","last_synced_at":"2024-09-10T00:08:36.833Z","etag":null,"topics":["arouteserver","bgp","bgp-daemon","bird","internet-exchange","ixp","ixp-manager","ixps","network-automation","openbgpd","peering","route-server","routing"],"latest_commit_sha":null,"homepage":"https://arouteserver.readthedocs.org/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pierky.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGES.rst","contributing":"docs/CONTRIBUTING.rst","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"docs/SUPPORTED_SPEAKERS.rst","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-01-30T18:08:39.000Z","updated_at":"2024-09-09T19:39:51.000Z","dependencies_parsed_at":"2023-12-16T05:12:30.231Z","dependency_job_id":"a1315a0e-e9b3-44e8-8dbf-7af315d5179d","html_url":"https://github.com/pierky/arouteserver","commit_stats":{"total_commits":1121,"total_committers":18,"mean_commits":62.27777777777778,"dds":0.0347903657448706,"last_synced_commit":"f2a68776edaf4c1b69a94ab369141579f6a0d1df"},"previous_names":[],"tags_count":170,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pierky%2Farouteserver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pierky%2Farouteserver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pierky%2Farouteserver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pierky%2Farouteserver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pierky","download_url":"https://codeload.github.com/pierky/arouteserver/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225791438,"owners_count":17524783,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arouteserver","bgp","bgp-daemon","bird","internet-exchange","ixp","ixp-manager","ixps","network-automation","openbgpd","peering","route-server","routing"],"created_at":"2024-08-04T17:03:37.532Z","updated_at":"2024-11-21T19:30:52.496Z","avatar_url":"https://github.com/pierky.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":".. DO NOT EDIT: this file is automatically created by /utils/build_doc\n\nARouteServer\n============\n\n|Documentation| |Build Status| |Unique test cases| |PYPI Version| |Python Versions|\n\n\nA Python tool to automatically build (and test) feature-rich configurations for BGP route servers.\n\nHow it works\n------------\n\n#. Two YAML files provide *general policies* and *clients configurations* options:\n\n   .. code:: yaml\n\n      cfg:\n        rs_as: 64496\n        router_id: \"192.0.2.2\"\n        filtering:\n          irrdb:\n            enforce_origin_in_as_set: True\n            enforce_prefix_in_as_set: True\n          rpki_bgp_origin_validation:\n            enabled: True\n            reject_invalid: True\n            ...\n\n   .. code:: yaml\n\n      clients:\n        - asn: 64511\n          ip:\n          - \"192.0.2.11\"\n          - \"2001:db8:1:1::11\"\n          irrdb:\n            as_sets:\n              - \"RIPE::AS-FOO\"\n        ...\n\n#. ARouteServer acquires external information to enrich them: i.e. `bgpq4`_/`bgpq3`_ for IRR data, `PeeringDB`_ for max-prefix limit and AS-SETs, RPKI ROAs, ...\n\n#. `Jinja2`_ built-in templates are used to render the final route server's configuration file.\n\n   Currently, **BIRD** (\u003e= 1.6.3 up to 1.6.8), **BIRD v2** (starting from 2.0.7), **BIRD v3** (only for testing, still in pre-release/alpha) and **OpenBGPD** (OpenBSD \u003e= 7.0 also OpenBGPD Portable \u003e= 7.0) are supported, with almost `feature parity \u003chttps://arouteserver.readthedocs.io/en/latest/SUPPORTED_SPEAKERS.html#supported-features\u003e`__ between them.\n\n**Validation** and testing of the configurations generated with this tool are performed using the built-in **live tests** framework: `Docker`_ instances are used to simulate several scenarios and to validate the behaviour of the route server after configuring it with ARouteServer. More details on the `Live tests \u003chttps://arouteserver.readthedocs.io/en/latest/LIVETESTS.html\u003e`__ section.\n\nA Docker-based `playground \u003chttps://github.com/pierky/arouteserver/tree/master/tools/playground\u003e`__ is available to experiment with the tool in a virtual IXP environment.\n\nAlso, a `Docker image \u003chttps://hub.docker.com/r/pierky/arouteserver\u003e`__ is provided to start building rich and secure configurations in a couple of minutes.\n\n.. _bgpq3: https://github.com/snar/bgpq3\n.. _bgpq4: https://github.com/bgp/bgpq4\n.. _PeeringDB: https://www.peeringdb.com/\n.. _Jinja2: http://jinja.pocoo.org/\n.. _Docker: https://www.docker.com/\n\nFeatures\n--------\n\n- **Path hiding** mitigation techniques (`RFC7947`_ `section 2.3.1 \u003chttps://tools.ietf.org/html/rfc7947#section-2.3.1\u003e`__).\n\n- Basic filters (mostly enabled by default):\n\n  - **NEXT_HOP** enforcement (strict / same AS - `RFC7948`_ `section 4.8 \u003chttps://tools.ietf.org/html/rfc7948#section-4.8\u003e`__);\n  - minimum and maximum IPv4/IPv6 **prefix length**;\n  - maximum **AS_PATH length**;\n  - reject **invalid AS_PATHs** (containing `private/invalid ASNs \u003chttp://mailman.nanog.org/pipermail/nanog/2016-June/086078.html\u003e`_);\n  - reject AS_PATHs containing **transit-free** or **never via route-servers** ASNs (using `PeeringDB info_never_via_route_servers attribute \u003chttps://github.com/peeringdb/peeringdb/issues/394\u003e`__);\n  - reject **bogons**;\n  - **max-prefix limit** based on global or client-specific values or on **PeeringDB** data.\n\n- Prefixes and origin ASNs validation (also in *tag-only* mode):\n\n  - **IRR-based filters** (`RFC7948`_ `section 4.6.2 \u003chttps://tools.ietf.org/html/rfc7948#section-4.6.2\u003e`__);\n  - AS-SETs configured manually or fetched from PeeringDB;\n  - support for **IRR sources** (RIPE::AS-FOO, RADB::AS-BAR);\n  - **white lists** support;\n  - extended dataset for filters generation:\n\n    - RPKI **ROAs used as route objects**;\n    - `Origin AS \u003chttps://mailman.nanog.org/pipermail/nanog/2017-December/093525.html\u003e`__ from **ARIN Whois** database dump;\n    - `NIC.BR Whois data \u003chttps://ripe76.ripe.net/presentations/43-RIPE76_IRR101_Job_Snijders.pdf\u003e`_ (slide n. 26) from Registro.br;\n\n  - **RPKI**-based filtering (BGP Prefix Origin Validation);\n\n    - ROAs can be retrieved from publicly available JSON files or from a local validating cache;\n\n  - Route Leak Prevention and Detection Using **BGP Roles** (`RFC9234`_).\n\n- **Blackhole filtering** support:\n\n  - optional **NEXT_HOP rewriting**;\n  - signalling via BGP Communities (`BLACKHOLE \u003chttps://tools.ietf.org/html/rfc7999#section-5\u003e`__ and custom communities);\n  - client-by-client control over propagation.\n\n- **Graceful shutdown** support:\n\n  - honor the **GRACEFUL_SHUTDOWN** BGP community received from clients (`draft-ietf-grow-bgp-gshut-11 \u003chttps://tools.ietf.org/html/draft-ietf-grow-bgp-gshut-11\u003e`_);\n  - allow to perform a graceful shutdown of the route server itself.\n\n- Control and informative BGP communities:\n\n  - prefix/origin ASN present/not present in **IRRDBs data**;\n  - do (not) announce to any / **peer** / on **RTT basis**;\n  - **prepend** to any / **peer** / on **RTT basis**;\n  - add **NO_EXPORT** / **NO_ADVERTISE** to any / **peer**;\n  - **32bit ASNs mapping** to 16bit ASNs for announcement control BGP communities;\n  - `Euro-IX large BGP communities \u003chttps://www.euro-ix.net/en/forixps/large-bgp-communities/\u003e`__ to track reject reasons;\n  - custom informational BGP communities.\n\n- Optional session features on a client-by-client basis:\n\n  - prepend route server ASN (`RFC7947`_ `section 2.2.2.1 \u003chttps://tools.ietf.org/html/rfc7947#section-2.2.2.1\u003e`__);\n  - active sessions;\n  - **GTSM** (Generalized TTL Security Mechanism - `RFC5082`_);\n  - **ADD-PATH** capability (`RFC7911`_).\n  - `RFC8950`_ **IPv6 NEXT_HOP for IPv4 routes**.\n\n- Automatic building of clients list:\n\n  - `integration \u003chttps://arouteserver.readthedocs.io/en/latest/USAGE.html#ixp-manager-integration\u003e`__ with **IXP-Manager**;\n  - `fetch lists \u003chttps://arouteserver.readthedocs.io/en/latest/USAGE.html#automatic-clients\u003e`__ from **PeeringDB** records and **Euro-IX member list JSON** files.\n\n- **IX-F Member Export** JSON files `creation \u003chttps://arouteserver.readthedocs.io/en/latest/USAGE.html#ixf-member-export-command\u003e`__.\n\n- Related tools:\n\n  - The `Playground \u003chttps://github.com/pierky/arouteserver/tree/master/tools/playground\u003e`__, to experiment with the tool in a virtual IXP environment.\n\n  - `Invalid routes reporter \u003chttps://arouteserver.readthedocs.io/en/latest/TOOLS.html#invalid-routes-reporter\u003e`__, to log or report invalid routes and their reject reason.\n\nA comprehensive list of features can be found within the comments of the distributed configuration file on `GitHub \u003chttps://github.com/pierky/arouteserver/blob/master/config.d/general.yml\u003e`__ or on the `documentation web page \u003chttps://arouteserver.readthedocs.io/en/latest/GENERAL.html\u003e`__.\n\nMore feature are already planned: see the `Future work \u003chttps://arouteserver.readthedocs.io/en/latest/FUTUREWORK.html\u003e`__ section for more details.\n\n.. _RFC7947: https://tools.ietf.org/html/rfc7947\n.. _RFC7948: https://tools.ietf.org/html/rfc7948\n.. _RFC9234: https://tools.ietf.org/html/rfc9234\n.. _RFC5082: https://tools.ietf.org/html/rfc5082\n.. _RFC7911: https://tools.ietf.org/html/rfc7911\n.. _RFC8950: https://tools.ietf.org/html/rfc8950\n\nFull documentation\n------------------\n\nFull documentation can be found on ReadTheDocs: https://arouteserver.readthedocs.org/\n\nPresentations\n-------------\n\n- Euro-IX \"Learn with us: ARouteServer tutorial\", 28 July 2021: `video \u003chttps://www.youtube.com/watch?v=aiBeFs6xnYs\u003e`__ (33:13)\n\n- RIPE74, 10 May 2017, Connect Working Group: `video \u003chttps://ripe74.ripe.net/archives/video/87/\u003e`__ (9:53), `slides \u003chttps://ripe74.ripe.net/presentations/22-RIPE74-ARouteServer.pdf\u003e`__ (PDF)\n\n- Salottino MIX, 30 May 2017: `slides \u003chttps://www.slideshare.net/PierCarloChiodi/salottino-mix-2017-arouteserver-ixp-automation-made-easy\u003e`__\n\nMentions / endorsements:\n\n- Job Snijders, LACNIC29, 3 May 2018: `slides \u003chttps://www.lacnic.net/innovaportal/file/2621/1/lacnic29_peering_tutorial.pdf\u003e`__ (PDF)\n\n- Anurag Bhatia, APNIC46, 12 September 2018: `video \u003chttps://www.youtube.com/watch?v=XfSNQbiR1cg\u0026t=3140\u003e`__, `slides \u003chttps://conference.apnic.net/46/assets/files/APNC402/Automate-your-IX-config.pdf\u003e`__ (PDF)\n\n- Claudio Jeker, RIPE Labs, 28 November 2018: `OpenBGPD - Adding Diversity to the Route Server Landscape \u003chttps://labs.ripe.net/Members/claudio_jeker/openbgpd-adding-diversity-to-route-server-landscape\u003e`__.\n\nWho is using ARouteServer?\n--------------------------\n\n- `BharatIX \u003chttps://www.bharatix.net/\u003e`__, BIRD.\n\n- `CATNIX \u003chttp://www.catnix.net/en/\u003e`__, BIRD.\n\n- `CHIX \u003chttps://chix.ch/\u003e`__, BIRD and OpenBGPD.\n\n- `CNX \u003chttp://cnx.net.kh/\u003e`__, BIRD v2.\n\n- `DD-IX \u003chttps://dd-ix.net/\u003e`__, BIRD v2.\n\n- `DO-IX \u003chttps://www.do-ix.net/\u003e`__, BIRD.\n\n- `EVIX \u003chttps://evix.org/\u003e`__, BIRD.\n\n- `FCIX \u003chttps://fcix.net/\u003e`__, BIRD.\n\n- `GAVLIX \u003chttps://gavlix.se/\u003e`__.\n\n- `GigaPIX \u003chttps://gigapix.pt/\u003e`__, BIRD and BIRD v2.\n\n- `IX Australia \u003chttps://www.ix.asn.au/\u003e`__, BIRD v2.\n\n- `IX-Denver \u003chttp://ix-denver.org/\u003e`__, BIRD.\n\n- `MBIX \u003chttp://www.mbix.ca/\u003e`__, BIRD.\n\n- `MIX \u003chttps://www.mix-it.net/\u003e`__, BIRD.\n\n- `Netnod \u003chttps://www.netnod.se/\u003e`__, BIRD and GoBGP\\ :sup:`1`\\.\n\n- `NIXI Mumbai (GPX) \u003chttps://nixi.in/\u003e`__, BIRD.\n\n- `NZIX \u003chttps://ix.nz/\u003e`__, BIRD v2.\n\n- `PIT-IX \u003chttps://pit-ix.net/\u003e`__, BIRD.\n\n- `QCIX \u003chttp://www.qcix.net/\u003e`__, BIRD.\n\n- `RO-CIX \u003chttps://roix.net/\u003e`__, OpenBGPD.\n\n- `SFMIX \u003chttps://sfmix.org/\u003e`__, BIRD and OpenBGPD.\n\n- `SONIX \u003chttps://sonix.network/\u003e`__, BIRD v2.\n\n- `SwissIX \u003chttps://www.swissix.ch/\u003e`__, OpenBGPD.\n\n- `Unmetered.Exchange \u003chttps://unmetered.exchange/\u003e`__, BIRD.\n\n- `VANIX \u003chttps://vanix.ca/\u003e`__.\n\n- `YEGIX \u003chttps://yegix.ca\u003e`__, OpenBGPD.\n\n- `YXEIX \u003chttp://yxeix.ca/\u003e`__, OpenBGPD.\n\n- `YYCIX \u003chttps://yycix.ca\u003e`__, OpenBGPD.\n\nAre you using it? Do you want to be listed here? `Drop me a message \u003chttps://pierky.com/#contactme\u003e`__!\n\n\\ :sup:`1`\\: GoBGP configurations are generated using a fork of the project which is still WIP and that hopefully will be merged upstream in the future.\n\nBug? Issues? Support requests?\n------------------------------\n\nBut also suggestions? New ideas?\n\nPlease create an `issue on GitHub \u003chttps://github.com/pierky/arouteserver/issues\u003e`_ or `drop me a message \u003chttps://pierky.com/#contactme\u003e`_.\n\nA Slack channel is also available on the `network.toCode() \u003chttps://networktocode.herokuapp.com/\u003e`__ community: **arouteserver**.\n\nAuthor\n------\n\nPier Carlo Chiodi - https://pierky.com\n\nBlog: https://blog.pierky.com Twitter: `@pierky \u003chttps://twitter.com/pierky\u003e`_\n\n.. |Documentation| image:: https://readthedocs.org/projects/arouteserver/badge/?version=latest\n    :target: https://arouteserver.readthedocs.org/en/latest/?badge=latest\n.. |Build Status| image:: https://github.com/pierky/arouteserver/actions/workflows/cicd.yml/badge.svg?branch=master\n    :target: https://github.com/pierky/arouteserver/actions/workflows/cicd.yml\n.. |Unique test cases| image:: https://img.shields.io/badge/dynamic/json.svg?uri=https://raw.githubusercontent.com/pierky/arouteserver/master/tests/last.json\u0026label=unique%20test%20cases\u0026query=$.unique_test_cases\u0026colorB=47C327\n    :target: https://github.com/pierky/arouteserver/blob/master/tests/last\n.. |PYPI Version| image:: https://img.shields.io/pypi/v/arouteserver.svg\n    :target: https://pypi.python.org/pypi/arouteserver/\n.. |Python Versions| image:: https://img.shields.io/pypi/pyversions/arouteserver.svg\n    :target: https://pypi.python.org/pypi/arouteserver/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpierky%2Farouteserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpierky%2Farouteserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpierky%2Farouteserver/lists"}