29 kwietnia 2010

Dynamips & Dynagen - czyli wirtualne Cisco


Nieocenioną pomocą dla osób, które rozpoczynają swoją przygodę z tworzeniem i konfiguracją sieci komputerowych opartych na urządzeniach firmy Cisco, jest symulator Packet Tracer. Jednak z własnego doświadczenia wiem, że po pewnym czasie, chciałoby się popracować więcej na prawdziwym sprzęcie, a nie chociażby tak jak w moim przypadku - całe 3 godziny tygodniowo w sali szkoleniowej. :( Naturalnym wydaje się szukanie szczęścia na allegro. Jednak po zorientowaniu się w cenach routerów (nawet tych leciwych wiekiem) kombinujemy nad innym rozwiązaniem. A tak na marginesie... żeby zakup przyniósł jakikolwiek pożytek, należałoby nabyć kilka sztuk - bo co nam po jednym routerze? :) Ostatnio przeglądając któreś z for traktujących o rozwiązaniach Cisco, natrafiłem na temat założony przez osobę, która szukała chętnych do stworzenia laboratorium, w którym można by przygotowywać się do zdawania certyfikatów. Mowa była o dziesięciu osobach, a przybliżony koszt wyposażenia szafy oscylował w granicy 10k zł. Pomysł przedni, choć raczej trudny do zrealizowania, bo ciężko znaleźć tyle osób w okolicy, nie wspominając o pomieszczeniu.

Na szczęście większość tych problemów da się obejść! Pomysł polega na tym, aby emulować (a nie symulować) urządzenia Cisco na naszym własnym komputerze (jak się później okaże, w celu zwiększenia mocy obliczeniowej, wirtualna sieć może być stawiana na wielu fizycznych maszynach). Rozwiązanie to, przypomina tworzenie wirtualnych komputerów przy pomocy VMware czy VirtualBoksa. Najbardziej widoczną różnicą w stosunku do pracowania z rzeczywistym sprzętem jest to, że nasze wirtualne routery łączymy nie za pomocą kabli, a kilku linijek tekstu zapisanych w pliku konfiguracyjnym topologii sieci. Ponadto, nie polecam używania emulatorów do przeprowadzania testów związanych z szeroko pojętym czasem, np. porównywanie różnych protokołów routingu pod względem szybkości zbieżności (tutaj wiele zależy od wydajności komputera, na którym emulujemy sieć). Specjalnie wspominam o niemiarodajnych testach, żeby ostrzec osoby, które chciałyby wykorzystać wyniki do pracy inżynierskiej czy magisterskiej. Po prostu w niektórych sytuacjach, jeśli chcemy mieć pewność co do słuszności naszych obserwacji, pozostaje skorzystać z rzeczywistego sprzętu. Ale nie ma powodu, żeby dłużej zatrzymywać się nad niedoskonałościach tego rozwiązania, ponieważ możliwości, które ze sobą niesie są naprawdę nieporównywalnie większe.

ZACZYNAMY!
Co nam będzie potrzebne, żeby w końcu zacząć działać z prawie :) rzeczywistą siecią?
  • OS. Emulator jest obsługiwany przez systemy Windows, Linux czy MacOSX - w tym tutorialu zostanie przedstawiona instalacja i konfiguracja pod WIN XP,
  • Dynamips i Dynagen. Dynamips to emulator maszyn Cisco (jak wcześniej wspomniałem - taki VMware, tyle że dla Cisco), natomiast Dynagen jest dodatkowym narzędziem, które ułatwia pracę z wirtualną siecią (okno konsoli, za pomocą którego mamy wgląd i możliwość oddziaływania na sieć, uruchamiane bezpośrednio z pliku konfiguracyjnego *.net). Plik instalacyjny pobieramy stąd,
  • WinPcap. Biblioteka, która zapewnia łączność pomiędzy interfejsem wirtualnego routera, a kartą sieciową naszego komputera. Instalkę pobieramy stąd.
  • CISCO IOS. Obraz systemu IOS - póki co, emulować można kilka wersji: 1700, 2600, 3600, 3700 i 7200. Oczywiście pliki z obrazem nie są udostępniane przez firmę Cisco za darmo, dlatego należy je zdobyć na własną rękę. :)
INSTALACJA
Po zainstalowaniu wcześniej pobranych plików (co sprowadza się do klikania dalej), na Pulpicie pojawi się kilka skrótów: Dynamips Server, Network device list, Pemu Server oraz Dynagen Sample Labs. Jeśli w trakcie instalacji nie zdecydujemy inaczej, domyślnie za zlokalizowanie Dynamipsa będzie odpowiadała ścieżka: C:\Program Files\Dynamips.

