MindShifter - nFire.eu   MindShifter - nFire.eu
  [ Zaloguj | Rejestracja ]     Dzisiaj jest : Niedziela, 23 Wrzesień 2018 
Menu strony
 
Artykuły

Wszystkie artykuły » Linux » Sieć » Wirtualny switch (VirtualBox z VDE)

Wirtualny switch (VirtualBox z VDE)

Autor: Dariusz Jaskuła (MindShifter) | Czwartek, 30 Grudzień 2010 17:38


VDE switchArtykuł ten przedstawia wykorzystanie wirtualnego przełącznika (virtual switch) przez maszyny wirtualne uruchomione w środowisku Oracle VirtualBox.

Wirtualnego switcha utworzymy dzięki pakietowi VDE (Virtual Distributed Ethernet), który tworzy wirtualne sieci zgodne ze standardem Ethernet. Sam VDE jest częścią projektu Virtual Square.



Wprowadzenie


VDE niestety nie jest przeznaczony dla systemów z rodziny Windows. Środowisko pod wirtualizację zbudujemy na systemie Debian 6.0 (Squeeze).

Inny przykładem dobrego wirtualnego switcha jest Open vSwitch.

Zanim przejdziemy do instalacji VirtualBox i VDE zapoznamy się z podstawowymi pojęciami dotyczącymi wirtualizacji.

Maszyna, na której zainstalowane jest środowisko do wirtualizacji nazywana jest gospodarzem (host). Maszyna gospodarza przeznaczona jest do uruchamiania maszyn wirtualnych, które nazywane są gościem (guest). Każdy gość jest oddzielną maszyną ze swoimi wirtualnymi zasobami sprzętowymi (procesory, pamięć, dyski, napędy, kontrolery, itp.). Dzięki temu na maszynie wirtualnej można instalować praktycznie dowolny system operacyjny, który po uruchomieniu pracuje tak jakby uruchomiony był na (prawie) fizycznej maszynie. Liczba jednocześnie uruchomionych maszyn wirtualnych jest ograniczona jedynie zasobami gospodarza.

Jednym z bardziej znanych środowisk do wirtualizacji jest VirtualBox. Jest to darmowa platforma oparta o licencję GNU GPL.

W VirtualBox (oraz podobnych środowiskach do wirtualizacji, np. VMware) co prawda istnieje wbudowany mechanizm pozwalający utworzyć wirtualną sieć i podłączyć do niej maszyny wirtualne, lecz niestety sieć taka będzie pracowała w topologi magistrali (urządzeniem centralnym będzie wirtualny hub).

Jest to wysoce niepożądana topologia z jednego powodu - każda z maszyn wirtualnych będąca częścią takiej sieci ma możliwość podsłuchiwania wszystkich pakietów krążących w tej sieci. Jedynym rozwiązaniem jest spięcie maszyn poprzez switcha (przełącznik sieciowy).

Jednak aby to zrobić, każdej z maszyn musielibyśmy przypisać fizyczny interfejs sieciowy obecny w maszynie gospodarza (poprzez połączenie mostkowe). Dla przykładu chcąc uruchomić cztery maszyny wirtualne w systemie gospodarza musiały by być zainstalowane co najmniej cztery karty sieciowe, które połączone były by ze switchem kablami UTP (zakładam, że będzie to sieć Ethernet). Prawdopodobnie chcielibyśmy mieć także dostępną kartę sieciową dla maszyny gospodarza co zwiększa liczbę kart sieciowych do pięciu.

Na szczęście nie musimy posiadać fizycznych interfejsów sieciowych, a nawet fizycznego switcha oraz fizycznych kabli. Wszystko zbudujemy w oparciu o wirtualizację!

Wirtualny switch to oprogramowanie. Zachowuje się on zupełnie jak jego fizyczny odpowiednik. Co więcej, VDE pozwala utworzyć kilka takich switchy i spiąć je wirtualnymi kablami, zupełnie tak jak fizyczne switche.

VirtualBox posiada wbudowaną obsługę VDE, jednak aby z niej skorzystać na maszynie gospodarza musimy najpierw zainstalować VDE.

Tak wygląda wybór dostępnych kart sieciowych w VirtualBox przed zainstalowaniem VDE:

sieć karta sieciowa VDE

a tak po jego instalacji:

sieć z kartą sieciową VDE

Instalacja


