RSS Feed

‘sieci’ Category

  1. konfiguracja modemu huawei E220/ E270/ E272/ E169G/ E160/ E180 pod OSX

    Sierpień 11, 2011 by 0verlord

    Play sprzedaje takie w promocji za całe 129 pln. Mało, nie mało. Cena za modem imho całkiem zacna.

    Konfiguracja pod Windą przebiega bez problemu, natomiast pod OSX jak zwykle trzeba się nakombinować.
    Sposoby zasadniczo są dwa:

    1. zainstalować i uruchomić Mobile Partner, taki wynalazek, który pojawia się jak tylko wetkniemy sobie modem.
    2. wersja dla hardkorów, bo kto by tam potrzebował jakieś nienatywne rozwiązania – normalnie po ludzku, konfigurujemy dial-upa w systemie.

    Co do problemów z 1. aplikacja jest oczywiście mało intuicyjna, na po jej włączeniu nie da się z niej korzystać 😉 Klikamy zatem Tools->Options->Profile management->a potem z prawej strony przycisk „NEW”. Tam się dodaje np. APNa (dla Play jest to „internet”) , usera, hasło itp (w Play się tego nie podaje). Potem z głównego ekranu wybiera się profil, klika „connect” i dzwoni i działa.

    A teraz wersja 2. Zassałem drivery, poinstalowałem co tam trzeba. Nic nie pomogło. Pomógł ten wpis w obcym języku. Cały trick polega na tym, żeby wybrać typ modemu „Uniwersalny” (lub „Generic” jak by ktoś miał OSXa nie po polsku), następnie typ skryptu 3G, i tam jest miejsce na podanie APNa.

    Coś mi się kojarzy, że kiedyś już miałem podobny problem z modemem w Nokii E90 i chyba tam się go dokładnie tak samo rozwiązywało. Tak czy siak, ten sposób działa i mamy piękne natywne klikalne z paska menu (jak sobie włączymy) rozwiązanie, które nie zmusza nas do włączania Mobile Partnera.

    EDIT 04/09/2011: po upgrade do Liona trzeba operację powtórzyć z driverami z Huaweia do 10.6 i zadziała. Trzeba tylko sprawdzić, czy przypadkiem starter z Playa nie stracił ważności, bo inaczej efekt wygląda jak brak poprawnego drivera.

    Aha, jeżeli karta sim ma nałożony pin (np. Orange ma tak, że nie da się tego pinu usunąć, przynajmniej w moim przypadku) to w wersji dla hardkorów, będzie trzeba hackować connect scripta, żeby mu zaserwować parametr AT+CPIN=, w końcu OSX ma normalne pppd. Natomiast moją jakże śmiałą hipotezę należało by odpowiednio przetestować.

    EDIT 2: ha, da się z pinem bez Mobile Partnera

    Trzeba znaleźć taki plik:

    /Library/Modem\ Scripts/Generic\ GPRS.ccl/Contents/Resources/Base\ Script.ccl

    w tym skrypcie wszystko jest polabelowane, tj. każdy istotny kawałek zaczyna się od @LABEL , czyli dodajemy taką sekcję tam, gdzie ona ma być (dla niekumatych: linia nr 138)

    @LABEL 4
    !
    ! Begin SIM unlock
    !
    pause 10
    settries 0
    !
    !
    @LABEL 5
    !
    ! Check SIM lock state
    !
    matchclr
    matchstr 1 10 "READY\13\10"
    matchstr 2 6 "SIM PIN\13\10"
    matchstr 3 111 "ERROR"
    write "AT+CPIN?\13"
    matchread 60
    jump 111
    !
    !
    @LABEL 6
    !
    ! Unlock SIM
    !
    inctries
    iftries 4 101
    !
    ask 0 "Enter PIN for card SIM: " 107
    !
    matchclr
    matchstr 1 5 "OK\13\10"
    matchstr 2 111 "ERROR\13\10"
    write "AT+CPIN=^*\13"
    matchread 60
    jump 6
    !
    !

    Po dopisaniu tego do skryptu, wybieramy połączenie i pojawia się przepiękne okienko do wpisania pinu, wpisujemy go tam i działa. No, mi za pierwszym razem przyjęło pin, ale rzuciło błędem. Wybrałem drugi raz, i już o pin nie prosiło, za to połączyło.

    Odpowiedni kawałek skryptu znalazłem na przepięknie oczojebnej stronie: www.taniwha.org.uk. Oczy bolą od kolorów, ale informacje są przydatne. Generalnie skrypt do 3G z opcją wpisania pinu nie do końca mi chciał stamtąd chodzić, ale po przekopiowaniu tylko wybranych sekcji ruszyło jak należy.


  2. Tcptrack i Debian Squeeze

    Maj 25, 2011 by 0verlord

    Można się zdziwić, że po upgrade do Squeeze’a tcptrack nie działa. Wyjaśnienie jest tu: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=602232.

    Generalnie chodzi o to, że działająca wersja 1.4.x nie zdążyła wejść do Squeeze’a, a stara nie działa na nowym kernelu. Czyli grave bug i paczka wyleciała ze stabla. Czyli trzeba by sobie zbackportować nowszą wersję z SIDa, bo nawet na backports.debian.org jej nie ma.


  3. Konfiguracja Nagiosa – dziedziczenie

    Kwiecień 18, 2011 by 0verlord

    W sumie, to takie HOWTO, ale nie HOWTO, bo jednak podstawową wiedzę o Nagiosie trzeba mieć, to taki esej o możliwościach konfiguracji Nagiosa. Tym razem będzie o dziedziczeniu i zmiennych.

    Po pierwsze: dziedziczenie.

    Nagios zapewnia całkiem ciekawe możliwości dziedziczenia. Każdy, kto zapoznał się z podstawami templatek (dyrektywa use), wie, że pomiędzy różnymi częściami konfiga można przekazywać wiele parametrów. Dokumentacja o tym nie wspomina, ale można je także nadpisywać. Na przykład:

    definiujemy templatkę ogólną hosta, nic szczególnego, żywcem wyjęta z dokumentacji:
    define host{
    name generic-host ; The name of this host template
    notifications_enabled 1 ; Host notifications are enabled
    event_handler_enabled 1 ; Host event handler is enabled
    flap_detection_enabled 1 ; Flap detection is enabled
    failure_prediction_enabled 1 ; Failure prediction is enabled
    process_perf_data 1 ; Process performance data
    retain_status_information 1 ; Retain status information across program restarts
    retain_nonstatus_information 1 ; Retain non-status information across program restarts
    check_command check_ping!120.0,15%!300.0,60%
    max_check_attempts 10
    notification_interval 0
    notification_period 24x7
    notification_options d,u,r
    contact_groups admins
    register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
    }

    a potem hosta:

    define host{
    use generic-host
    host_name mojhost.pl
    alias alias
    address 1.2.3.4
    parents gateway
    contact_groups admini,mroczniadmini
    }

    Ogólnie dokumentacja mówi o takich szablonach bardziej jako o sposobie, żeby nie w kółko nie pisać tych samych kawałków konfiga i tych samych dyrektyw. Ale sam mechanizm jest bardziej mroczny i przydatny. Jeżeli w templatce zdefiniujemy jakąś dyrektywę, ale jakiś host powinien mieć którąś opcję zdefiniowaną inaczej, można ją nadpisać. Na przykład tak:

    define host{
    use generic-host
    host_name mojhost.pl
    alias alias
    address 1.2.3.4
    parents gateway
    max_check_attempts 20
    contact_groups admini,mroczniadmini
    }

    W tym przypadku, nadpisujemy max_check_attempts. Gdybyśmy tego nie zdefiniowali, obiekt odziedziczyłby predefiniowaną wartość max_check_attempts 10 z definicji templatki (use generic-host.
    To jest proste, zapewne intuicyjnie wiele razy korzystaliście z takiego sposobu – teraz będziecie robić to świadomie ;-).

    Po drugie: zmienne.

    Ten mechanizm można także wykorzystać do przekazywania i nadpisywania zmiennych. W dokumentacji są to custom object variables.
    Poniżej opiszę, jak przekazać community snmp i jednocześnie zachować możliwość nadpisania go dla dowolnego hosta.

    Weźmy np. taką, uproszczoną do minimum, templatkę:
    define host {
    name generic-host
    register 0 # to templatka, więc 0
    _snmp_community blabla
    }

    i hosta wykorzystującego tą templatkę:

    define host {
    host_name testowy
    use generic-host
    _snmp_community bleble
    }

    I teraz, gdzie tutaj sztuczka magiczna?
    Ogólnie mamy dwa razy zdefiniowaną zmienną, _snmp_community (w Nagiosie każda wartość zaczynająca się od podkreślenia, _ to zmienna). Według zasad dziedziczenia ta, która została zdefiniowana ostatnia – wygrywa. Czyli nasz host ma ustawioną zmienną na bleble, a jeżeli nie nadpiszemy tej zmiennej – zostanie blabla. Ayt? 🙂 Tylko jak to teraz wstawić do definicji serwisu?

    Żeby uniknąć duplikacji zmiennych, Nagios automatycznie dodaje każdej prefix, w zależności od miejsca zdefiniowania. _HOST, _SERVICE i _CONTACT, czyli naszą zmienną _snmp_community, możemy w dowolnym innym miejscu konfiga odczytać jako $_HOSTSNMP_COMMUNITY$. Oczywiście trzeba uważać, żeby sobie tej zmiennej nie nadpisać w innym miejscu tej samej sekcji.

    Czyli teraz bierzemy definicję serwisu wykorzystującego community snmp, np. taką, i zamiast wpisywać do check_command po prostu community, wstawiamy tam naszą zmienną, np. tak jak w przykładzie poniżej:

    define service {
    host mojhost
    service_description snmp-uptime
    display_name SNMP System uptime
    check_command check_system_uptime!$_HOSTSNMP_COMMUNITY$
    use generic-service
    notification_interval 0 ;
    }

    W ten sposób ustawiamy community dla hosta tam, gdzie to wynika ze zdrowego rozsądku, tj. w definicji hosta, a serwisy już automagicznie biorą właściwą wartość.

    W następnych postach pokażę jeszcze kilka sztuczek optymalizacyjnych i organizacyjnych, np. jak optymalnie wykorzystać hostgroupsy.


  4. debian squeeze i sprawa dhcp po upgrade z lenny’ego

    Marzec 26, 2011 by 0verlord

    Walczyłem ze śmiesznym problemem. Po aktualizacji ze Lenny’ego do Squeeze’a zmieniło się nazewnictwo i lokalizacja plików.
    Dhcpd to teraz isc-dhcp-server (tak samo service i /etc/init.d), w /etc/defaults jest isc-dhcp-server a nie dhcpd, a konfiguracja siedzi sobie w /etc/dhcp/ a nie w /etc/dhcpd3.

    Stąd ciekawe miałem w nocy zagwozdki. Edytowałem konfiga (starego) i dziwiłem się, dlaczego system go nie widzi. Zmieniałem wpisy w /etc/default/dhcpd i po restarcie dostawałem to samo. W szczycie zamoty zmieniałem /etc/default/isc-dhcp-server a konfig pluł ostro, że nie ma definicji subnetu dla dodawanego interfejsu. Oczywiście wpis dodawałem, a jakże, ale w /etc/dhcp3/dhcpd.conf.

    Podsumowując: serwis nazywa się teraz isc-dhcp-server, definicje interfejsów na których ów ma nasłuchiwać siedzą w /etc/default/isc-dhcp-server, a konfig siedzi w /etc/dhcp/dhcpd.conf.

    Amen.


  5. Dlaczego należy rebootować każdy przejmowany serwer

    Marzec 9, 2011 by 0verlord

    Śmieszno-smutne.

    Generalnie przejmowałem routery jakiejś firemki. Pan były właściciel przestał chcieć współpracować, haseł nie podał, LMSa popsuł. No to pojechaliśmy uratować świat.
    init=/bin/bash do gruba jak zwykle załatwił sprawę, ale do drugiego routera nie dojechałem, bo nagle hasło się „odnalazło”, w głowie serwisanta. Przypomniał sobie nagle.

    Skąd serwisant znał hasło do roota na routerze, nie wiem. Zalogowałem się, wyłączyłem filtrowanie portu na ssh i wróciłem do domu. Wieczorem klikałem różne graty, między innymi firewalla, pingera do LMSa itp. Po którymśtam przeładowaniu regułek firewalla, host się zapętlił i padł. Ostatni load jaki zauważyłem na ostatniej zalogowanej konsoli, to 22, więc niby źle nie było, ale pacjent zszedł.

    Zaordynowałem Finger Of God. Rano palec zadziałał, natomiast host już nie wstał. Próba reanimacji przez serwisanta nie dała rady, host rzucał kernel panicami. Załadowałem niezbędne graty i pojechałem naprawiać.

    Na miejscu okazało się, że wszystko w sumie działa, tylko host wstał z zupełnie innym zestawem adresów IP niż w momencie, w którym klikałem filtry. Cóż było robić, naprawiłem i wróciłem do domu.

    Czas poszukać KVMa jakiegoś sensownego i przygotować serwisantowi skrypty diagnostyczne.


  6. DES-3562 dodawanie/zmiana default route

    Luty 1, 2011 by 0verlord

    taki szybki wpis. Żeby dodać nowy domyślny gateway,
    create iproute default ipek metryka

    Należy najpierw skasować poprzedni wpis.
    delete iproute default

    MegaSłicz nie potrafi nadpisać domyślnej bramy. Ale lipa.


  7. Instalacja Debiana (squeeze) bez monitora przez port szeregowy i sieć

    Styczeń 29, 2011 by 0verlord

    EDIT: jak się okazało, to wszystko poniżej, to kosmetyka :-/. Można szybciej i prościej. Wpisu w pxelinux.cfg/default nie ominiemy, natomiast po pokazaniu się pierwszego okienka na opcji install wciskamy tab, i wpisujemy taki kod:
    –quiet console=ttyS0,9600n8 panic=30

    Potem przyjmujemy enterem na klatę informację o niewłaściwym trybie vga, czekamy chwilę i widzimy box z wyborem języka.
    Niżej można już nie czytać chyba, że ktoś lubi ładnie zrobione instalatory.

    ### było.
    Można, tylko po co 😉
    Generalnie miałem zainstalować hosta do monitoringu, tylko tak się dziwnie złożyło, że w domu mam same laptopy, a monitora nie uświadczysz. Komputer ma port szeregowy i kartę sieciową, więc powinien zadziałać netboot i konsola szeregowa.
    Jak się okazało, akcja jest całkiem prosta.

    Zestawiamy środowisko do netboota, np. wg tego linka albo innych, wujek Google zna tego mnóstwo. Potem szukamy katalogu pxelinux.cfg/ a w nim pliku default.

    Dodajemy na pierwszej pozycji tego pliku linijkę:
    SERIAL 0 9600 0

    Nie dodajemy tam opcji znanych z gruba, –serial itp., bo się przywiesi i nie pokaże nic.

    Potem dodajemy odpowiednią pozycję w menu, w debian-installer//boot-screens/menu.cfg

    menu begin serial
    menu title Serial console
    label mainmenu
    menu label ^Back..
    menu exit
    include debian-installer/i386/boot-screens/stdmenu.cfg
    include debian-installer/i386/boot-screens/sadtext.cfg

    z tegoż pliku kasujemy linijki:
    include debian-installer/i386/boot-screens/amdtxt.cfg
    include debian-installer/i386/boot-screens/gtk.cfg
    include debian-installer/i386/boot-screens/amdgtk.cfg
    include debian-installer/i386/boot-screens/adgtk.cfg
    include debian-installer/i386/boot-screens/amdadgtk.cfg
    include debian-installer/i386/boot-screens/dtmenu.cfg

    tworzymy plik debian-installer/i386/boot-screens/sadtext.cfg w zawartością jak niżej:
    default sinstall
    label sinstall
    menu label ^Install
    menu default
    kernel debian-installer/i386/linux
    append vga=normal initrd=debian-installer/i386/initrd.gz -- console=ttyS0,9600n8 quiet
    label expert
    menu label ^Expert install
    kernel debian-installer/i386/linux
    append priority=low vga=normal initrd=debian-installer/i386/initrd.gz -- console=ttyS0,9600n8
    label rescue
    menu label ^Rescue mode
    kernel debian-installer/i386/linux
    append debian-installer/serial-console vga=normal initrd=debian-installer/i386/initrd.gz rescue/enable=true -- console=ttyS0,9600n8 quiet
    label auto
    menu label ^Automated install
    kernel debian-installer/i386/linux
    append auto=true priority=critical vga=normal initrd=debian-installer/i386/initrd.gz -- console=ttyS0,9600n8 quiet

    i to chyba wszystko.

    Minicoma zestawiamy – co w sumie jest dość dziwne – z prędkością 9600 8N1, mamy nadzieję, że komp odpali z PXE (często jest wyłączone, wtedy niestety nie obejdzie się bez monitora, żeby to włączyć – natomiast u mnie jak się okazało, komp bootował z PXE), i po boocie widzimy piękne okienko instalatora po kabelku. Okienko wygląda np. tak:

    Wybieramy z niego opcję „Serial console” i dalej instalacja leci już zwykle. ASCII p0wahhh. Chodzi topornie, ale w sumie tylko do zainstalowania konsoli po sieci. Potem już czyste ssh. Potrzeba matką wynalazku heh.


  8. Monitorowanie interfejsu po snmp w Nagiosie

    Styczeń 15, 2011 by 0verlord

    Skryptów sprawdzających to wszystko jest dość sporo. Jeżeli ktoś nie ma potrzeby monitorowania ani rysowania liczby pakietów na interfejsie (pps), może skorzystać z np. check_snmp_int.pl lub jego kolegi check_snmp_netint.pl
    Powyższe skrypty doskonale dają sobie radę z interfejsami i ruchem na nich.

    Natomiast jeżeli ktoś zapragnie monitorować ppsy, w zasadzie zostaje mu tylko kawałek pakietu SNMP4Nagios, który posiada odpowiednie narzędzie – check_if_by_snmp. Narzędzie to ma jeden zasadniczy problem – należy mu podać do monitorowania nie interfejs, tylko index interfejsu, który można sobie wyciągnąć z snmpwalka po tablicy iso.3.6.1.2.1.31.1.1.1.1 np. tak:

    snmpwalk -v 2c -c   iso.3.6.1.2.1.31.1.1.1.1 | grep 
    

    Problem w tym, że indeksy interfejsów nie są stałe i moga się np. zmienić po reboocie, a na pewno zmienią się indeksy interfejsów vlanowych (802.1q) jak je dodamy lub/i odejmiemy.

    Popełniłem banalnie prosty wrapper w bashu do załatwienia tego problemu, wygląda on tak:

    #!/bin/bash 
    
    while getopts "H:C:I:" Option
    do
      case $Option in
        H)  HOSTADDRESS=$OPTARG;;
        C)  COMMUNITY=$OPTARG;;
        I)  IFACE=$OPTARG;;
      esac
    done
    shift $(($OPTIND - 1))
    # Move argument pointer to next.
    
    IFINDEX=`/usr/bin/snmpwalk -v 2c -c $COMMUNITY \
    $HOSTADDRESS iso.3.6.1.2.1.31.1.1.1.1  | grep "$IFACE" | \ 
    cut -d' ' -f1 | cut -d'.' -f12`
    
    /usr/lib/nagios/plugins/check_if_by_snmp -H $HOSTADDRESS -C $COMMUNITY \ 
    -i $IFINDEX -I $IFACE -T -N -L -R /var/lib/nagiosgraph/rrd/
    

    Wrapper pobiera parametry przekazywane do skryptu przez Nagiosa, robi snmpwalka, grepem wyjmuje indeks snmp interfejsu, który podamy jako argument, po czym wstawia go do oryginalnego skryptu z SNMP4Nagios. W ten sposób zawsze będziemy monitorować właściwy interfejs, a nie tylko ten sam indeks.

    Wyjaśnienia wymaga chyba tylko ostatnia linijka i opcja -R, która pokazuje, gdzie skrypt ma zapisywać pliki rrd z perfdata do rysowania wykresów. U mnie, prosto do katalogu nagiosgrapha.

    Nie wiem, dlaczego inne pluginy nie monitorują liczby ppsów, przecież np. w ten sposób da się wykryć na interfejsie ddos, albo inną anomalię ruchu. A tutaj tylko jeden skrypt to robi, i na dodatek lekko bez sensu.

    Oczywiście mój wrapper będzie pewnie niewydajny w przypadku wykonywania wielu checków – pytanie jak bardzo niewydajny i kiedy zabija hosta.


  9. Monitoring sieci cz. 1.2

    Grudzień 27, 2010 by 0verlord

    Z ciekawostek monitoringowych, obejrzałem sobie Icingę. To taki klon na bazie Nagiosa, podobno posiadający wszystko to, czego brakuje nagiosowi. Odpaliłem, spróbowałem, odinstalowałem. Sam nie wiem, czy do tego wrócę, bo jeszcze jest za mało natywnych wtyczek pod ten projekt. Wszystkie są pod Nagiosa ;-)Ale kto wie. Jak się projekt ustabilizje, czemu nie.

    Niby Icinga jest w testingu, niby jest kompatybilna z Nagiosem (to akurat sprawdziłem, Icinga rozmawiała do uruchomionych nagios-nrpe-serverów), natomiast takie rzeczy jak nagiosgrapher nie do końca działają, bo mają w Depends: nagiosa3. Trzeba by przekompilować te paczki, żeby można było takich dodatków używać, a to jest dość słabe, bo dochodzi pilnowanie własnego repo i aktualizacji np. security. Lipa.

    Na pewno ma ładniejsze UI, ale z drugiej strony, nie interfejs powoduje, że narzędzie do monitoringu jest lepsze, czy gorsze. Ma kilka dodatków jak super ekstra wypasiony nowy lepszy UI – icinga-web, albo ifejs dla urządzeń mobilnych (icinga-mobile). Ale to mnie jakoś nie ujęło, bo po defaultowej instalacji wszystko się ładowało i ładowało, i nie bardzo chciało cokolwiek pokazać.
    Generalnie po przejrzeniu konfiguracji usunięciu jednej ścieżki zahardkodowanej na stałe, wszystko ruszyło. Wolno. Nawet przeraźliwie wolno. Interfejs jest przepiękny, animacja mapy przefajna. Prędkość działania już nie.
    Tutaj jednak moc starutkiego UI Nagiosa, pokazuje pazur. Ładuje się w pół sekundy i widać dokładnie to, co trzeba, żeby wiedzieć, co się dzieje w sieci. Ładne, nie zawsze oznacza funkcjonalne jak widać.

    Jest też jedna wisienka do tego tortu – dokumentacja. Niby jest wzięta z Nagiosa, ale jakoś się ją lepiej czytało. I tutoriale jak np. odpalić ndoutils polecam szczerze. W Nagiosie są mało czytelne, długie i przeraźliwie nudne.


  10. Nagios3 i grupy

    Grudzień 21, 2010 by 0verlord

    Nagios ma kilka ciekawych funkcjonalności pozwalających zapanować nad chaosem, który niezauważalnie powoli zasysa każdego admina.
    Pierwsza z nich to grupy. Oczywiście można grupować hosty, ten podział jest oczywisty, natomiast znacznie ciekawsze jest grupowanie grup, hostów i możliwości negacji jednego i drugiego.

    Załóżmy, że mamy grupy hostów, www, smtp i ssh.

    Standardowa definicja grupy wygląda np. tak:

    define hostgroup {
       hostgroup_name wszyscy
       alias blablalias
       members host1, host2, host3, host4
    
    }
    

    Jeżeli chcemy wykluczyć jakiegoś hosta z grupy, używamy wykrzyknika:

    define hostgroup {
       hostgroup_name ale_nie_host4
       alias blablalias
       members host1, host2, host3, !host4
    
    }
    

    Żeby grupować grupy, należy użyć dyrektywy hostgroup_members (dostępne chyba od Nagiosa 3)

    define hostgroup {
       hostgroup_name www_i_ssh
       alias blablalias
       hostgroup_members www, ssh
    
    }
    

    Oczywiście i tutaj działa negacja z wykrzyknikiem.

    define hostgroup {
       hostgroup_name wszystkie_grupy_bez_ssh
       alias blablalias
       hostgroup_members www, smtp, !ssh
    
    }
    

    Co ciekawe, kombinacje grup i hostów można łaczyć, np. wykluczamy hosta host1 z grupy wszystkie_grupy i dodajemy hosta666, którego wcześniej nie było nigdzie.

    define hostgroup {
       hostgroup_name wszystkie_grupy_bez_ssh
       alias blablalias
       members host666, !host1
       hostgroup_members www, smtp, ssh
    
    }
    

    A ten sposób mamy możliwość grupowania i wykluczania dowolnych grup, grup hostów i samych hostów. Niezłe, niezłe.