On Thu, Jun 16, 2011 at 03:45:15PM -0300, Christian Lyra wrote: > Hi all, > > I4m testing OpenBGPD on a route-server/IX topology. My testing case > has one Route Server (RS), 3 AS (AS1, AS2, AS3) and a fourth client AS > (AS4) connected to AS2 and AS3. The following "ascii" figure shows the > topology: > > RS > ----------------------------------- > | | | > AS1 AS2 AS3 > | | > ----------------- > | > AS4 > > Each AS announces two /17 prefixes. AS4 announce its two prefixes with > a prepend to AS3, and with no prepend to AS2. In this case, the RS RIB > is show below: > > flags destination gateway lpref med aspath origin > *> 10.1.0.0/17 x.x.x..AS1 100 0 1 i > *> 10.1.128.0/17 x.x.x.x.AS1 100 0 1 i > *> 10.2.0.0/17 x.x.x.x.AS2 100 0 2 i > *> 10.2.128.0/17 x.x.x.x.AS2 100 0 2 i > *> 10.3.0.0/17 x.x.x.x.AS3 100 0 3 i > *> 10.3.128.0/17 x.x.x.x.AS3 100 0 3 i > *> 10.4.0.0/17 x.x.x.x.AS2 100 0 2 4 i > * 10.4.0.0/17 x.x.x.x.AS3 100 0 3 4 4 i > *> 10.4.128.0/17 x.x.x.x.AS2 100 0 2 4 i > * 10.4.128.0/17 x.x.x.AS3 100 0 3 4 4 i > > Since BGP export only the best routes, so AS1 learn the AS4 prefixes > with AS2 being the gateway (as expected...). RS configuration is show > below: > > peer1="x.x.x.as1" > peer2="x.x.x.as2" > peer3="x.x.x.as3" > ASN="65000" > > AS $ASN > router-id x.x.x.rs > fib-update no > transparent-as yes > nexthop qualify via bgp > > group "RS" { > neighbor $peer1 { > descr "AS1" > remote-as 1 > announce all > } > neighbor $peer2 { > descr "AS2" > remote-as 2 > announce all > } > neighbor $peer3 { > descr "AS3" > remote-as 3 > announce all > } > } > > match from any set community $ASN:neighbor-as > > So far, so good. Now, let4s change the rules and make AS1 no longer > exchange traffic with AS2 (and vice-versa). If we just made this by > using filters denying AS1<->AS2 updates, then AS1 will never learn the > prefixes of AS4 trhu AS3. This hidden prefix problem is better > explained here [1]. Quagga and Bird [2] deals with this problem by > using a per AS RIB, so the filter is applied on the input of each RIB, > before the path selection process.
OpenBGPD supports per AS RIB as well. AmsIX is using this feature AFAIK. At least I implemented it for and together with AmsIX. > I tried a few solutions and none worked. First, I tried to use the > "route-collector yes" option. Documentation said that this should > disable the path selection, and i thought that openbgd would export > all routes to clients leaving to them the work of selecting routes. > But route selection still occurs, at least when exporting, so, it > didnt worked as I would like. I added the following lines to > configuration: > > route-collector yes > deny to $peer1 community $ASN:2 > deny to $peer2 community $ASN:1 Nah, route-collector will not make you happy. This is a hack that will skip a lot of more complex operations (IIRC it even skips part of the filters). > I also saw in docs that it4s possible to create a table and disable > the route selection, so my next try was create such table, and > configure all peers to use that table: > > rde rib allroutes no evaluate > > and adding a "rib allroutes" to each peer config. But this didnt > worked too, in fact, no route was exported. Hmm. I'm not sure for what I did the "no evaluate" mode. But You need the decision process in any case since without it no route will be selected to be exported. > My last try was creating a RIB for each peer: > > rde rib toAS1 > rde rib toAS2 > rde rib toAS3 > > As I understood from docs, I may apply a rule to one rib, like this: > > deny to $peer1 community $ASN:2 rib toAS1 > > But openbgpd complains about such line. Does anyone knows how solve this? The correct syntax is: deny rib toAS1 to $peer1 community $ASN:2 But the above rule does not make much sense. I think you want something like: deny rib toAS1 from $peer2 community $ASN:2 Since you need to filter prefixes going into the per-peer RIB and not filter the selected prefix beeing sent out. You need to filter incomming prefixes on a per RIB basis. -- :wq Claudio