Rozpoczynamy od zainstalowania VirtualBox. Musimy zaktualizować repozytoria, dla Squeeze'a będzie to (/etc/apt/sources.list):
deb http://download.virtualbox.org/virtualbox/debian squeeze contrib
Teraz dodajemy klucz publiczny Oracle:
# wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
Aktualizujemy listę dostępnych pakietów:
# aptitude update
Instalujemy VirtualBox:
# aptitude install virtualbox-4.0
Następujące NOWE pakiety zostaną zainstalowane:
  libaudio2{a} libmysqlclient16{a} libqt4-dbus{a} libqt4-designer{a} 
  libqt4-network{a} libqt4-opengl{a} libqt4-qt3support{a} libqt4-script{a} 
  libqt4-sql{a} libqt4-sql-mysql{a} libqt4-xml{a} libqtcore4{a} 
  libqtgui4{a} libsdl-ttf2.0-0{a} mysql-common{a} qt4-qtconfig{a} 
  virtualbox-4.0 
0 pakietów aktualizowanych, 17 instalowanych, 0 do usunięcia i 2 nie aktualizowanych.
Do pobrania 78,1 MB archiwów. Zajęte po rozpakowaniu: 160 MB.
Kontynuować? [T/n/?] y
Instalujemy VDE (właściwie to jego nowszą wersję VDE2 rozszerzoną, m.in. o Virtual LAN):
# aptitude install vde2
Następujące NOWE pakiety zostaną zainstalowane:
  libvde0{a} libvdeplug2{a} vde2 
0 pakietów aktualizowanych, 3 instalowanych, 0 do usunięcia i 2 nie aktualizowanych.
Do pobrania 232 kB archiwów. Zajęte po rozpakowaniu: 856 kB.
Kontynuować? [T/n/?] y
Jeśli będziemy potrzebować tworzyć wirtualne interfejsy sieciowe (poleceniem tunctl) to instalujemy:
# aptitude install uml-utilities
Następujące NOWE pakiety zostaną zainstalowane:
  libreadline5{a} uml-utilities
0 pakietów aktualizowanych, 2 instalowanych, 0 do usunięcia i 2 nie aktualizowanych.
Do pobrania 194 kB archiwów. Zajęte po rozpakowaniu: 651 kB.
Kontynuować? [T/n/?] y

Uruchomienie wirtualnego switcha


Interfejsy TUN i TAP są sterownikami kernela do wirtualnych sieci. Symulują one istnienie karty sieciowej. Dane wysyłane z/do takich interfejsów są obsługiwane przez oprogramowanie.

TAP symuluje urządzenie Ethernetowe, operujące w drugiej warstwie ISO OSI (pracuje na ramkach); wykorzystywany jest do tworzenia mostów. TUN (tunel) symuluje urządzenie sieciowe w warstwie trzeciej (pakiety); wykorzystywany jest do routingu.

W naszej konfiguracji sieci wykorzystamy interfejs TAP, który można będzie wykorzystać do połączeń mostowych, zezwalając w prosty posób na łączenie wirtualnego switcha z fizycznymi urządzeniami. Interfejs ten oczywiście nie jest konieczny, ale my przy okazji skorzystamy z niego zostawiając sobie otwartą furtkę.

Tworzymy interfejs o nazwie tap0 z uprawnieniami dla użytkownika, który będzie uruchamiał switcha i maszyny wirtualne (samo utworzenie interfejsu wymaga uprawnień root):
# tunctl -u mind -t tap0
Set 'tap0' persistent and owned by uid 1000
Konfigurujemy interfejs w tradycyjny sposób:
# ifconfig tap0 192.168.10.100 netmask 255.255.255.0
192.168.10.100 będzie adresem naszego wirtualnego interfejsu.

Możemy teraz uruchomić naszego wirtualnego switcha podpinając go do interfejsu tap0:
$ vde_switch -t tap0
Jeśli chcemy zrezygnować z podłączania switcha do interfejsu tap0 to uruchomienie wirtualnego switcha sprowadzi się do wydania jednego polecenia:
$ vde_switch
Switch uruchomiony w ten sposób (z podpiętym lub nie interfejsem tap0) pozostanie aktywny na pierwszym planie, i jest już aktywny. Naciskając ENTER otrzymamy zgłoszenie z konsoli switcha, w której możemy wydawać polecenia dla wirtualnego switcha:
vde$
Jeśli chcemy uruchomić wirtualny switch jako demona możemy to zrobić poprzez:
$ vde_switch -d -s /tmp/vde.ctl -M /tmp/mgmt1 -t tap0
gdzie:
-d - uruchamia jako demona.
-s /tmp/vde.ctl - katalog kontrolny (domyślny; można go pominąć). VirtualBox spodziewa się takiego katalogu.
-M /tmp/mgmt1 - plik gniazda do zarządzania switchem.
-t tap0 - interfejs, który łączymy ze switchem.

