NBAR w class-mapa'ch nie rozpoznaje niektórych protokołów

Problemy związane z routingiem

Moderatorzy: mikrobi, aron, garfield, gangrena, Seba

Wiadomość
Autor
-Tomek-
wannabe
wannabe
Posty: 75
Rejestracja: 22 mar 2010, 12:11

NBAR w class-mapa'ch nie rozpoznaje niektórych protokołów

#1

#1 Post autor: -Tomek- » 16 lip 2018, 14:27

Robię znakowanie ruchu wychodzącego przez tunel GRE przy wykorzystaniu NBARu.
Mam następujące class i policy mapy:
class-map match-any CS7
match protocol gre
match protocol pim
match protocol eigrp
class-map match-any CS6
match protocol ntp
class-map match-any CS5
match protocol icmp
match protocol pim-rp-disc
class-map match-any CS4
match protocol ssh
match protocol telnet

policy-map POLICY
class CS7
set ip dscp cs7
class CS6
set ip dscp cs6
class CS5
set ip dscp cs5
class CS4
set ip dscp cs4
Całość dopisana do tunelu poleceniem: service-policy output POLICY

Badam Wiresharkiem na wyjściu prawidłowość znakowania pakietów i widzę, że znakowanie nie działa dla następujących protokołów: GRE, SSH i TELNET. Dla wszystkich pozostałych (tj. PIM, EIGRP, NTP, ICMP, PIM-RP-DISC) jest OK - znakowanie przebiega poprawnie wg. class i policy mapy.

Dodam, że jeżeli zamienię np. "match protocol gre" na "match access-group name GRE", gdzie ACLka jest następująca:
ip access-list extended GRE
permit gre any any
to wtedy zaczyna również poprawnie znakować pakiety GRE.
Identyczna sytuacja jest z pakietami telnetu i ssh - gdy zamienię NBAR na ACL-kę, to wtedy jest OK.
Czy to jakieś ograniczenie NBARu w stosunku do tych protokołów?

Żeby było ciekawiej, to wpisanie lub usunięcie z tunelu polecenia "ip nbar protocol-discovery" w ogóle nie zmienia zachowania NBARu - router nadal poprawnie znakuje wszystko oprócz GRE, SSH i TELNET.
A może fraza "match protocol" nie korzysta z NBARu?

Sprzęt, na którym robię testy to 2811, IOS: 15.1(4)M12a (adv. security)

lbromirs
CCIE
CCIE
Posty: 3936
Rejestracja: 30 lis 2006, 08:44

Re: NBAR w class-mapa'ch nie rozpoznaje niektórych protokołów

#2

#2 Post autor: lbromirs » 16 lip 2018, 15:46

Być może trafiasz w jakiś bug. Jeśli masz support dla tego urządzenia, sugeruje otworzyć case.

-Tomek-
wannabe
wannabe
Posty: 75
Rejestracja: 22 mar 2010, 12:11

Re: NBAR w class-mapa'ch nie rozpoznaje niektórych protokołów

#3

#3 Post autor: -Tomek- » 16 lip 2018, 16:05

Niestety nie mam już supportu.

Może w tym przypadku fraza "match protocol" nie korzysta z NBARu, tylko z jakiego innego wewnętrznego mechanizmu?

lbromirs
CCIE
CCIE
Posty: 3936
Rejestracja: 30 lis 2006, 08:44

Re: NBAR w class-mapa'ch nie rozpoznaje niektórych protokołów

#4

#4 Post autor: lbromirs » 16 lip 2018, 23:26

'match protocol' wywołuje NBAR. Zawsze możesz zdefiniować swój własny protokół (PDLM), ale obawiam się, że to po prostu bug w sofcie. Spróbuj zmienić soft oczko w dół lub w górę, skoro bawisz się w labie a nie na produkcji. Jeśli na produkcji - proponuje ASAP wymienić ten i podobne routery na obecnie sprzedawane.

-Tomek-
wannabe
wannabe
Posty: 75
Rejestracja: 22 mar 2010, 12:11

Re: NBAR w class-mapa'ch nie rozpoznaje niektórych protokołów

#5

#5 Post autor: -Tomek- » 17 lip 2018, 12:55

Ok. Dzięki za podpowiedź.

Wziąłem się za dokładniejszą analizę i okazuje się, że jednak dla ssh i telnetu NBAR działa, ale dopiero po zestawieniu sesji TCP.
Właśnie męczę się nad konstrukcją ACLki, która łapałaby TYLKO 3-way TCP handshake i pozwoliłaby markować również te pakiety - może ktoś podrzuciłby jakiegoś gotowca?

Co do braku rozpoznawania GRE na interfejsie tunelowym, to chodziło mi wyłącznie o pakiety GRE KeepAlive i wygląda, że NBAR po prostu takich nie rozpoznaje. Na szczęście ACLka z pierwszego postu (ip access-list extended GRE) łapie te pakiety. Dodatkowo ustawiłem markowanie pakietów GRE KeepAlive (będących odpowiedzią dla drugiej strony) na interfejsie fizycznym następującą class-map'ą:
class-map match-all GRE_KeepAlives
match protocol gre
match packet length max 24
I w tym przypadku NBAR gre działa już bez zarzutu.
Drugie ograniczenie (max length 24) jest po to, by markować jedynie pakiety KeepAlive (header IP=20bajtów + header GRE=4bajty)

mmoryto
wannabe
wannabe
Posty: 190
Rejestracja: 18 lut 2011, 12:28

Re: NBAR w class-mapa'ch nie rozpoznaje niektórych protokołów

#6

#6 Post autor: mmoryto » 17 lip 2018, 14:50

A nie jest tak, że na interfejsie tunelowym nie latają nagłówki GRE (tunel nie widzi zewnętrzych nagłówków) i z tego samego powodu na interfejsie tunelowym nie zadziała NBAR? Działa natomiast na interfejsie fizycznym bo tam jest enkapsulacja do GRE i NBAR widzi i rozpoznaje nagłówki.

Nie mam pewności dlaczego akurat ACL (domyślam się, że też przypinana na tunelu) działa.

-Tomek-
wannabe
wannabe
Posty: 75
Rejestracja: 22 mar 2010, 12:11

Re: NBAR w class-mapa'ch nie rozpoznaje niektórych protokołów

#7

#7 Post autor: -Tomek- » 17 lip 2018, 15:57

ACLka "GRE" na tunelu łapie tylko pakiety GRE keepalive i o to mi właśnie chodziło, bo defacto innych pakietów GRE tam nie ma - chyba, że puściłbym tam jakiś kolejny tunel GRE.
Co do pakietów KeepAlive, to są pakiety GRE enkapsulowane w GRE z polem PT=0 (Protocol Type) - więc tutaj jest wszystko ok, że ta ACLka działa.

ODPOWIEDZ