IPv6 and Mimosa/AirSpan

After many hours of hair pulling frustration, I figured out why I couldn’t keep my IPv6 working to my house. Mimosa (owned by AirSpan who also has the iBridge network equipment which I presume is running the same software) does not support Multicast packets on it’s PTMP hardware as of firmware version 2.5.2 (the A5/A5c is where it would need to be implemented, but there may be stuff that would need updating on the C5# line)

So, this lead to really weird and frustrating issues with IPv6 for me, IPv6 requires Multicast for Neighbor Discovery which is pretty important for IPv6 to work. Luckily I am in The Brothers WISP Patreon and when I asked for help Mike Hammett and Nick Buraglio came to my rescue and diagnosed the problem which I then confirmed with Mimosa. You cannot even use static routing to get IPv6 to work, Multicast and Neighbor Discovery are built into the protocol.

That did not deter me from figuring out a workaround, I had been playing around with BGP and discovered that I could forward an IPv6 network route over an IPv4 BGP connection. (Thank God for protocols that are designed to be other protocol agnostic.)

I just so happened to be running a Mikrotik hEX S router at my house and my tower routers are all CCR1009s from Mikrotik and because Mikrotik isn’t a PITA licensing hog for every feature in their system, you know who I am talking about, I could setup a BGP peering session between my home and tower router. Forward the IPv6 route across the BGP session and kablam! IPv6 could pass traffic without Neighbor Discovery actually working.

Here is an example config I used, though you may need to adjust your firewall on each router to meet your needs.

Home router config:
#Set the BGP instance so that it has a unique AS Number inside your network
#Note, you will want to pick out your own AS Number from the private pools: #64512-65534 or  4200000000-4294967294, whatever floats your boat.
routing bgp instance add disabled=no name=IPv6BGPPatch router-id=172.16.45.2 as=65536 

#Tell BGP what networks you want to send, make sure this is at least has a #black hole route in your router, or configured on an interface on your #router.
routing bgp network add network=2001:db8:1234:56::/56 synchronize=yes

#Create some filters so we don't get ourselves into trouble
#Don't forget to change up the filter so it matches your IPv6 address and #prefix length
/routing filter
add action=discard address-family=ip chain=out prefix=0.0.0.0/0 prefix-length=0-32
add action=accept address-family=ipv6 chain=out prefix=2001:db8:1234::/56 prefix-length=56
add action=discard address-family=ipv6 chain=out prefix=::/0 prefix-length=0-128
add action=discard address-family=ipv6 chain=in prefix=::/0 prefix-length=0-128
add action=discard address-family=ip chain=in prefix=0.0.0.0/0 prefix-length=0-32


#Where the real work gets done is here, make sure you use the correct #information for your peer
routing bgp peer add address-families=ipv6 disabled=no name=towerRouter remote-address=172.16.45.1 remote-as=65537 tcp-md5-key=ChangeME!!! instance=IPv6BGPPatch out-filter=out in-filter=in  

The tower’s config is pretty similar, you do have to do the rest of the IPv6 setup ahead of time and I would recommend that you verify that it is working there first as well.

/routing bgp instance add disabled=no name=IPv6BGPPatch router-id=172.16.45.1 as=65537

/routing filter
add action=discard address-family=ip chain=IPv6BandaidINCustomer1 prefix=0.0.0.0/0 prefix-length=0-32
add action=accept address-family=ipv6 chain=IPv6BandaidINCustomer1 prefix=2001:db8:1234::/56 prefix-length=56
add action=discard address-family=ipv6 chain=IPv6BandaidINCustomer1 prefix=::/0 prefix-length=0-128
add action=discard address-family=ipv6 chain=out prefix=::/0 prefix-length=1-128
add action=discard address-family=ip chain=out prefix=0.0.0.0/0 prefix-length=0-32

/routing bgp peer add address-families=ipv6 disabled=no name=customer1 remote-address=172.16.45.2 remote-as=65536 tcp-md5-key=ChangeME!!! instance=IPv6BGPPatch out-filter=out in-filter=in default-originate=if-installed 

Give it a couple seconds and as long as you entered the commands correctly you should have a working IPv6 route without having to rely on Multicast. Note, this is only meant to be a guide. I have been told by multiple people to not rely on this system and that stuff might break in really weird ways. Use at your own discretion. Let me know if you run into issues or if you succeed.

Bad Network Ideas BGP Making Things Work