Emulacja CISCO na Linuksie

Emulacja CISCO na Linuksie

Kilka dni temu przyszło mi rozdzielać sieć na mniejsze segmenty. Wykorzystałem do tego m.in. mega stary switch CISCO. Switch został już wcześniej podłączony, a ja nie chciałem do końca psuć sieci moimi eksperymentami, przyszedł więc czas na testowanie VLANów (802.1q) pod Linuksem i rozdzielanie ich na switchu. Kongfigurację pominę bo prosta i nie o to chodzi.

Chodzi o emulację routerów CISCO na Linuksie, tak abym pod ręką miał wszystkie swoje ulubione narzędzia, skonfigurowane VLAN’y itd.

Kolega oczywiście posłużył pomocą (dzięki Krzyś 🙂 ), podesłał kilka rozwiązań, ale wszystkie pod W***dę. Jednak jeden program rzucił mi się w oczy bardziej: GNS.

Okazuje się, że oparty jest na emulatorze Dynamips. Znaleźć można to tutaj.

Program zakłada, że gdzieś w pobliżu ma plik binarny z IOS’em. Poniżej podam przykładowe wywołanie (nie korzystałem z Dynagen, a polecam):

./dynamips-0.2.7-amd64.bin c7200-xxx.bin -p 1:PA-8E -s 0:0:tap:tap0 -X

Gdzie c7200-xxx.bin to nazwa znajdującego się w bieżącym katalogu firmware IOS. Polecenie (jak widać wersja dla AMD64) uruchomi standardowy router (domyślnie 7200) z pierwszym slotem obsadzonym 8 gigabitowymi kartami sieciowymi. Ponadto pierwsza karta ze slotu 0 będzie niejako przypięta pod interfejs tap0 Linuksa.

Z dobrodziejstwa pseudo interfejsów TAP możemy korzystać po załadowaniu modułu jądra (chyba, że mamy wbudowane w jądro, patrz Ubuntu 10.04) i zainstalowaniu pakietu uml-utilities:

aptitude install uml-utilities
modprobe tap
tunctl -t tap0
ifconfig tap0 10.10.56.10 netmask 255.255.255.0 up

Trzecie polecenie tworzy interfejs tap0. Następne ustawia dla niego adres IP.

Domyślnie emulator zabiera dla siebie cały czas procesora gospodarza. To źle, bardzo źle. Na szczęście jest ratunek.

Po uruchomieniu programu, kiedy zgłosi się gotowy do pracy IOS, wciksamy kolejno (!) lewy ctrl, potem (!) “]” i na końcu “i”. W tym czasie emulator przejdzie do zbierania statystyk (u mnie ok 5s, ale na forum znalazłem tekst w stylu “go for lunch”) i zakończy podsumowaniem, które wygląda mniej więcej tak:

Press RETURN to get started!

Please wait while gathering statistics...
Done. Suggested idling PC:
   0x608724c0 (count=64)
   0x6077bf24 (count=77)
Restart the emulator with "--idle-pc=0x608724c0" (for example)

Tak jak prosi, następnym razem do linii poleceń dopiszemy:

--idle-pc=0x608724c0

Jeśli (i to jest big IF) pomoże zapiszmy gdzieś tę wartość. Nie każda sugestia dobrze działa, nie na każdym parametrze procesor gospodarza będzie odpoczywał.

W moim przypadku po kilku próbach udało się obniżyć zużycie procesora do 15%, tak, że mogłem uruchomić kilka instancji emulatora.

Żeby sprawdzić nasze połączenie z urządzeniem tap0, skonfigurujmy kartę nr 0 na slocie 0:

Router>enable
Router#conf term
Router(config)#interface f0/0
Router(config-if)#ip address 10.10.56.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#exit

I sprawdzimy, czy nasz router “widzi” się z TAP0:

Router#ping 10.10.56.10

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.10.56.10, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/18/32 ms

Gotowe, teraz można eksperymentować!

W razie potrzeb zawsze możemy “przypiąć” interfejs emulatora do prawdziwego interfejsu gospodarza, czy ustawić więcej wirtualnych urządzeń TAP.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.