Hello,
I try to setup multipath routing environment with OpenBSD's bgpd.
As I understand from man page the keyword is add-path.
Here is my environmental report:
1. In my lab I simulate two wan links for each device.
2. Each device also has a LAN network to announce.
3. In the middle of these two devices there is another OpenBSD acting as
Router.
Device 1 :
WAN1 : 192.168.10.2/24
WAN2: 10.1.1.2/24
LAN : 172.16.1.1/24
GRE1 : 172.31.1.1 -> 172.31.1.2 netmask /24 (over wan1)
GRE2 : 172.31.2.1 -> 172.31.2.2 netmask /24 (over wan2)
Device 2 :
WAN1 : 192.168.20.2/24
WAN2: 10.1.2.2/24
LAN : 172.16.2.1/24
GRE1 : 172.31.1.2 -> 172.31.1.1 netmask /24 (over wan1)
GRE2 : 172.31.2.2 -> 172.31.2.1 netmask /24 (over wan2)
Router :
192.168.10.1/24
192.168.20.1/24
10.1.1.1/24
10.1.2.1/24
---------
Here bgpd.conf file contents :
Device1# cat /etc/bgpd.conf
AS 100
network 172.16.1.0/24
neighbor 172.31.1.2 {
remote-as 100
log updates
announce IPv4 unicast
announce add-path recv yes
announce add-path send best
}
neighbor 172.31.2.2 {
remote-as 100
log updates
announce IPv4 unicast
announce add-path recv yes
announce add-path send best
}
allow quick from { ibgp }
allow quick to { ibgp }
Device2# cat /etc/bgpd.conf
AS 100
network 172.16.2.0/24
neighbor 172.31.1.1 {
remote-as 100
log updates
announce IPv4 unicast
announce add-path recv yes
announce add-path send best
}
neighbor 172.31.2.1 {
remote-as 100
log updates
announce IPv4 unicast
announce add-path recv yes
announce add-path send best
}
allow quick from { ibgp }
allow quick to { ibgp }
Here bgpctl show outputs:
#bgp connection is OK
Device1# bgpctl show
Neighbor AS MsgRcvd MsgSent OutQ Up/Down State/PrfRcvd
172.31.1.2 100 9 9 0 00:02:34 1
172.31.2.2 100 9 9 0 00:02:34 1
# we can see rib tables are ready
Device1# bgpctl show rib
flags: * = Valid, > = Selected, I = via IBGP, A = Announced,
S = Stale, E = Error
origin validation state: N = not-found, V = valid, ! = invalid
origin: i = IGP, e = EGP, ? = Incomplete
flags ovs destination gateway lpref med aspath origin
AI*> N 172.16.1.0/24 0.0.0.0 100 0 i
I*> N 172.16.2.0/24 172.31.1.2 100 0 i
I*m N 172.16.2.0/24 172.31.2.2 100 0 i
Device2# bgpctl show rib
flags: * = Valid, > = Selected, I = via IBGP, A = Announced,
S = Stale, E = Error
origin validation state: N = not-found, V = valid, ! = invalid
origin: i = IGP, e = EGP, ? = Incomplete
flags ovs destination gateway lpref med aspath origin
I*> N 172.16.1.0/24 172.31.1.1 100 0 i
I*m N 172.16.1.0/24 172.31.2.1 100 0 i
AI*> N 172.16.2.0/24 0.0.0.0 100 0 i
But there is only one path in FIB table:
Device1# bgpctl show fib | grep B
flags: B = BGP, C = Connected, S = Static
N = BGP Nexthop reachable via this route
B 48 172.16.2.0/24 172.31.1.2
Device2# bgpctl show fib | grep B
flags: B = BGP, C = Connected, S = Static
N = BGP Nexthop reachable via this route
B 48 172.16.1.0/24 172.31.1.1
Also my sysctl.conf is ok (net.inet.ip.multipath=1)
I just wanna add multpath routes for my networks as dynamic.
It's ok with static routing(*) but I would like to achieve it as dynamically
with bgpd.
What is wrong with my configuration? Can you please help me.
Thanks.
(*)
Device1# route add 172.16.2.0/24 172.31.1.2 -mpath
add net 172.16.2.0/24: gateway 172.31.1.2
Device1# route add 172.16.2.0/24 172.31.2.2 -mpath
add net 172.16.2.0/24: gateway 172.31.2.2
Device1# netstat -rnf inet | grep 172.16.2
172.16.2/24 172.31.1.2 UGSP 0 0 - 8 gre1
172.16.2/24 172.31.2.2 UGSP 0 0 - 8 gre2
Device2# route add 172.16.1.0/24 172.31.1.1 -mpath
add net 172.16.1.0/24: gateway 172.31.1.1
Device2# route add 172.16.1.0/24 172.31.2.1 -mpath
add net 172.16.1.0/24: gateway 172.31.2.1
Device2# netstat -rnf inet | grep 172.16.1
172.16.1/24 172.31.1.1 UGSP 0 0 - 8 gre1
172.16.1/24 172.31.2.1 UGSP 0 0 - 8 gre2