KONFIGURACJA
W pierwszej kolejności zmieniamy rozszerzenie pliku z obrazem systemu IOS. W moim przypadku: c7200-jk9o3s-mz.124-17.bin na c7200-jk9o3s-mz.124-17.image. Tak przygotowany plik umieszczamy w folderze images. C:\Program Files\Dynamips\images.
Do tego samego folderu dorzucamy plik konfiguracyjny, w którym znajduje się opis topologii sieci i urządzeń wchodzących w jej skład. Na początku, najlepszym rozwiązaniem będzie przekopiowanie jednego z przykładowych plików, znajdujących się w folderze Dynagen Sample Labs. Skrót do tego katalogu znajduje się na Pulpicie, a jego fizyczne położenie określa ścieżka:
C:\Program Files\Dynamips\sample_labs. Wybierzmy plik o wdzięcznej nazwie simple1.net i przyjrzyjmy się bliżej jego zawartości.

# Simple lab

[localhost]

    [[7200]]
    image = \Program Files\Dynamips\images\c7200-jk9o3s-mz.124-17.image
    # On Linux / Unix use forward slashes:
    # image = /opt/7200-images/c7200-jk9o3s-mz.124-17.image
    npe = npe-400
    ram = 160
        
    [[ROUTER R1]]
    s1/0 = R2 s1/0
    
    [[router R2]]
    # No need to specify an adapter here, it is taken care of
    # by the interface specification under Router R1


Linie, na początku których znajduje się znak #, to oczywiście komentarze, które są pomijane w trakcie wykonywania konfiguracji. Właściwa zawartość pliku rozpoczyna się od wyrażenia [localhost]. Za jego pomocą wskazujemy, że maszyną emulującą urządzenia będzie nasz komputer. Gdyby routery miał pracować na innej maszynie (czy maszynach), wtenczas w nawiasach kwadratowych należałoby wpisać jej nazwę bądź adres IP. [[7200]] otwiera sekcję, w której definiujemy opcje dla wszystkich utworzonych routerów danego modelu. Jak widać parę linii niżej, do zmiennej ram została przypisana liczba 160, dzięki czemu wszystkie router serii 7200 będą wyposażone w 160MB pamięci RAM. Podwójne nawiasy są podrzędne w stosunku do pojedynczych, co w tym przypadku przekłada się na konfigurację routerów pod localhosta. Słowo kluczowe ROUTER odpowiada za stworzenie wirtualnego routera. Wyraz po spacji (tutaj R1), to nazwa urządzenia. W linijce poniżej odbywa się łączenie routerów. Wyrażenie s1/0 = R2 s1/0 w rzeczywistości odzwierciedla łączenie kablem szeregowym routerów R1 (interfejs Serial 1/0) z R2 (interfejs Serial 1/0).

Rys. 1. Topologia wirtualnej sieci simple1.net


Tak złożona wirtualna sieć nie ma dostępu do karty sieciowej naszego komputera, a co za tym idzie i do sieci, z której na co dzień korzystamy.

TESTOWANIE SIECI
Wirtualna sieć została skonfigurowana, teraz pozostaje zobaczyć jak się sprawuje. W tym celu odpalamy serwer Dynamipsa poprzez uruchomienie skryptu Dynamips Server znajdującego się na Pulpicie.

Rys. 2. Uruchomiony serwer Dynamips


Serwer jest uruchomiony, teraz przechodzimy do folderu C:\Program Files\Dynamips\images i dwukrotnie klikamy na pliku konfiguracyjnym simple1.net. Zdefiniowana wcześniej sieć startuje...

Rys. 3. Załadowana pomyślnie wirtualna sieć


Póki co, nie przejmujemy się wyświetlonymi na początku ostrzeżeniami. Jak prawdopodobnie da się odczuć i słyszeć, nasz CPU pracuje na pełnych obrotach. Całe szczęście istnieje sposób, aby to obejść. Problem polega na tym, że Dynamips nie potrafi odróżnić przypadków, kiedy wirtualny router jest  bezczynny, a kiedy wykonuje operacje. Składnia idlepc pozwala na analizę uruchomionego obrazu w celu ustalenia najbardziej prawdopodobnych punktów w kodzie, które reprezentują pętle bezczynności w IOSie. Kiedy raz je ustalimy, Dynamips będzie od czasu do czasu usypiał wirtualne routery, podczas wykonywania tego fragmentu kodu. Dzięki temu zapotrzebowanie na procesor spadnie bardzo znacząco. Żeby przeprowadzić tę operację, najpierw zatrzymamy router R2, a następnie zalogujemy się do routera R1. W konsoli Dynagena wydajmy polecenie.

