“Gospodarka, głupcze” – pod tym hasłem Bill Clinton wygrał w 1992 roku kampanię prezydencką. Miałem ochotę sparafrazować to hasło i dać temu wpisowi tytuł “Hardware, głupcze”, ale niektórzy nie zagłębiając się w treść i nie rozumiejąc kontekstu, gotowi byliby się obrazić, bo teraz wszyscy tacy delikatni i wrażliwi się stali. Skończyło się więc na wersji łagodniejszej. Aczkolwiek idea pozostaje aktualna – świadome korzystanie z rozwiązań IT oznacza nie tylko umiejętność skonfigurowania ich od strony programowej, ale przede wszystkim wymaga zrozumienia ich działania na poziomie hardware.

Miało być o interfejsach

W istocie rzeczy ten odcinek miał być o interfejsach VLAN i BRIDGE. I obiecuję, taki odcinek na pewno się pojawi, ale w trakcie pisania przypomniałem sobie, że Ubiquiti nie rekomenduje mostkowania interfejsów na części platform sprzętowych. Czy “nie rekomenduje” oznacza, że nie należy ich stosować? I czemu dotyczy to części, a nie wszystkich routerów z linii EdgeRouter? Tak dochodzimy do tematu dzisiejszego odcinka.

Hardware Offloading

Wysoka wydajność routerów EdgeRouter jest konsekwencją zastosowania mechanizmów Hardware Offloading. Pod tym trudnym hasłem kryją się mechanizmy sprzętowego realizowania wybranych funkcji, zamiast przetwarzania przez oprogramowanie na procesorze. Dzięki wyeliminowaniu CPU wydajność platformy nie jest zależna od jego obciążenia ani wydajności, osiągane są mniejsze opóźnienia i większa przepustowość. Przykładowo sprzętowe przetwarzanie pakietów IPv4 na EdgeRouter Lite (ERL) pozwala “przerzucić” 950 Mbps. Przy wyłączeniu mechanizmu offloading i programowym przetwarzaniu pakietów na CPU ta wydajność spada do około 300 Mbps. Niestety ponieważ Ubiquiti stosuje SoC od dwóch dostawców – MediaTek i Cavium – występują pewne różnice w dostępnych mechanizmach “odciążania” w zależności od producenta chipa w danym modelu routera.

MediaTek vs Cavium

Zatem które modele routerów oparto na SoC których producentów? Które mechanizmy realizowane są bezpośrednio przez hardware zamiast przez  software? I jak włączyć lub – jeśli zajdzie taka uzasadniona potrzeba – wyłączyć offloading? Na szczęście Ubiquiti przygotowało tabele, które w czytelny sposób dają odpowiedź na te pytania.

IPsec Offloading

Sprawa jeszcze się nieco komplikuje, gdy zagłębić się w szczegóły. Otóż silną stroną routerów EdgeRouter jest akceleracja sprzętowa IPseca, która daje wyraźny wzrost wydajności w przypadku budowy tuneli site-to-site czy zastosowaniach client-to-site. Rzecz w tym, że tu znowu zachodzą pewne drobne, acz istotne różnice między platformami, trzeba też świadomie dobierać algorytmy szyfrowania i funkcje haszujące (skrótu). Dla bardzo dociekliwych dodam, że offloading dotyczy ruchu ESP. Ruch IKE nie jest “odciążany”, ale ponieważ negocjacja kluczy zachodzi na etapie inicjowania tuneli i ewentualnie okresowo jest ponawiana, nie ma to znaczenia dla ogólnej wydajności VPN.

Włączamy/Wyłączamy

Niestety włączenie lub wyłączenia mechanizmów offloadingu też wygląda nieco inaczej w urządzeniach opartych na SoC od Cavium, od tych zbudowanych z użyciem SoC dostarczonego przez MediaTek.

MediaTek Devices: ER-X / ER-X-SFP / EP-R6:

Włączenie mechanizmów akceleracji sprzętowej hwnatipsec (pierwsza tabela):

configure

set system offload hwnat enable
set system offload ipsec enable

commit ; save

I wyłączenie:

configure

set system offload hwnat disable
set system offload ipsec disable

commit ; save

UWAGA: zmiany dotyczące IPseca wymagają restartu urządzenia. 

Cavium Devices: ER-4 / ER-6P / ERLite-3 / ERPoE-5 / ER-8 / ERPro-8 / EP-R8 / ER-8-XG:

Włączenie mechanizmów akceleracji sprzętowej IPv4/IPv6 i ipsec (pierwsza tabela):

configure

set system offload ipv4 forwarding enable
set system offload ipv4 gre enable
set system offload ipv4 pppoe enable
set system offload ipv4 vlan enable

set system offload ipv6 forwarding enable
set system offload ipv6 pppoe enable
set system offload ipv6 vlan enable

set system offload ipsec enable

commit ; save

I wyłączenie:

configure

set system offload ipv4 forwarding disable
set system offload ipv4 gre disable
set system offload ipv4 pppoe disable
set system offload ipv4 vlan disable

set system offload ipv6 forwarding disable
set system offload ipv6 pppoe disable
set system offload ipv6 vlan disable

set system offload ipsec disable

commit ; save

UWAGA: obecnie nie jest możliwe równoczesne włączenie wspomagania sprzętowego dla PPPoE oraz VLANów dla protokołu IPv6. Zmiany dotyczące IPseca wymagają restartu urządzenia. 

Czy to działa?

Działanie mechanizmów offloadingu można łatwo sprawdzić:

admin@CERBER:~$ show ubnt offload

IP offload module : loaded
IPv4
   forwarding: enabled
   vlan : enabled
   pppoe : disabled
   gre : disabled
   bonding : disabled
IPv6
   forwarding: enabled
   vlan : enabled
   pppoe : disabled
   bonding : disabled

IPSec offload module: loaded

Traffic Analysis :
   export : enabled
   dpi : enabled

Na zakończenie

Tym artykułem chciałbym zapoczątkować nową serię poświęconą Ubiquiti. Trochę bardziej zaawansowaną – dla użytkowników, których nie przeraża CLI i nie trzeba im wyjaśniać, jak połączyć się po SSH z użyciem PuTTYego. W razie pytań lub wątpliwości zapraszam do dyskusji na forum Ubiquiti Polska.