Chcąc połączyć się z konsolą tak uruchomionego wirtualnego switcha wydajemy polecenie:
$ unixterm /tmp/mgmt1
VDE switch V2.3.1
(C) Virtual Square Team (coord. R. Davoli) 2005,2006,2007 - GPLv2

vde$
Jeśli chcemy zmienić katalog kontrolny, np. na /tmp/switch1:
$ vde_switch -d -s /tmp/switch1 -M /tmp/mgmt1 -t tap0
to w konfiguracji sieci maszyny wirtualnej musimy wprowadzić go w polu "Nazwa":

Katalog kontrolny

W przypadku użycia domyślnego katalogu kontrolnego (/tmp/vde.ctl) pole to może pozostać puste.

Jeśli chcemy wylogować się z konsoli switcha wydajemy polecenie:
vde$ logout

Jeśli chcemy wyłączyć switcha wydajemy polecenie:
vde$ shutdown

Chcąc załadować konfigurację switcha z pliku wydajemy polecenie:
vde$ load sciezka/do/pliku
Plik taki składa się z poleceń, z których każde znajduje się w nowej linii, np.:
port/setnumports 8
port/sethub 0
Przy uruchamianiu switcha można podać plik konfiguracyjny przez przełącznik -f.

Pełna lista dostępnych komend dostępna jest po wydaniu polecenia:
vde$ help
0000 DATA END WITH '.'
COMMAND PATH       SYNTAX          HELP
------------       --------------  ------------
ds                 ============    DATA SOCKET MENU
ds/showinfo                        show ds info
help               [arg]           Help (limited to arg when specified)
logout                             logout from this mgmt terminal
shutdown                           shutdown of the switch
showinfo                           show switch version and info
load               path            load a configuration script
debug              ============    DEBUG MENU
debug/list                         list debug categories
debug/add          dbgpath         enable debug info for a given category
debug/del          dbgpath         disable debug info for a given category
plugin             ============    PLUGINS MENU
plugin/list                        list plugins
plugin/add         library         load a plugin
plugin/del         name            unload a plugin
hash               ============    HASH TABLE MENU
hash/showinfo                      show hash info
hash/setsize       N               change hash size
hash/setgcint      N               change garbage collector interval
hash/setexpire     N               change hash entries expire time
hash/setminper     N               minimum persistence time
hash/print                         print the hash table
hash/find          MAC [VLAN]      MAC lookup
fstp               ============    FAST SPANNING TREE MENU
fstp/showinfo                      show fstp info
fstp/setfstp       0/1             Fast spanning tree protocol 1=ON 0=OFF
fstp/setedge       VLAN PORT 1/0   Define an edge port for a vlan 1=Y 0=N
fstp/bonus         VLAN PORT COST  set the port bonus for a vlan
fstp/print         [N]             print fst data for the defined vlan
port               ============    PORT STATUS MENU
port/showinfo                      show port info
port/setnumports   N               set the number of ports
port/sethub        0/1             1=HUB 0=switch
port/setvlan       N VLAN          set port VLAN (untagged)
port/create        N               create the port N (inactive|notallocatable)
port/remove        N               remove the port N
port/allocatable   N 0/1           Is the port allocatable as unnamed? 1=Y 0=N
port/setuser       N user          access control: set user
port/setgroup      N user          access control: set group
port/epclose       N ID            remove the endpoint port N/id ID
port/resetcounter  [N]             reset the port (N) counters
port/print         [N]             print the port/endpoint table
port/allprint      [N]             print the port/endpoint table (including inactive port)
vlan               ============    VLAN MANAGEMENT MENU
vlan/create        N               create the VLAN with tag N
vlan/remove        N               remove the VLAN with tag N
vlan/addport       N PORT          add port to the vlan N (tagged)
vlan/delport       N PORT          add port to the vlan N (tagged)
vlan/print         [N]             print the list of defined vlan
vlan/allprint      [N]             print the list of defined vlan (including inactive port)
.
1000 Success

Przykładowa konfiguracja VLAN

Utworzymy trzy maszyn wirtualnych, które zepniemy wirtualnym switchem, którego z kolei podzielimy na dwie sieci VLAN. Do switcha podpięty będzie także dodatkowo interfejs tap0.

Interfejs tap0 i pierwsza maszyna wirtualna należeć będą do jednego VLAN-u, a maszyna druga i trzecia do innego.

Uruchamiamy VirtualBox (Programy -> Narzędzia systemowe -> Oracle VM VirtualBox):

vbox

Tworzymy nową maszynę wirtualną klikając na przycisk "Nowa" lub wciskając kombinację CTRL+N:

