Często pytacie mnie o udostępnienie przykładowego pliku konfiguracyjnego dla routera BGP. Najlepiej pod usługi świadczone przez EPIX. Poniżej przedstawiam podstawową konfigurację dla Birda.
W kolejnych wpisach postaram się rozbudować poniższy przykład o inne przydatne opcje jak np. obsługa BGP Blackholing czy wykorzystanie communities w filtrach.
Adresacja dla naszej przykładowej konfiguracji:
Nasz prefix do rozgłaszania: 15.15.15.0/24
Nasz ASN: 65456
Nasz adres w usłudze EPIX OpenPeering: 11.11.11.2/24
ASN EPIX OpenPeering: 62047
Nasz adres w usłudze Polmix: 12.12.12.2/30
ASN Polmix: 201054
Nasz adres w usłudze Global: 13.13.13.2/30
ASN Global: 50607
router id 15.15.15.1; log "/var/log/bird_info.log" { info }; log "/var/log/bird_error.log" { error }; log "/var/log/bird_fatal.log" { fatal }; timeformat base iso long; timeformat log iso long; timeformat protocol iso long; timeformat route iso long; protocol device IFACES { scan time 20; } protocol kernel RIB { persist; scan time 360; import none; export filter { krt_prefsrc = 15.15.15.1; accept; }; } protocol static PREFIX { route 15.15.15.0/24 reject; #alternatywnie w zależności od potrzeb: # route 15.15.15.0/24 via 192.168.0.2; } filter EPIX_IN { if (net ~ [ 169.254.0.0/16+, 172.16.0.0/12+, 192.168.0.0/16+, 10.0.0.0/8+, 224.0.0.0/4+, 15.15.15.0/24+ ]) then reject; if net.ip = 0.0.0.0 then reject; if (net.len < 8) || (net.len > 32) then reject; #UWAGA, ten if powoduje, ze akceptujecie każdą długość prefixu! if ( bgp_path.len > 50 ) then reject; accept; } filter EPG_IN { if (net ~ [ 169.254.0.0/16+, 172.16.0.0/12+, 192.168.0.0/16+, 10.0.0.0/8+, 224.0.0.0/4+, 15.15.15.0/24+ ]) then reject; if net.ip = 0.0.0.0 then reject; if (net.len < 8) || (net.len > 24) then reject; if ( bgp_path.len > 50 ) then reject; accept; } filter POLMIX_IN { if (net ~ [ 169.254.0.0/16+, 172.16.0.0/12+, 192.168.0.0/16+, 10.0.0.0/8+, 224.0.0.0/4+, 15.15.15.0/24+ ]) then reject; if net.ip = 0.0.0.0 then reject; if (net.len < 8) || (net.len > 24) then reject; if ( bgp_path.len > 50 ) then reject; accept; } filter EPIX_OUT { if proto="PREFIX" then { accept; } reject; } filter EPG_OUT { bgp_path.prepend(65456); bgp_path.prepend(65456); if proto="PREFIX" then { accept; } reject; } filter POLMIX_OUT { bgp_path.prepend(65456); if proto="PREFIX" then { accept; } reject; } protocol bgp EPIX_RS1 { neighbor 11.11.11.1 as 62047; local 11.11.11.2 as 65456; description "EPIX-RS1"; import filter EPIX_IN; export filter EPIX_OUT; default bgp_local_pref 300; } protocol bgp EPIX_RS2 { neighbor 11.11.11.1 as 62047; local 11.11.11.2 as 65456; description "EPIX-RS2"; import filter EPIX_IN; export filter EPIX_OUT; default bgp_local_pref 300; } protocol bgp GLOBAL { neighbor 13.13.13.1 as 50607; local 13.13.13.2 as 65456; description "EP-GLOBAL"; import filter EPG_IN; export filter EPG_OUT; default bgp_local_pref 100; } protocol bgp POLMIX { neighbor 12.12.12.1 as 201054; local 12.12.12.2 as 65456; description "EP-POLMIX"; import filter POLMIX_IN; export filter POLMIX_OUT; default bgp_local_pref 200; }