W celu uruchomienia kontrolera należy w katalogu głównym kontrolera z wiersza poleceń wydać następujące polecenie: $ java -jar target/floodlight.

Podobne dokumenty
Zapoznanie ze środowiskiem Mininet. Instalacja zewnętrznego kontrolera SDN.

Wprowadzenie do tworzenia własnego modułu w kontrolerze Floodlight.

1. Instalacja centrali Asterisk w systemie Ubuntu 12.04

Software Defined Networking

REST API w module kontrolera Floodlight. Implementacja kolektora statystyk OpenFlow.

Laboratorium podstaw telekomunikacji

SIP Studia Podyplomowe Ćwiczenie laboratoryjne Instrukcja

Laboratorium Zarządzania. Janusz Granat, Wojciech Szymak

Dokumentacja kompilacji źródeł aplikacji 1.0

Platformy Technologiczne

Tworzenie maszyny wirtualnej

SIECI KOMPUTEROWE I TECHNOLOGIE INTERNETOWE

Instalacja i konfiguracja Symfonia.Common.Server oraz Symfonia.Common.Forte

Aplikacje internetowe - laboratorium

MikroTik Serwer OpenVPN

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Laboratorium - Przechwytywanie i badanie datagramów DNS w programie Wireshark

Wykaz zmian w programie SysLoger

Instalacja pakietu SAS 9.3 Audit, Performance and Measurement na platformie Windows

Specyfikacja techniczna. mprofi Interfejs API

Windows Server 2008 Standard Str. 1 Ćwiczenia. Opr. JK. I. Instalowanie serwera FTP w Windows Server 2008 (zrzuty ekranowe z maszyny wirtualnej)

Programowanie Urządzeń Mobilnych. Laboratorium nr 7, 8

Instalacja serwera baz danych PostgreSQL ze źródeł i pierwsze uruchomienie

Zakład Teleinformatyki i Telekomutacji LABORATORIUM SIECI

instrukcja INSTALACJI APi_proxy

Protokół HTTP (2) I) Wprowadzenie. II) Użyte narzędzia: III) Kolejność działań

Programowanie w Internecie

NS-2. Krzysztof Rusek. 26 kwietnia 2010

Co to jest NODE.JS? Nowoczesne środowisko programistyczne

Spring Web MVC, Spring DI

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

Podstawowa konfiguracja routerów. Interfejsy sieciowe routerów. Sprawdzanie komunikacji w sieci. Podstawy routingu statycznego

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

HermesEX. Dokumentacja serwisowa v

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Instrukcja obsługi aplikacji WIFI AC. SYG01Eng-4

Generacja paczki instalacyjnej F-Secure Client Security/Client Security Premium

Laboratorium - Używanie programu Wireshark do obserwacji mechanizmu uzgodnienia trójetapowego TCP

Podręcznik Integracji

Instalacja i konfiguracja serwera IIS z FTP

Jak okiełznać frontend w Django? Piotr Maliński

ZADANIE.07 Różne (tryb tekstowy i graficzny) 2h

Spring, Maven, Postman, Debugger

Laboratorium nr 4 - Badanie protokołów WWW

Eksperyment w ramach Laboratorium SDN PL-LAB2020

Standardy programowania protokołów komunikacyjnych Laboratorium nr 5 komunikacja multicastowa IPv6

Instrukcja instalacji oprogramowania dla środowiska Linux

LABORATORIUM SIECI KOMPUTEROWYCH (compnet.et.put.poznan.pl)

ZADANIE.07 Różne (tryb tekstowy i graficzny) 2h

Zdalna obsługa transcievera. H A M R A D I O D E L U X E R e m o t e S e r v e r C o n f i g u r a t i o n

Instalacja i konfiguracja serwera SSH.

Laboratorium 3.4.2: Zarządzanie serwerem WWW

Instrukcja instalacji Control Expert 3.0

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Instalacja środowiska MPI w systemie operacyjnym Linux

Wszystkie parametry pracy serwera konfigurujemy w poszczególnych zakładkach aplikacji, podzielonych wg zakresu funkcjonalnego.

Aplikacje webowe z wykorzystaniem Node.js oraz Express

Wireshark analizator ruchu sieciowego

Procedura aktualizacji systemu TelkomBud. dla serwera DBfC w wersji 4.x

INSTRUKCJA INSTALACJI APLIKACJI SEPI W SYSTEMIE LINUX. Dokumentacja zasilania aplikacji SEPI dla systemu Linux

Instalacja NOD32 Remote Administrator