vbox

Powita nas asystent tworzenia nowej maszyny wirtualnej:

vbox

Wybieramy nazwę dla maszyny oraz system operacyjny jaki będziemy na niej instalować:

vbox

Przydzielamy jej pamięć RAM:

vbox

Tworzymy nowy wirtualny dysk dla maszyny wirtualnej:

vbox

Powita nas asystent tworzenia dysku wirtualnego:

vbox

Wybieramy dynamicznie rozszerzalny typ obrazu:

vbox

Podajemy jego lokalizację na dysku gospodarza oraz jego rozmiar:

vbox

Podsumowanie tworzonego dysku wirtualnego:

vbox

Podsumowanie tworzonej maszyny wirtualnej:

vbox

Po utworzeniu maszyny wirtualnej przechodzimy do jej ustawień:

vbox

W sekcji sieć zmieniamy kartę sieciową na "Karta sieciowa VDE":

vbox

Gdybyśmy tworzyli wirtualnego switcha w katalogu kontrolnym innym niż domyślny to musielibyśmy jeszcze uzupełnić pole "Nazwa".

W podobny sposób tworzymy pozostałe dwie maszyny wirtualne.

Teraz uruchamiamy wirtualnego switcha podłączając go pod tap0:
# tunctl -u mind -t tap0
# ifconfig tap0 192.168.10.100 netmask 255.255.255.0

$ vde_switch -d -M /tmp/mgmt1 -t tap0
Podłączamy się do jego konsoli:
$ unixterm /tmp/mgmt1
Sprawdzamy podsumowanie portów switcha:
vde$ port/showinfo
0000 DATA END WITH '.'
Numports=32
HUB=false
counters=true
.
1000 Success
Widzimy, że nasz switch ma 32 porty i pracuje w trybie switch (możliwe jest także uruchomienie lub przełączenie go w tryb hub).

Zmiejszymy liczbę portów do 12:
vde$ port/setnumports 12
.
1000 Success

Sprawdzamy aktywne porty:
vde$ port/print
0000 DATA END WITH '.'
Port 0001 untagged_vlan=0000 ACTIVE - Unnamed Allocatable
 Current User: NONE Access Control: (User: NONE - Group: NONE)
  -- endpoint ID 0005 module tuntap      : tap0
.
1000 Success
Jedynym aktywnym portem jest połączenie switcha z interfejsem tap0.

Teraz uruchamiamy trzy maszyny wirtualne korzystające z VDE i ponownie sprawdzamy porty switcha:
vde$ port/print
0000 DATA END WITH '.'
Port 0001 untagged_vlan=0000 ACTIVE - Unnamed Allocatable
 Current User: NONE Access Control: (User: NONE - Group: NONE)
  -- endpoint ID 0005 module tuntap      : tap0
Port 0002 untagged_vlan=0000 ACTIVE - Unnamed Allocatable
 Current User: mind Access Control: (User: NONE - Group: NONE)
  -- endpoint ID 0003 module unix prog   : VirtualBox user=mind PID=2672  SOCK=/var/tmp/vde.02672-00002
Port 0003 untagged_vlan=0000 ACTIVE - Unnamed Allocatable
 Current User: mind Access Control: (User: NONE - Group: NONE)
  -- endpoint ID 0007 module unix prog   : VirtualBox user=mind PID=2700  SOCK=/var/tmp/vde.02700-00002
Port 0003 untagged_vlan=0000 ACTIVE - Unnamed Allocatable
 Current User: mind Access Control: (User: NONE - Group: NONE)
  -- endpoint ID 0009 module unix prog   : VirtualBox user=mind PID=2731  SOCK=/var/tmp/vde.02731-00002
.
1000 Success
Każda z maszyn wirtualnych jest podpięta do switcha. Sprawdzamy, czy mają ze sobą łączność, np. poleceniem ping wydanym z maszyny pierwszej (192.168.10.1) do drugiej (192.168.10.2) i trzeciej (192.168.10.3):
$ ping 192.168.10.2
PING 192.168.10.2 (192.168.10.2) 56(84) bytes of data.
64 bytes from 192.168.10.2: icmp_req=1 ttl=64 time=0.060 ms
$ ping 192.168.10.3
PING 192.168.10.3 (192.168.10.3) 56(84) bytes of data.
64 bytes from 192.168.10.3: icmp_req=1 ttl=64 time=0.054 ms
Jak widzimy wszystkie maszyny się widzą. Odseparujemy teraz maszyny 2 i 3 (port 3 i 4 switcha) od maszyny 1 (drugi port switcha). W tym celu utworzymy VLAN.

