Re: bgpd not including MED attribute on updates

2021-02-02 Thread openbsd
Hello Claudio,

Thank you for the clarification. Your suggestion works splendidly.

On Thu, Jan 28, 2021 at 3:12 PM Claudio Jeker 
wrote:

> On Thu, Jan 28, 2021 at 02:51:33PM +0100, open...@kene.nu wrote:
> > In my case MED is changed with + on every eBGP hop. I use it to
> > calculate the total MED over several hops to decide the best path from a
> > latency point of view.
> >
> > My intention with listing the advertised prefix from R1 was to show that
> > there is a MED present. As per the tcpdump I did, the MED attribute is
> not
> > included in the BGP update packets. This I have confirmed is the case for
> > all prefixes on R1 that has an iBGP nexthop. Any prefixes that in R1 has
> an
> > eBGP nexthop advertises MED as expected.
> >
> > The "bgpd -vn" for R1:
> >
> > AS 64660
> > router-id 172.30.37.1
> > socket "/var/run/bgpd.sock.0"
> > holdtime 9
> > rde med compare always
> > nexthop qualify via bgp
> >
> > prefix-set "internal" {
> > 
> > }
> >
> > rde rib Adj-RIB-In no evaluate
> > rde rib Loc-RIB rtable 0 fib-update yes
> >
> > neighbor 172.30.1.54 {
> > descr "R2"
> > remote-as 64840
> > enforce neighbor-as yes
> > enforce local-as yes
> > announce IPv4 unicast
> > }
> >
> > group "rr" {
> > neighbor 172.30.37.25 {
> > descr "rr1"
> > remote-as 64660
> > local-address 172.30.37.1
> > enforce neighbor-as no
> > enforce local-as yes
> > announce IPv4 unicast
> > }
> > neighbor 172.30.37.39 {
> > descr "rr2"
> > remote-as 64660
> > local-address 172.30.37.1
> > enforce neighbor-as no
> > enforce local-as yes
> > announce IPv4 unicast
> > }
> > }
> >
> > deny from any
> > deny to any
> > allow to ebgp prefix-set "internal"
> > allow to ibgp prefix-set "internal"
> > allow from ebgp prefix-set "internal"
> > allow from group "rr" prefix-set "internal"
> > match to ibgp set { nexthop self }
> > match from 172.30.1.54 set { metric +23 }
>
> Any route learned via rr1 or rr2 will not pass the MED on to R2 because
> the system does not touch the MED and therefor bgpd considers the received
> MED from rr1 and rr2 to have originated from outside and so it is excluded
> from UPDATES to EBGP peers.
>
> You should add a 'maych from ibgp set med +0' rule which makes MED learned
> via IBGP to be considered to be sent out.
>
> > On Thu, Jan 28, 2021 at 2:01 PM Claudio Jeker 
> > wrote:
> >
> > > On Thu, Jan 28, 2021 at 12:41:29PM +0100, open...@kene.nu wrote:
> > > > Hello,
> > > >
> > > > I am experiencing this on 6.8, fully syspatched.
> > > >
> > > > root@R1():~ # uname -a
> > > > OpenBSD R1 6.8 GENERIC.MP#4 amd64
> > > >
> > > > The problem is that R1 sends updates with MED set to 0 even though I
> > > expect
> > > > it not to be. Upon reviewing a tcpdump pcap taken at R2, the MED
> > > attribute
> > > > is not even included in said update sent from R1.
> > > >
> > > > This only applies to some, not all updates, in my case it seems to
> affect
> > > > routes where R1 has an ospf discovered nexthop. (172.30.37.2)
> > > >
> > > > root@R1():~ # route -n get 172.30.37.2 | grep priority
> > > >priority: 32 (ospf)
> > > >
> > > > root@R1():~ # route -n get 172.30.1.110 | grep priority
> > > >priority: 8 (static)
> > > >
> > > > root@R1():~ # bgpctl sh ip bgp neigh R2 out | egrep
> "172.30.194.[1234]"
> > > > *   N 172.30.194.1/32  172.30.1.110  100   210 64750 i
> > > > *   N 172.30.194.2/32  172.30.37.2   100   251 64750 i
> > > > *   N 172.30.194.3/32  172.30.1.110  100   210 64750 i
> > > > *   N 172.30.194.4/32  172.30.1.110  100   210 64750 i
> > > >
> > > > root@R2():~ $ bgpctl sh ip bgp neigh R1 in | egrep
> "172.30.194.[1234]"
> > > > *   N 172.30.194.1/32  172.30.1.55100   210 64660
> 64750
> > > i
> > > > *   N 172.30.194.2/32  172.30.1.55100 0 64660
> 64750
> > > i
> > > > *   N 172.30.194.3/32  172.30.1.55100   210 64660
> 64750
> > > i
> > > > *   N 172.30.194.4/32  172.30.1.55100   210 64660
> 64750
> > > i
> > >
> > > Please remember that MED is not really a transitive attribute. It only
> > > hops into an AS but not accross it. So a MED recv from an EBGP session
> is
> > > not forwarded. If the MED is changed (e.g. set med +1 -- maybe set med
> +0
> > > works as well, don't remember) then the MED will be passed on.
> > > From the output the session between R1 and R2 is EBGP so it very much
> > > depends on your filter rules. If the MED was changed by the ruleset it
> > > will be sent if not it will be filtered.
> > >
> > > With the limited information it is not really possible to know. Note,
> the
> > > adj-rib-out output on R1 shows the prefix before the attribute is
> stripped.
> > > Also the ASPATH prepend happens then.
> > >
> > > --
> > > :wq Claudio
> > >
>
> --
> :wq Claudio
>


Re: bgpd not including MED attribute on updates

2021-01-28 Thread Claudio Jeker
On Thu, Jan 28, 2021 at 02:51:33PM +0100, open...@kene.nu wrote:
> In my case MED is changed with + on every eBGP hop. I use it to
> calculate the total MED over several hops to decide the best path from a
> latency point of view.
> 
> My intention with listing the advertised prefix from R1 was to show that
> there is a MED present. As per the tcpdump I did, the MED attribute is not
> included in the BGP update packets. This I have confirmed is the case for
> all prefixes on R1 that has an iBGP nexthop. Any prefixes that in R1 has an
> eBGP nexthop advertises MED as expected.
> 
> The "bgpd -vn" for R1:
> 
> AS 64660
> router-id 172.30.37.1
> socket "/var/run/bgpd.sock.0"
> holdtime 9
> rde med compare always
> nexthop qualify via bgp
> 
> prefix-set "internal" {
> 
> }
> 
> rde rib Adj-RIB-In no evaluate
> rde rib Loc-RIB rtable 0 fib-update yes
> 
> neighbor 172.30.1.54 {
> descr "R2"
> remote-as 64840
> enforce neighbor-as yes
> enforce local-as yes
> announce IPv4 unicast
> }
> 
> group "rr" {
> neighbor 172.30.37.25 {
> descr "rr1"
> remote-as 64660
> local-address 172.30.37.1
> enforce neighbor-as no
> enforce local-as yes
> announce IPv4 unicast
> }
> neighbor 172.30.37.39 {
> descr "rr2"
> remote-as 64660
> local-address 172.30.37.1
> enforce neighbor-as no
> enforce local-as yes
> announce IPv4 unicast
> }
> }
> 
> deny from any
> deny to any
> allow to ebgp prefix-set "internal"
> allow to ibgp prefix-set "internal"
> allow from ebgp prefix-set "internal"
> allow from group "rr" prefix-set "internal"
> match to ibgp set { nexthop self }
> match from 172.30.1.54 set { metric +23 }

Any route learned via rr1 or rr2 will not pass the MED on to R2 because
the system does not touch the MED and therefor bgpd considers the received
MED from rr1 and rr2 to have originated from outside and so it is excluded
from UPDATES to EBGP peers.

You should add a 'maych from ibgp set med +0' rule which makes MED learned
via IBGP to be considered to be sent out.
 
> On Thu, Jan 28, 2021 at 2:01 PM Claudio Jeker 
> wrote:
> 
> > On Thu, Jan 28, 2021 at 12:41:29PM +0100, open...@kene.nu wrote:
> > > Hello,
> > >
> > > I am experiencing this on 6.8, fully syspatched.
> > >
> > > root@R1():~ # uname -a
> > > OpenBSD R1 6.8 GENERIC.MP#4 amd64
> > >
> > > The problem is that R1 sends updates with MED set to 0 even though I
> > expect
> > > it not to be. Upon reviewing a tcpdump pcap taken at R2, the MED
> > attribute
> > > is not even included in said update sent from R1.
> > >
> > > This only applies to some, not all updates, in my case it seems to affect
> > > routes where R1 has an ospf discovered nexthop. (172.30.37.2)
> > >
> > > root@R1():~ # route -n get 172.30.37.2 | grep priority
> > >priority: 32 (ospf)
> > >
> > > root@R1():~ # route -n get 172.30.1.110 | grep priority
> > >priority: 8 (static)
> > >
> > > root@R1():~ # bgpctl sh ip bgp neigh R2 out | egrep "172.30.194.[1234]"
> > > *   N 172.30.194.1/32  172.30.1.110  100   210 64750 i
> > > *   N 172.30.194.2/32  172.30.37.2   100   251 64750 i
> > > *   N 172.30.194.3/32  172.30.1.110  100   210 64750 i
> > > *   N 172.30.194.4/32  172.30.1.110  100   210 64750 i
> > >
> > > root@R2():~ $ bgpctl sh ip bgp neigh R1 in | egrep "172.30.194.[1234]"
> > > *   N 172.30.194.1/32  172.30.1.55100   210 64660 64750
> > i
> > > *   N 172.30.194.2/32  172.30.1.55100 0 64660 64750
> > i
> > > *   N 172.30.194.3/32  172.30.1.55100   210 64660 64750
> > i
> > > *   N 172.30.194.4/32  172.30.1.55100   210 64660 64750
> > i
> >
> > Please remember that MED is not really a transitive attribute. It only
> > hops into an AS but not accross it. So a MED recv from an EBGP session is
> > not forwarded. If the MED is changed (e.g. set med +1 -- maybe set med +0
> > works as well, don't remember) then the MED will be passed on.
> > From the output the session between R1 and R2 is EBGP so it very much
> > depends on your filter rules. If the MED was changed by the ruleset it
> > will be sent if not it will be filtered.
> >
> > With the limited information it is not really possible to know. Note, the
> > adj-rib-out output on R1 shows the prefix before the attribute is stripped.
> > Also the ASPATH prepend happens then.
> >
> > --
> > :wq Claudio
> >

-- 
:wq Claudio



Re: bgpd not including MED attribute on updates

2021-01-28 Thread openbsd
In my case MED is changed with + on every eBGP hop. I use it to
calculate the total MED over several hops to decide the best path from a
latency point of view.

My intention with listing the advertised prefix from R1 was to show that
there is a MED present. As per the tcpdump I did, the MED attribute is not
included in the BGP update packets. This I have confirmed is the case for
all prefixes on R1 that has an iBGP nexthop. Any prefixes that in R1 has an
eBGP nexthop advertises MED as expected.

The "bgpd -vn" for R1:

AS 64660
router-id 172.30.37.1
socket "/var/run/bgpd.sock.0"
holdtime 9
rde med compare always
nexthop qualify via bgp

prefix-set "internal" {

}

rde rib Adj-RIB-In no evaluate
rde rib Loc-RIB rtable 0 fib-update yes

neighbor 172.30.1.54 {
descr "R2"
remote-as 64840
enforce neighbor-as yes
enforce local-as yes
announce IPv4 unicast
}

group "rr" {
neighbor 172.30.37.25 {
descr "rr1"
remote-as 64660
local-address 172.30.37.1
enforce neighbor-as no
enforce local-as yes
announce IPv4 unicast
}
neighbor 172.30.37.39 {
descr "rr2"
remote-as 64660
local-address 172.30.37.1
enforce neighbor-as no
enforce local-as yes
announce IPv4 unicast
}
}

deny from any
deny to any
allow to ebgp prefix-set "internal"
allow to ibgp prefix-set "internal"
allow from ebgp prefix-set "internal"
allow from group "rr" prefix-set "internal"
match to ibgp set { nexthop self }
match from 172.30.1.54 set { metric +23 }

On Thu, Jan 28, 2021 at 2:01 PM Claudio Jeker 
wrote:

> On Thu, Jan 28, 2021 at 12:41:29PM +0100, open...@kene.nu wrote:
> > Hello,
> >
> > I am experiencing this on 6.8, fully syspatched.
> >
> > root@R1():~ # uname -a
> > OpenBSD R1 6.8 GENERIC.MP#4 amd64
> >
> > The problem is that R1 sends updates with MED set to 0 even though I
> expect
> > it not to be. Upon reviewing a tcpdump pcap taken at R2, the MED
> attribute
> > is not even included in said update sent from R1.
> >
> > This only applies to some, not all updates, in my case it seems to affect
> > routes where R1 has an ospf discovered nexthop. (172.30.37.2)
> >
> > root@R1():~ # route -n get 172.30.37.2 | grep priority
> >priority: 32 (ospf)
> >
> > root@R1():~ # route -n get 172.30.1.110 | grep priority
> >priority: 8 (static)
> >
> > root@R1():~ # bgpctl sh ip bgp neigh R2 out | egrep "172.30.194.[1234]"
> > *   N 172.30.194.1/32  172.30.1.110  100   210 64750 i
> > *   N 172.30.194.2/32  172.30.37.2   100   251 64750 i
> > *   N 172.30.194.3/32  172.30.1.110  100   210 64750 i
> > *   N 172.30.194.4/32  172.30.1.110  100   210 64750 i
> >
> > root@R2():~ $ bgpctl sh ip bgp neigh R1 in | egrep "172.30.194.[1234]"
> > *   N 172.30.194.1/32  172.30.1.55100   210 64660 64750
> i
> > *   N 172.30.194.2/32  172.30.1.55100 0 64660 64750
> i
> > *   N 172.30.194.3/32  172.30.1.55100   210 64660 64750
> i
> > *   N 172.30.194.4/32  172.30.1.55100   210 64660 64750
> i
>
> Please remember that MED is not really a transitive attribute. It only
> hops into an AS but not accross it. So a MED recv from an EBGP session is
> not forwarded. If the MED is changed (e.g. set med +1 -- maybe set med +0
> works as well, don't remember) then the MED will be passed on.
> From the output the session between R1 and R2 is EBGP so it very much
> depends on your filter rules. If the MED was changed by the ruleset it
> will be sent if not it will be filtered.
>
> With the limited information it is not really possible to know. Note, the
> adj-rib-out output on R1 shows the prefix before the attribute is stripped.
> Also the ASPATH prepend happens then.
>
> --
> :wq Claudio
>


Re: bgpd not including MED attribute on updates

2021-01-28 Thread Claudio Jeker
On Thu, Jan 28, 2021 at 12:41:29PM +0100, open...@kene.nu wrote:
> Hello,
> 
> I am experiencing this on 6.8, fully syspatched.
> 
> root@R1():~ # uname -a
> OpenBSD R1 6.8 GENERIC.MP#4 amd64
> 
> The problem is that R1 sends updates with MED set to 0 even though I expect
> it not to be. Upon reviewing a tcpdump pcap taken at R2, the MED attribute
> is not even included in said update sent from R1.
> 
> This only applies to some, not all updates, in my case it seems to affect
> routes where R1 has an ospf discovered nexthop. (172.30.37.2)
> 
> root@R1():~ # route -n get 172.30.37.2 | grep priority
>priority: 32 (ospf)
> 
> root@R1():~ # route -n get 172.30.1.110 | grep priority
>priority: 8 (static)
> 
> root@R1():~ # bgpctl sh ip bgp neigh R2 out | egrep "172.30.194.[1234]"
> *   N 172.30.194.1/32  172.30.1.110  100   210 64750 i
> *   N 172.30.194.2/32  172.30.37.2   100   251 64750 i
> *   N 172.30.194.3/32  172.30.1.110  100   210 64750 i
> *   N 172.30.194.4/32  172.30.1.110  100   210 64750 i
> 
> root@R2():~ $ bgpctl sh ip bgp neigh R1 in | egrep "172.30.194.[1234]"
> *   N 172.30.194.1/32  172.30.1.55100   210 64660 64750 i
> *   N 172.30.194.2/32  172.30.1.55100 0 64660 64750 i
> *   N 172.30.194.3/32  172.30.1.55100   210 64660 64750 i
> *   N 172.30.194.4/32  172.30.1.55100   210 64660 64750 i

Please remember that MED is not really a transitive attribute. It only
hops into an AS but not accross it. So a MED recv from an EBGP session is
not forwarded. If the MED is changed (e.g. set med +1 -- maybe set med +0
works as well, don't remember) then the MED will be passed on.
>From the output the session between R1 and R2 is EBGP so it very much
depends on your filter rules. If the MED was changed by the ruleset it
will be sent if not it will be filtered.

With the limited information it is not really possible to know. Note, the
adj-rib-out output on R1 shows the prefix before the attribute is stripped.
Also the ASPATH prepend happens then.

-- 
:wq Claudio



bgpd not including MED attribute on updates

2021-01-28 Thread openbsd
Hello,

I am experiencing this on 6.8, fully syspatched.

root@R1():~ # uname -a
OpenBSD R1 6.8 GENERIC.MP#4 amd64

The problem is that R1 sends updates with MED set to 0 even though I expect
it not to be. Upon reviewing a tcpdump pcap taken at R2, the MED attribute
is not even included in said update sent from R1.

This only applies to some, not all updates, in my case it seems to affect
routes where R1 has an ospf discovered nexthop. (172.30.37.2)

root@R1():~ # route -n get 172.30.37.2 | grep priority
   priority: 32 (ospf)

root@R1():~ # route -n get 172.30.1.110 | grep priority
   priority: 8 (static)

root@R1():~ # bgpctl sh ip bgp neigh R2 out | egrep "172.30.194.[1234]"
*   N 172.30.194.1/32  172.30.1.110  100   210 64750 i
*   N 172.30.194.2/32  172.30.37.2   100   251 64750 i
*   N 172.30.194.3/32  172.30.1.110  100   210 64750 i
*   N 172.30.194.4/32  172.30.1.110  100   210 64750 i

root@R2():~ $ bgpctl sh ip bgp neigh R1 in | egrep "172.30.194.[1234]"
*   N 172.30.194.1/32  172.30.1.55100   210 64660 64750 i
*   N 172.30.194.2/32  172.30.1.55100 0 64660 64750 i
*   N 172.30.194.3/32  172.30.1.55100   210 64660 64750 i
*   N 172.30.194.4/32  172.30.1.55100   210 64660 64750 i