Laboratorium 2 Sieci Komputerowe II Nazwisko Imię Data zajęd

KARTA KURSU. Administracja serwerami WWW

Narzędzia do diagnozowania sieci w systemie Windows

Instrukcja użytkownika Platforma transakcyjna mforex Trader dla systemu Linux

Win Admin Monitor Instrukcja Obsługi

Bezpieczeństwo w M875

SDN Narmox Spear Architektura referencyjna do zastosowania kilku połączeń WAN oraz zasada podłączania sieci NIE-SDN do sieci SDN

Programowanie obiektowe zastosowanie języka Java SE

Funkcje backendu konfiguratora. Warszawa,

1 Moduł Diagnostyki Sieci

MAMP: Można to pobrać i zainstalować z XAMPP: Można go pobrać i zainstalować z

Skanowanie podsieci oraz wykrywanie terminali ABA-X3

Zaawansowany kurs języka Python

Projekt Fstorage. Łukasz Podkalicki Bartosz Kropiewnicki

VComNet Podręcznik użytkownika. VComNet. Podręcznik użytkownika Wstęp

Pracownia internetowa w każdej szkole (edycja Jesień 2007)

Aplikacje WWW - laboratorium

Zarządzanie instancjami EC2

Zaawansowany kurs języka Python

Instalacja serwera zarządzającego F-Secure Policy Manager

Ćwiczenie 6 Przełącznik zarządzalny T2500G-10TS (TL-SG3210).

Sprawozdanie. (notatki) Sieci komputerowe i bazy danych. Laboratorium nr.3 Temat: Zastosowanie protokołów przesyłania plików

Instalacja i opis podstawowych funkcji programu Dev-C++

Bazy Danych. Ćwiczenie 1: Przygotowanie środowiska pracy dla bazy MySQL z wykorzystaniem XAMPP Portable Lite oraz MySQL-Front

SYSTEMY CZASU RZECZYWISTEGO (SCR)

Wykaz zmian w programie SysLoger

Współpraca z platformą Emp@tia. dokumentacja techniczna

AKTYWNY SAMORZĄD. Instrukcja instalacji, aktualizacji i konfiguracji.

PROGRAM DO ARCHIWIZACJI NOŚNIKÓW KOPII ELEKTRONICZNEJ

Instrukcja inteligentnego gniazda Wi-Fi współpracującego z systemem Asystent. domowy

Co to jest iptables?

SERWER AKTUALIZACJI UpServ

Wykład 2: Budowanie sieci lokalnych. A. Kisiel, Budowanie sieci lokalnych

System operacyjny Linux

Wykaz zmian w programie SysLoger

Współpraca z platformą dokumentacja techniczna

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE. Tryb konsolowy ćwiczenie b

Aplikacje WWW - laboratorium

Transkrypt:

Instrukcja do laboratorium 3 Rest API. Proaktywna instalacja przepływów. 1. Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z Rest API kontrolera Floodlight. Podczas zajęć przedstawione zostaną metody proaktywnej instalacji przepływów w tablicy przełącznika w środowisku Mininet. 2. Uruchamianie zewnętrznego kontrolera sieci SDN W trakcie tych oraz kolejnych zajęć laboratoryjnych wykorzystywać będziemy zewnętrzny kontroler sieci SDN o nazwie Floodlight. Napisany jest on w języku Java. 2.1 Przygotowanie środowiska Przed zbudowaniem i uruchomieniem środowiska należy zainstalować potrzebne repozytoria poleceniem: $ sudo apt-get install build-essential ant maven python-dev 2.2 Pobieranie i budowanie kontrolera Proszę pobrać kontroler (version 1.2) ze strony projektu: https://github.com/floodlight/floodlight/archive/v1.2.tar.gz a następnie rozpakować go, np. poleceniem: $ tar -xf floodlight* Następnie należy przejść do rozpakowanego katalogu i zbudować kontroler ze źródeł poleceniem $ ant 2.3 Uruchomienie i testowanie zewnętrznego kontrolera Uwaga: Przed uruchomieniem kontrolera proszę zamknąć wszystkie topologie uruchomione w środowisku Mininet. W celu uruchomienia kontrolera należy w katalogu głównym kontrolera z wiersza poleceń wydać następujące polecenie: $ java -jar target/floodlight.jar Proszę zaobserwować start kontrolera. Kontroler od tej pory powinien nasłuchiwać przełączników za pomocą protokołu LLDP. Następnie (w innej konsoli) należy uruchomić środowisko Mininet z bazową topologią wskazując, że wykorzystany zostanie zewnętrzny kontroler: $ sudo mn --controller=remote,ip=<controller ip>,port=6653 Zadanie 1. Proszę przetestować działanie sieci z wykorzystaniem zewnętrznego kontrolera, np. poleceniem: mininet> h1 ping h2 1

