This is an old revision of the document!


BGP Filter

  • Everyone is free to filter on his AS as he wishes, however it is recommended to deny the default route1), inbound and outbound.
  • It is also recommended that you don't advertise IPv4 prefixes longer than 28 bits and IPv6 prefixes longer than 60 bits. Of course there are exceptions:
    • Non-RFC1918 addresses reachable via GLaNET.
    • GLaNET services addresses (/32s from 192.168.248.0/22 and /128s from fd00:6b64:f3b0::/48).

Example prefix lists

IPv4

Cisco/Quagga

ip prefix-list glanet-in description BGP IPv4 import filter
! Deny default route and too large prefixes
ip prefix-list glanet-in seq 10 deny 0.0.0.0/0 le 7
! Deny prefixes with high risk of collision within GLaNET range
ip prefix-list glanet-in seq 20 deny 192.168.0.0/22 le 32
ip prefix-list glanet-in seq 21 deny 192.168.8.0/22 le 32
ip prefix-list glanet-in seq 22 deny 192.168.100.0/22 le 32
ip prefix-list glanet-in seq 23 deny 192.168.200.0/22 le 32
ip prefix-list glanet-in seq 24 deny 192.168.252.0/22 le 32
! Deny other RFC1918 prefixes
ip prefix-list glanet-in seq 30 deny 10.0.0.0/8 le 32
ip prefix-list glanet-in seq 31 deny 172.16.0.0/12 le 32
! Deny shared address space
ip prefix-list glanet-in seq 40 deny 100.64.0.0/10 le 32
! Deny link-local
ip prefix-list glanet-in seq 50 deny 169.254.0.0/16 le 32
! Deny multicast
ip prefix-list glanet-in seq 60 deny 224.0.0.0/4 le 32
! Deny former class E
ip prefix-list glanet-in seq 70 deny 240.0.0.0/4 le 32
! Allow everything
ip prefix-list glanet-in seq 1000 permit 0.0.0.0/0 le 32

BIRD

function net_martian()
{       
  return net ~ [ 169.254.0.0/16+, 172.16.0.0/12+, 192.168.0.0/22+,
                 192.168.8.0/22+, 192.168.100.0/22+, 192.168.200.0/22+,
                 192.168.252.0/22+, 10.0.0.0/8+, 100.64.0.0/10+,
                 172.16.0.0/12+, 224.0.0.0/4+, 240.0.0.0/4+, 0.0.0.0/32-,
                 0.0.0.0/0{0,7} ];
}

filter martians {
  if net_martian() then
    reject;
  else
    accept;
}

Juniper

policy-options {
    prefix-list bogons {
        /* Non-GLaNET RFC1918 prefix */
        10.0.0.0/8;
        /* Shared address space */
        100.64.0.0/10;
        /* Link local */
        169.254.0.0/16;
        /* Non-GLaNET RFC1918 prefix */
        172.16.0.0/12;
        /* High risk of collision within GLaNET */
        192.168.0.0/22;
        /* High risk of collision within GLaNET */
        192.168.8.0/22;
        /* High risk of collision within GLaNET */
        192.168.100.0/22;
        /* High risk of collision within GLaNET */
        192.168.200.0/22;
        /* High risk of collision within GLaNET */
        192.168.252.0/22;
        /* Multicast */
        224.0.0.0/4;
        /* Former class E */
        240.0.0.0/4;
    }
    policy-statement bgp-import-generic {
        term set-default {
            then default-action accept;
        }
        term default-route {
            from {
                route-filter 0.0.0.0/0 upto /7 reject;
            }
        }
        term bogons {
            from {
                prefix-list-filter bogons orlonger;
            }
            then reject;
        }
    }
}

IPv6

Cisco/Quagga

! Deny default route and too large prefixes
ipv6 prefix-list glanet6-in deny 0::/0 le 15
! Deny 6bone prefix (not used anymore)
ipv6 prefix-list glanet6-in deny 3ffe::/16 le 128
! Deny documentation prefix
ipv6 prefix-list glanet6-in deny 2001:db8::/32 le 128
! Teredo prefix must be exactly 32-bit long
ipv6 prefix-list glanet6-in permit 2001::/32
ipv6 prefix-list glanet6-in deny 2001::/32 le 128
! 6to4 prefix must be exactly 16-bit long
ipv6 prefix-list glanet6-in permit 2002::/16
ipv6 prefix-list glanet6-in deny 2002::/16 le 128
! Deny loopback/unspecified/v4-mapped prefix
ipv6 prefix-list glanet6-in deny 0000::/8 le 128
! Deny multicast prefixes
ipv6 prefix-list glanet6-in deny ff00::/8 le 128
! Permit everything else but small prefixes
ipv6 prefix-list glanet6-in permit 0::/0 le 64

BIRD

function net_martian()
{
  return net ~ [ 3ffe::/16+, 2001:db8::/32+, 2001::/33+, 2002::/17+, 0000::/8+,
                 fe00::/8+,  ::/128-, ::/0{0,15}, ::/0{65,128} ];
}

filter martians {
  if net_martian() then
    reject;
  else
    accept;
}
1)
IPv4: 0.0.0.0/0 | IPv6: ::0/0