BuyVM BGP - no IPv6 advertisements

I’m running a private LNS for the purpose of running an IPv6 tunnel via L2TP. I have my own ASN and IP and am advertising them on a BuyVM VPS. I am running CHR 7.14.2.

My problem is, when I advertise IPv6, CHR can establish a BGP session but isn’t advertising prefixes:

[admin@MikroTik] /routing/bgp> connection/print
Flags: D - dynamic, X - disabled, I - inactive 
 0   name="buyvm" 
     remote.address=2605:6400:ffff::2 .as=53667 
     local.address=2605:6400:XX:X::1 .role=ebgp 
     tcp-md5-key="XXXXXXXX" connect=yes listen=yes routing-table=main 
     as=XXXXX multihop=yes 
     output.network=bgpnet 
     input.accept-nlri=bgpnet 
[admin@MikroTik] /routing/bgp> session/print
Flags: E - established 
 0 E name="buyvm-1" 
     remote.address=2605:6400:ffff::2 .as=53667 .id=169.254.169.179 
     .capabilities=mp,rr,gr,as4,err,llgr .afi=ip,ipv6 .hold-time=4m 
     .messages=7 .bytes=137 .gr-time=120 .gr-afi=ip,ipv6 .eor=ip 
     local.address=2605:6400:XX:X::1 .as=XXXXX .id=198.98.XX.XX
     .capabilities=mp,rr,gr,as4 .messages=6 .bytes=114 .eor="" 
     output.procid=20 .network=bgpnet 
     input.procid=20 ebgp 
     multihop=yes hold-time=3m keepalive-time=1m uptime=5m52s770ms 
     last-started=2024-04-11 17:00:40 prefix-count=0 
[admin@MikroTik] /routing/bgp> advertisements/print

[admin@MikroTik] /routing/bgp>

My config is:

/disk
set slot1 slot=slot1
set slot2 slot=slot2
/interface ethernet
set [ find default-name=ether1 ] arp=proxy-arp disable-running-check=no
/ip pool
add name=ppp-pool ranges=100.87.54.1-100.87.54.255
/ipv6 pool
add name=ppp-pd prefix=2602:XXX:2::/48 prefix-length=56
/ppp profile
set *0 dhcpv6-pd-pool=ppp-pd remote-address=ppp-pool
/routing bgp template
set default as=XXXXX router-id=198.98.XX.XX
/interface l2tp-server server
set enabled=yes
/ip dhcp-client
add interface=ether1
/ip firewall filter
add action=fasttrack-connection chain=forward connection-state=\
    established,related hw-offload=yes
add action=accept chain=forward connection-state=established,related
/ipv6 route
add gateway=2605:6400:10::1
add dst-address=2605:6400:ffff::2/128 gateway=2605:6400:10::1
add blackhole dst-address=2602:XXX:2::/48
add blackhole dst-address=2602:XXX:3::/48
/ipv6 address
add address=2605:6400:XX:X::1/48 advertise=no interface=ether1
/ipv6 firewall address-list
add address=2602:XXX:2::/48 list=bgpnet
add address=2602:XXX:3::/48 list=bgpnet
/ppp secret
add name=neel service=l2tp
add name=joyent remote-address=198.98.XX.XXX service=l2tp
/routing bgp connection
add as=XXXXX connect=yes disabled=no input.accept-nlri=bgpnet listen=yes \
    local.address=2605:6400:XX:X::1 .role=ebgp multihop=yes name=buyvm \
    output.network=bgpnet remote.address=2605:6400:ffff::2 .as=53667 \
    routing-table=main

I got BGP working on OpenBGPD on both FreeBSD and Rocky Linux, but FreeBSD is a very slow IPv4-only LNS and accel-ppp on Rocky has buggy IPv6.

I’m not a professional network engineer, I nearly passed a CCNA but then decided to become a software engineer instead and in turn am only now getting my head around BGP.

You need to create a routing filter that will accept your prefixes and then apply it to the outgoing filter of your bgp connection.

something like

/routing filter rule
add chain=BGP-OUT disabled=no rule="if ( dst == 2602:XXX:2::/48 ) { accept; }"
add chain=BGP-OUT disabled=no rule="if ( dst == 2602:XXX:3::/48 ) { accept; }"

Unfortunately, that didn’t work for BuyVM.

I learned BuyVM’s BGP implementation is very finicky. BuyVM is awesome for many reasons, but their BGP really sucks.

I was able to get CHR BGP working on Neptune Networks. Neptune has a terrible control panel, it fails all the time. But hey, their BGP actually works with CHR.

What do those providers have to do with what MikroTik advertises to them or anyone else?

I figured out the real issue: I needed

address-families=ipv6

in the

/routing bgp connection

. Apparently RouterOS runs BGP on IPv4 by default, MikroTik support while very slow was very helpful in this case.

So yay, I have a dual-stack tunnelbroker LNS now. Yay!

Neptune initially advertised IPv6 for some reason, but stopped after a while.