LoRaWAN w Grupie MiŚOT – konfiguracja BIRD

Grupa MiŚOT rozpoczęła projekt wdrażania LoRaWAN w sieciach małych i średnich operatorów. Konfiguracja choć prosta, to może sprawić problem tym operatorom, którzy nie mają w sieci wdrożonego protokołu IPv6.

misot.pl

Każdy MIŚOT, który przystąpił do projektu LoRaWAN otrzymał sprzęt do instalacji w swojej sieci oraz instrukcję uruchomienia. Dla tych operatorów, którzy to tej pory nie mieli okazji konfigurować IPv6, może to być niemały problem. Jako, że kilka dni temu miałem okazję uruchamiać LoRaWAN właśnie w takiej sieci, to korzystając z okazji chciałbym podzielić się konfiguracją.

Router pracował do tej pory tylko z IPv4 i wykorzystywał do BGP oprogramowanie BIRD. Konfiguracje zaczynamy od włączenia forwardingu dla IPv6:

echo "1" >/proc/sys/net/ipv6/conf/all/forwarding

Lub:

sysctl -w net.ipv6.conf.all.forwarding=1

Lub w pliku /etc/sysctl.conf usuwając # z linijki:

net.ipv6.conf.all.forwarding=1

Następnie konfigurujemy interfejsy. Z instrukcji dowiadujemy się, że w celu nawiązania sesji BGP należy skonfigurować adres IPv6 na vlanie open peering w EPIX. Adres IPv6 został Wam przydzielony w momencie zamówienia sesji i podany wraz z adresacją IPv4.

Przykład dla systemu Debian. W /etc/network/interfaces pod konfiguracją vlana 4090 (EPIX-KTW) dodajemy:

iface enp1s0f0.4090 inet6 static
        address 2001:7f8:5b::XXX/64

Należy również skonfigurować VLAN, który posłuży do komunikacji z urządzeniami LoRaWAN, które będziemy instalować:

# LoRaWan-1
auto enp1s0f1.17
iface enp1s0f1.17 inet6 static
        address 2a10:f781:10:XXXX::1/64
        vlan-raw-device enp1s0f1

Weryfikujemy konfigurację sieciową i sprawdzamy czy odpowiada nam route server EPIX:

# ping 2001:7f8:5b::1
PING 2001:7f8:5b::1(2001:7f8:5b::1) 56 data bytes
64 bytes from 2001:7f8:5b::1: icmp_seq=1 ttl=64 time=6.37 ms
64 bytes from 2001:7f8:5b::1: icmp_seq=2 ttl=64 time=6.28 ms
64 bytes from 2001:7f8:5b::1: icmp_seq=3 ttl=64 time=6.26 ms
64 bytes from 2001:7f8:5b::1: icmp_seq=4 ttl=64 time=6.27 ms

Jeżeli wszystko jest ok, to możemy przejść do konfiguracji BIRD. W katalogu /etc/bird/ znajduje się plik bird6.conf. Zalecam go usunąć i utworzyć nowy. Poniżej zamieszczam przykładową konfigurację dla operatorów, którzy nie rozgłaszają jeszcze własnych prefixów IPv6:

router id 192.168.100.1;

log "/var/log/bird/bird6_info.log" { info };
log "/var/log/bird/bird6_error.log" { error };
log "/var/log/bird/bird6_fatal.log" { fatal };

protocol device Ifaces {
scan time 20;
}

protocol kernel RIB {
 persist;
 scan time 360;
 import none;
 export all;
}

protocol static LORA {
 route 2a10:f781:10:XXXX::/64 reject;
}

filter LORA_RS_IN {
 if (net ~ [ 2a10:f781::/32+ ]) then accept;
 reject;
}

filter LORA_RS_OUT {
 if proto="LORA" then { accept; }
 reject;
}

protocol bgp KAT_EPIX_RS1 {
 neighbor 2001:7f8:5b::1 as 62047;
 local 2001:7f8:5b::XXX as XXXXXX;
 description "KAT-EPIX-RS1";
 export filter LORA_RS_OUT;
 import filter LORA_RS_IN;
}

protocol bgp KAT_EPIX_RS2 {
 neighbor 2001:7f8:5b::100 as 62047;
 local 2001:7f8:5b::XXX as XXXXXX;
 description "KAT-EPIX-RS2";
 export filter LORA_RS_OUT;
 import filter LORA_RS_IN;
}

Krótkie objaśnienie powyższego. W „protocol static LORA” podajemy prefix który został nam przyznany do rozgłaszania w sieci LoRaWAN. Jako local podajemy nasz adres IPv6 w vlanie open peering oraz nasz numer AS. Z racji tego, że nie posiadamy jeszcze obsługi IPv6 w naszej sieci, to na filtrze import akceptujemy tylko prefixy z sieci LoRaWAN, a filtr export pozwala rozgłaszać tylko prefix, który został nam przyznany w ramach projektu.

Po przygotowaniu konfiguracji, trzeba ją aktywować. W tym celu należy użyć komendy birdc6, sprawdzić i aktywować konfigurację:

# birdc6
BIRD 1.6.6 ready.
bird> configure check
Reading configuration from /etc/bird/bird6.conf
Configuration OK
bird> configure
Reading configuration from /etc/bird/bird6.conf
Reconfigured

Stan sesji sprawdzamy dokładnie tak samo jak w przypadku IPv4:

BIRD 1.6.6 ready.
bird> show protocols
name     proto    table    state  since       info
SLORA  Static   master   up     15:02:42
Ifaces   Device   master   up     15:21:11
RIB      Kernel   master   up     15:21:11
KAT_EPIX_RS1 BGP      master   up     17:37:44    Established
KAT_EPIX_RS2 BGP      master   up     17:37:45    Established

Weryfikujemy czy poprawnie rozgłaszamy przyznany nam prefix:

bird> show route export LORA_KAT_RS1
2a10:f781:10:XXXX::/64 unreachable [LORA 15:21:11] * (200)

To wszystko, konfiguracja gotowa.

Jeżeli posiadamy już IPv6 w swojej sieci, to sprawa jest tak naprawdę bardzo prosta. Zakładam, że sesje z EPIX są już nawiązane, a filtr wygląda mniej więcej w ten sposób:

filter EPIX_OUT {
 if proto="ISP" then { accept; }
 reject;
}

Tak samo jak w poprzednim przykładzie dodajemy przyznany nam prefix jako nowy protokół statyczny:

protocol static LORA {
 route 2a10:f781:10:XXXX::/64 reject;
}

I modyfikujemy nasz filtr:

filter EPIX_OUT {
 if proto="ISP" then { accept; }
 if proto="LORA" then { accept; }
 reject;
}

W razie problemów lub pytań zapraszam do kontaktu.