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

Reply via email to