Sprawdzamy VLAN-y:
vde$ vlan/print
0000 DATA END WITH '.'
VLAN 0000
 -- Port 0001 tagged=0 active=1 status=Forwarding
 -- Port 0002 tagged=0 active=1 status=Forwarding 
 -- Port 0003 tagged=0 active=1 status=Forwarding
 -- Port 0004 tagged=0 active=1 status=Forwarding
.
1000 Success
W konfiguracji switcha istnieje obecnie tylko jeden VLAN o identyfikatorze 0. Wszystkie aktywne porty znajdują się w VLAN 0.

Tworzymy nowy VLAN, np. o identyfikatorze 22:
vde$ vlan/create 22
Zmieniamy przynależność portów 3 i 4 do VLAN 22:
vde$ port/setvlan 3 22
vde$ port/setvlan 4 22
Konfiguracja portów w VLAN przedstawia się teraz tak:
vde$ vlan/print
0000 DATA END WITH '.'
VLAN 0000
 -- Port 0001 tagged=0 active=1 status=Forwarding
 -- Port 0002 tagged=0 active=1 status=Forwarding 
VLAN 0022
 -- Port 0003 tagged=0 active=1 status=Forwarding
 -- Port 0004 tagged=0 active=1 status=Forwarding
.
1000 Success
Przynależność portów do VLAN widoczna jest także tu:
vde$ port/print
0000 DATA END WITH '.'
Port 0001 untagged_vlan=0000 ACTIVE - Unnamed Allocatable
 Current User: NONE Access Control: (User: NONE - Group: NONE)
  -- endpoint ID 0005 module tuntap      : tap0
Port 0002 untagged_vlan=0000 ACTIVE - Unnamed Allocatable
 Current User: mind Access Control: (User: NONE - Group: NONE)
  -- endpoint ID 0003 module unix prog   : VirtualBox user=mind PID=2672  SOCK=/var/tmp/vde.02672-00002
Port 0003 untagged_vlan=0022 ACTIVE - Unnamed Allocatable
 Current User: mind Access Control: (User: NONE - Group: NONE)
  -- endpoint ID 0007 module unix prog   : VirtualBox user=mind PID=2700  SOCK=/var/tmp/vde.02700-00002
Port 0003 untagged_vlan=0022 ACTIVE - Unnamed Allocatable
 Current User: mind Access Control: (User: NONE - Group: NONE)
  -- endpoint ID 0009 module unix prog   : VirtualBox user=mind PID=2731  SOCK=/var/tmp/vde.02731-00002
.
1000 Success
Maszyny 2 i 3 są teraz odseparowane od pierwszej, możemy to sprawdzić na maszynie pierwszej:
$ ping 192.168.10.2
PING 192.168.10.2 (192.168.10.2) 56(84) bytes of data.
From 192.168.10.1 icmp_seq=3 Destination Host Unreachable
Zgodnie z oczekiwaniami maszyna nie jest w stanie nawiązać połączenia. Połączenie między maszynami drugą i trzecią działa bez problemów, gdyż znajdują się w jednej sieci VLAN.


   [ Drukuj ] [ Wyślij stronę ]

Komentarze

Dodaj komentarz!


Wszystkie obrazy, grafika, tekst oraz wszelkie inne treści reprezentowana na tej stronie (oprócz niektórych z działu Download) są chronione prawami autorskimi i są wyłączną własnością autora tej strony. Wszelkie przypadki użycia i/lub publikacji są zastrzeżone na całym świecie. Wszystkie zdjęcia i inne treści są wyraźnie nie w Domenie Publicznej. Żadne zdjęcia ani inne materiały na tej stronie nie mogą być kopiowana, przechowywana, poddawane manipulacji, publikowane, sprzedawane lub cytowane w całości lub w części w jakiejkolwiek formie bez uprzedniej pisemnej zgody upoważnionego przedstawiciela tej strony.

Jako materiał chroniony prawami autorskimi, wszystkie zdjęcia umieszczone na tej stronie chronione są zgodnie z międzynarodowym prawem autorskim.

All images, graphics, text, and all other content represented on this website (except for some of the Download section) are copyrighted and are the sole property of author of this website. All use and/or publication rights are reserved worldwide. All images and all other content are expressly not in the Public Domain. No images or other content on this website may be copied, stored, manipulated, published, sold or reproduced in whole or in part in any form without the prior written authorization of an authorized representative.

As copyrighted material, all images displayed on this site are protected under international copyright laws.

....:::: © 2004-2009 MindShifter ]:::::[ kontakt: Gadu-Gadu 2644644 ::::....