# Transit network with two providers and one customer. Customer routes are # advertised to all neighbors. Provider routes are advertised to the # customer only. The BGP roles of the neighbors enforce this. router_id: "198.51.100.1" local_asn: 64500 # Advertise learned routes to all neighbors, as BGP roles permit. export { learned_routes: true } # Advertise to the providers only routes for the address space of the local # AS and of the customer, and at most 20 routes. If more routes are to be # advertised, Ferrix advertises none of them and tears down the session. export_limits { prefixes { prefix: "198.51.100.0/24" } prefixes { prefix: "2001:db8:100::/40" max_length: 48 } prefixes { prefix: "192.0.2.0/24" } prefixes { prefix: "2001:db8:a00::/40" max_length: 48 } max_prefixes: 20 } # Customers can restrict the advertisement of their routes with the large # communities 64500:0:P (not to AS P), 64500:1:P (only to AS P), and # 64500:0:0 (to no neighbor), or the standard communities 0:P, 64500:P, and # 0:64500, and prepend 64500 towards AS P with 64500:11:P to 64500:13:P. # Ferrix removes the communities of AS 64500 from the routes of other # neighbors, such as the providers below. control_communities: true peers { name: "transit-a" endpoint { address: "203.0.113.0" } remote_asn: 64496 role: PROVIDER import { max_prefixes: 1500000 add_large_communities: "64500:2:100" } } peers { name: "transit-b" endpoint { address: "203.0.113.2" } remote_asn: 64497 role: PROVIDER import { max_prefixes: 1500000 add_large_communities: "64500:2:200" } # Prepend to make the path through transit-b less preferred. This # statement replaces the top-level export statement for this neighbor. export { learned_routes: true as_path_prepend: 2 } } # Customer with a four-octet AS number. The prefix and origin AS lists # restrict its routes to its registered address space. Local preference # 200 makes its routes preferred over the same prefixes from providers. # The customer may set control communities; the informational communities # 64500:2:* are removed, so that it cannot set those. peers { name: "customer-65536" endpoint { address: "203.0.113.5" } remote_asn: 65536 role: CUSTOMER require_role: true import { max_prefixes: 50 prefixes { prefix: "192.0.2.0/24" } prefixes { prefix: "2001:db8:a00::/40" max_length: 48 } origin_asns: 65536 accept_control_communities: true remove_communities: "64500:2:*" add_large_communities: "64500:2:300" local_pref: 200 } } originate { prefix: "198.51.100.0/24" } originate { prefix: "2001:db8:100::/40" } rpki { caches { address: "::1" port: 3323 } } kernel {} http_endpoint { address: "127.0.0.1" port: 8080 }