Hello everyone,
I’m learning networking (bgp, ospf, etc.) with vyos and doing some test setups with the newest rolling release (vyos-1.4-rolling-202103251004).
At the moment I was trying the new (really cool! ) vrf feature inside my test setup.
First I started with BFD.
After defining a peer it always uses vrf “default”. And there seems no parameter now for setting a vrf.
Before learning to implement such a parameter (never done that before ) I tried to test it statically by modifying the template “/usr/share/vyos/templates/frr/bfd.frr.tmpl”.
So I changed the line:
peer {{ peer_name }}{{ ’ multihop’ if peer_config.multihop is define
to
peer {{ peer_name }} vrf test1 {{ ’ multihop’ if peer_config.multihop is define
for using my vrf named “test1”.
After rebooting the peer seems to be correct but down:
BFD Peers:
peer 10.0.0.2 local-address 10.0.0.1 vrf test1
Remote ID: 0
Status: down
The problem could be seen in tcpdump. All pakets to port UDP/3784 got replied with ICMP unreachable.
Thats because the interface with my local-adress is using the vrf-feature and the bfd service is using the default vrf context.
Using the vyos config param “bind-to-all” does not changed anything.
I had to do this to get it working:
sysctl -w net.ipv4.udp_l3mdev_accept=1
By the way… BGP had the same problem. Connections to port TCP/179 also got blocked (i learned no routes) and are only working after doing this:
sysctl -w net.ipv4.tcp_l3mdev_accept=1
Do you have an idea how to implement that “the right way”?
Should I try to run BFD in vrf context “test1”? How? The “sysctl’s” should then not needed anymore.
Is there a bug with “bind-to-all” that need to be fixed first?
Before I try to write some code to implement some kind of vrf-parameter for bfd:
may that new syntax acceptable?
set protocols bfd peer vrf
Thats (the important part of) my config:
Vyos1:
set interfaces ethernet eth0 address ‘10.0.1.1/24’
set interfaces ethernet eth0 vrf ‘test1’
set interfaces ethernet eth1 address ‘10.0.0.1/24’
set interfaces ethernet eth1 vrf ‘test1’
set protocols bfd peer 10.0.0.2 echo-mode
set protocols bfd peer 10.0.0.2 source address ‘10.0.0.1’
set vrf bind-to-all
set vrf name test1 protocols bgp 3000 address-family ipv4-unicast network 10.0.1.0/24
set vrf name test1 protocols bgp 3000 neighbor 10.0.0.2 remote-as ‘3000’
set vrf name test1 protocols bgp 3000 neighbor 10.0.0.2 update-source ‘10.0.0.1’
set vrf name test1 protocols bgp 3000 parameters router-id ‘10.0.0.1’
set vrf name test1 table ‘101’Vyos2:
set interfaces ethernet eth0 address ‘10.0.2.1/24’
set interfaces ethernet eth0 vrf ‘test1’
set interfaces ethernet eth1 address ‘10.0.0.2/24’
set interfaces ethernet eth1 vrf ‘test1’
set protocols bfd peer 10.0.0.1 echo-mode
set protocols bfd peer 10.0.0.1 source address ‘10.0.0.2’
set vrf bind-to-all
set vrf name test1 protocols bgp 3000 address-family ipv4-unicast network 10.0.2.0/24
set vrf name test1 protocols bgp 3000 neighbor 10.0.0.1 remote-as ‘3000’
set vrf name test1 protocols bgp 3000 neighbor 10.0.0.1 update-source ‘10.0.0.2’
set vrf name test1 protocols bgp 3000 parameters router-id ‘10.0.0.2’
set vrf name test1 table ‘101’
Thanks
Andreas