list

Dzięki temu upewnimy się, że dwa wirtualne routery są uruchomione. (Do wyświetlenia wszystkich dostępnych opcji służy polecenie help)

Rys. 4. Wynik polecenia list


W celu zatrzymania routera R2 wydajemy polecenie:

stop R2

Teraz pozostaje zalogować się do pierwszego routera R1 (poniżej zostaną zaprezentowane trzy metody łączenia się z urządzeniem). Najszybciej będzie wprowadzić w konsoli komendę:

console R1

Do wirtualnego routera można podłączyć się także w bardziej konwencjonalny sposób. Otwieramy cmd i wydajemy polecenie:

telnet localhost 2000

2000 jest numerem portu, na którym nasłuchuje nasz router R1 - co widać choćby na rysunku 4.
Wybierając typ połączenia Telent, nazwę hosta localhost oraz port 2000 w programie PuTTY, również połączymy się z routerem R1.
Wybierzmy jeden z trzech opisanych sposobów i przejdźmy dalej.

Rys. 5. Router R1 gotowy do pracy


Poczekajmy, aż router skończy ładowanie systemu i wyświetli się znak zachętny Router>. Następnie cofnijmy się do konsoli Dynagena i wydajmy polecenie:

idlepc get R1

Odczekujemy aż statystyki dla tego routera zostaną pobrane i wybieramy pozycję, przy której widnieje symbol gwiazdki "*". Na poniższym Rys. 6 jest to numer 3. W tym momencie zużycie procesora powinno się obniżyć na zadowalający poziom.

Rys. 6. Router R1 gotowy do pracy


Gdyby jednak tak się nie zdarzyło, wydajemy polecenie:

idlepc show R1

i szukamy innych wartości. Jeśli jesteśmy zadowolenie z procentowego użycia CPU zapisujemy wyniki.

idlepc save R1

W ten sposób zapamiętamy informacje o idle-pc naszego systemu IOS dla routera R1 w pliku konfiguracyjnym simple1.net.
Pozostaje jeszcze przywrócić do pracy router R2:

start R2

i wykonać analogicznie wyszukiwanie idle-pc, tym razem dla routera R2 (nie zapomnijmy, żeby naprzód się do niego zalogować, poczekać aż wszystkie interfejsy będą zainicjowane i pojawi się znak zachęty Router>).
Istnieje inna możliwość zapisu wartości dla idle-pc (wydaje mi się, że lepszy i szybszy). Mianowicie, po ustaleniu wartości dla routera R1 wydajemy polecenie:

idlepc save R1 db

Sprawi to, że informacje będą przechowywane w bazie danych utworzonej w katalogu domowym. W moim przypadku: C:\Documents and Settings\arbuz\dynagenidledb.ini. Różnica polega na tym, że nie zapisujemy dla każdego wirtualnego routera oddzielnie, a jedynie raz dla danego pliku z obrazem systemu. Dlatego w bazie powinien pojawić się wpis podobny do tego: c7200-jk9o3s-mz.124-7a.image = 0x60750c14. Jeszcze jedno - gdyby po zapisaniu wartości dla idle-pc, nasz CPU nadal pracował w 100%, nie należy wpadać w panikę. Po uruchomieniu routerów, po paru minutach powinien zejść z obrotów.
W tym momencie wirtualna sieć jest gotowa i chętna do współpracy :)

UWAGI
  • aby system IOS wczytywał się szybciej po włączeniu routera, należy rozpakować go np. WinRARem, umieścić w folderze images, a następnie odnotować odpowiednie zmiany w pliku konfiguracyjnym *.net. W ten sposób pominiemy każdorazowy proces rozpakowywania systemu "######################...itd.",
  • podczas wczytywania systemu IOS szybkie oko może dostrzec powiadomienie o błędzie:

    Would you like to terminate autoinstall? [yes]:
    % Crashinfo may not be recovered at bootflash:crashinfo
    % This file system device reports an error
    

    aby więcej się nie pojawiał w trybie uprzywilejowanym użytkownika wydajemy polecenie:

    Router# format bootflash:
    

    dwukrotnie potwierdzamy operację i czekamy na zakończenie formatowania.

Poniżej umieszczam odnośniki do stron, z których korzystałem podczas pisania posta:
http://dynagen.org/tutorial.htm
http://www.ipflow.utc.fr/index.php/Cisco_7200_Simulator

Brak komentarzy:

Prześlij komentarz