Zadanie 2. W jaki sposób można zmienić poziom logowania przez kontroler? Proszę ustawić poziom logowania na DEBUG i zaobserwować zmiany. Po tym proszę wrócić do poziomu INFO. 3. Web GUI kontrolera Floodlight Kontroler Floodlight został wyposażony w GUI dostępne z poziomu przeglądarki komunikujące się z kontrolerem za pomocą Rest API. Pozwala ono m.in. na obserwację kontrolowanych przełączników, ich statystyk, wpisów tablic przepływów oraz na podstawowe zmiany w konfiguracji kontrolera oraz przełączników (np. dodawanie przepływów). Dostęp do GUI można uzyskać wchodząc na stronę: http://<controller-ip>:8080/ui/index.html Zadanie 3. Proszę sprawdzić zawartość tablicy przepływów przełącznika z poziomu Web GUI (bez jakiegokolwiek ruchu pomiędzy wirtualnymi hostami). Zadanie 4. Proszę powtórzyć zadanie 3, tym razem wcześniej uruchamiając ping pomiędzy h1 a h2. Następnie proszę zatrzymać polecenie ping i jeszcze raz sprawdzić tablicę przepływów. Z czego wynikają zmiany? 4. Proaktywna instalacja przepływów. W dalszej części laboratorium zastosowany zostanie proaktywny tryb instalacji wszystkich przepływów w przełączniku. W trybie tym, w przeciwieństwie do trybu reaktywnego, przepływy instalowane są zanim jakikolwiek pakiet należący do danego przepływu pojawi się w sieci. W ten sposób można tworzyć m.in. proste reguły ACL, firewalli czy też bardzo proste funkcje load-balancera (np. wykorzystując tablice grupowe). 4.1 Wyłącznie modułu Forwarding kontrolera Floodlight. Za instalowanie przepływów w trybie reaktywnym przez kontroler Floodlight odpowiedzialny jest moduł net.floodlightcontroller.forwarding.forwarding. W celu deaktywacji tego modułu należy usunąć odpowiednią linijkę w pliku src/main/resources/floodlightdefault.properties Uwaga: Przed edycją pliku proszę wykonać jego kopię zapasową! Zadanie 5. Po edycji pliku proszę przetestować łączność pomiędzy h1 a h2 (należy wcześniej wykonać restart kontrolera). Wszelkie uwagi należy skierować do prowadzącego. 4.2 Ręczna instalacja przepływów W celu ręcznej instalacji przepływów w przełącznikach OpenFlow można wykorzystać Rest API wystawiane przez kontroler. Kontroler obsługuje wiele URI tym samym pozwalając na komunikację z zewnętrznymi aplikacjami poprzez interfejs północny. Dokładną listę obsługiwanych adresów oraz ich funkcjonalność można znaleźć na stronie projektu 1. Proszę doinstalować aplikację curl poleceniami: $ sudo apt-get update $ sudo apt-get install curl 1 https://floodlight.atlassian.net/wiki/display/floodlightcontroller/static+entry+pusher+api 2

Podczas zajęć wykorzystywana będzie aplikacja curl. Możliwe jest także dodawanie przepływów za pomocą wtyczek RESTowych do przeglądarek, np. Advanced REST Client, Postman. W celu wysłania polecenia utworzenia nowego wpisu w tablicy przepływów przełącznika należy wysłać odpowiednio sformatowany JSONowy ciąg znaków na odpowiedni adres URL, np. $ curl -X POST -d '{"switch":"00:00:00:00:00:00:00:01", "name":"flow1", "priority":"32768", "in_port":"1","active":"true", "actions":"output=2"}' http://<controller_ip>:8080/wm/staticflowpusher/json Polecenie to wykonuje metodę POST, w przełączniku o DPID = 00:00:00:00:00:00:00:01 instalowany zostaje przepływ o nazwie "flow1", z priorytetem o wartości 32768. Przepływ ten wszystkie pakiety z portu nr 1 przekierowywuje na port nr 2 (akcja: output=2). Uwaga: Nr interfejsów (OpenFlow) nadawane są przez przełącznik, niekoniecznie są równoznaczne z numerami interfejsów w sprzęcie. Szczególnie zaobserwowane zostanie to podczas konfiguracji przełączników firmy Juniper. Zadanie 6. W jaki sposób sprawdzić DPID przełącznika Open vswitch? Zadanie 7. Proszę dodać odpowiedni wpis do tablicy przełącznika, aby możliwa była komunikacja pomiędzy h1 a h2. 4.3 Przydatne URI W celu wylistowania zainstalowanych przepływów w danym przełączniku można wysłać do kontrolera następujące zapytanie (z odpowiednim DPID): curl http://<controller_ip>:8080/wm/staticflowpusher/list/00:00:00:00:00:00:00:0 1/json Listowanie wszystkich przepływów, wszystkich przełączników podłączonych do danego kontrolera dokonuje się poleceniem: curl http://<controller_ip>:8080/wm/staticflowpusher/list/all/json Kasowanie wszystkich wpisów można wykonać poleceniami (odpowiednio dla jednego oraz wszystkich przełączników): curl http://<controller_ip>:8080/wm/staticflowpusher/clear/00:00:00:00:00:00:00: 01/json curl http://<controller_ip>:8080/wm/staticflowpusher/clear/all/json Kasowanie pojedynczego wpisu: curl -X DELETE -d '{"name":"flow1"}' http://<controller_ip>:8080/wm/staticflowpusher/json Zadanie 8. Proszę za pomocą tylko jednego wpisu zapewnić komunikację pomiędzy h1 a h2 w topologii minimalnej środowiska Mininet. 4.4 Operacje na własnej topologii. Korzystając z instrukcji do laboratorium nr 1 proszę stworzyć topologię jak na rysunku 1. 3

S4 Host h1 S1 S3 Host h3 S2 Rysunek 1. Topologia wykorzystywana podczas ćwiczeń Zadanie 9. Proszę dodać odpowiednie przepływy a następnie przetestować działanie sieci w następujących przepadkach: a) Zapytanie ICMP z hosta h1 do h2 wędruje kolejno przez S1-S2-S3 a odpowiedź wraca S3-S4-S1 b) Cały ruch UDP z hosta h1 do h2 wędruje przez S1-S3 c) Cały ruch TCP pomiędzy h1 a h2 przechodzi przez S1-S2-S4-S3 d) Ruch TCP z h1 do h2 na porcie 80, na adres IP hosta h2 przechodzi ścieżką S1-S4-S2-S3 Uwaga: Pomocne może być wykorzystanie terminali xterms odpowiednich węzłów (serwer HTTP dla ruchu TCP, iperf dla ruchu UDP) oraz programu Wireshark/tcpdump uruchomionego na odpowiednich interfejsach przełączników lub hostów. 4

4.5 Wykorzystanie języka Python do obsługi Rest API Powyższe przykłady ilustrowały wykorzystanie programu curl do wysyłania poleceń do kontrolera. Możliwe jest wykorzystanie dowolnego języka programowania w celu komunikacji z kontrolerem na interfejsie północnym. Poniżej prezentowany jest przykład z dokumentacji kontrolera ilustrujący możliwość dodawania przepływów z wykorzystaniem skryptu w języku Python. import httplib import json class StaticEntryPusher(object): def init (self, server): self.server = server def get(self, data): ret = self.rest_call({}, 'GET') return json.loads(ret[2]) def set(self, data): ret = self.rest_call(data, 'POST') return ret[0] == 200 def remove(self, objtype, data): ret = self.rest_call(data, 'DELETE') return ret[0] == 200 def rest_call(self, data, action): path = '/wm/staticflowpusher/json' headers = { 'Content-type': 'application/json', 'Accept': 'application/json', } body = json.dumps(data) conn = httplib.httpconnection(self.server, 8080) conn.request(action, path, body, headers) response = conn.getresponse() ret = (response.status, response.reason, response.read()) print ret conn.close() return ret pusher = StaticEntryPusher('<insert_controller_ip>') flow1 = { 'switch':"00:00:00:00:00:00:00:01", "name":"flow1", "cookie":"0", "priority":"32768", "in_port":"1", "active":"true", 5

"actions":"output=2" } flow2 = { 'switch':"00:00:00:00:00:00:00:01", "name":"flow2", "cookie":"0", "priority":"32768", "in_port":"2", "active":"true", "actions":"output=1" } pusher.set(flow1) pusher.set(flow2) Zadanie 10. Modyfikując odpowiednio powyższy kod proszę wysłać polecenia utworzenia przepływów flow1 oraz flow2. Zadanie 11. Proszę tak zmodyfikować kod w Pythonie, aby ustawić hard timeout obu przepływów na wartość 10 sekund. 6