This shows you the differences between two versions of the page.
saisp:labs:08:contents:06 [2014/01/25 22:21] mihai.carabas [06. Interconectare mașini virtuale] |
saisp:labs:08:contents:06 [2015/05/04 16:56] (current) alexandru.carp [06. [15p] Interconectare mașini virtuale] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 06. Interconectare mașini virtuale ==== | + | ==== 06. [15p] Interconectare mașini virtuale ==== |
- | Creați 2 imagini de disk pornind de la imaginea de baza ''sda.qcow2'' cu numele ''sda-vm1.qcow2'' și ''sda-vm2.qcow2''. | + | Creați 2 imagini de disk pornind de la imaginea de baza ''base.qcow2'' cu numele ''sda-vm1.qcow2'' și ''sda-vm2.qcow2''. |
<solution -hidden> | <solution -hidden> | ||
- | <code> | + | <code bash> |
- | root@saisp:~# qemu-img create -f qcow2 -b sda.qcow2 sda-vm1.qcow2 | + | root@saisp:~# qemu-img create -f qcow2 -b base.qcow2 sda-vm1.qcow2 |
- | root@saisp:~# qemu-img create -f qcow2 -b sda.qcow2 sda-vm2.qcow2 | + | root@saisp:~# qemu-img create -f qcow2 -b base.qcow2 sda-vm2.qcow2 |
</code> | </code> | ||
</solution> | </solution> | ||
- | Până în acest moment am creat mașini virtuale fără nici o legătură către Internet. Dorim să asigurăm accesul la Internet pentru acestea. Pentru acest lucru trebuie să adăugăm la crearea mașinii virtuale o interfață de rețea cu ajutorul parametrului '-net':<code> | + | Până în acest moment am creat mașini virtuale fără nici o legătură către Internet. Dorim să asigurăm accesul la Internet pentru acestea. Pentru acest lucru trebuie să adăugăm la crearea mașinii virtuale o interfață de rețea cu ajutorul parametrului '-net':<code bash> |
- | root@saisp~# kvm -hda sda-vm1.qcow2 -m 256 -smp 2 -net nic,type=e1000,name=eth5,mac=00:11:22:33:44:55 -net tap,ifname=tap-vm1 | + | root@saisp:~# kvm -hda sda-vm1.qcow2 -m 256 -smp 2 -net nic,model=e1000,macaddr=00:11:22:33:44:55 -net tap,ifname=tap-vm1 |
</code> | </code> | ||
- | Cu ajutorul primei opțiuni ''-net nic'' specificăm proprietățile interfeței din mașina virtuală (în cazul de față se dorește emularea unei interfața Intel e1000 care poartă numele ''eth5'' și are adresa MAC ''00:11:22:33:44:55''). Toate opțiunile adăugate nu sunt obligatorii (dacă nu se specifică se folosesc valori implicite). A doua opțiune ''-net tap'' specifică tipul interfeței virtuale din mașina fizică ce are corespondență 1 la 1 cu interfața din mașina virtuală (tot traficul trimis pe interfața ''eth5'' ajunge pe o interfața ''tap-vm1'' în mașina fizică). De asemenea toți parametri sunt opționali. | + | <note warning>Obligatoriu trebuie să porniți mașina virtuală ca utilizator privilegiat pentru a putea să fie create interfețele de tip ''tap''.</note> |
+ | |||
+ | <note warning>Ignorați warning-ul referitor la ''tap''.</note> | ||
+ | |||
+ | Cu ajutorul primei opțiuni ''-net nic'' specificăm proprietățile interfeței din mașina virtuală (în cazul de față se dorește emularea unei interfațe Intel e1000 cu adresa MAC ''00:11:22:33:44:55''). | ||
+ | |||
+ | Toate opțiunile adăugate nu sunt obligatorii (dacă nu se specifică se folosesc valori implicite). A doua opțiune ''-net tap'' specifică tipul interfeței virtuale din mașina fizică ce are corespondență 1 la 1 cu interfața din mașina virtuală (tot traficul trimis pe interfața ''eth0'' de pe masina virtuala ajunge pe interfața ''tap-vm1'' în mașina fizică). De asemenea toți parametri sunt opționali. | ||
- | Porniți o a doua mașină virtuală folosind imaginea ''sda-vm2.qcow2'' și adăugații o interfață de rețea cu numele ''eth4'' și adresa MAC AA:11:22:33:44:55 ce are corespondență în mașina fizică o interfață de tip ''tap'' cu numele ''tap-vm2''. | + | Porniți o a doua mașină virtuală folosind imaginea ''sda-vm2.qcow2'' și adăugați-i o interfață de rețea cu adresa MAC ''AA:11:22:33:44:55'' ce are corespondență în mașina fizică o interfață de tip ''tap'' cu numele ''tap-vm2''. |
<code> | <code> | ||
- | root@saisp:~# kvm -hda sda-vm2.qcow2 -m 256 -smp 2 -net nic,type=e1000,name=eth4,mac=AA:11:22:33:44:55 -net tap,ifname=tap-vm2 | + | root@saisp:~# kvm -hda sda-vm2.qcow2 -m 256 -smp 2 -net nic,model=e1000,macaddr=AA:11:22:33:44:55 -net tap,ifname=tap-vm2 |
</code> | </code> | ||
- | Modificați hostname-urile mașinilor la ''VM1'', respectiv ''VM2'':<code> | + | Modificați hostname-urile mașinilor la ''VM1'', respectiv ''VM2'':<code bash> |
root@VM:~# hostname VM1 | root@VM:~# hostname VM1 | ||
+ | root@VM:~# su - | ||
+ | root@VM1:~# | ||
+ | |||
root@VM:~# hostname VM2 | root@VM:~# hostname VM2 | ||
+ | root@VM:~# su - | ||
+ | root@VM2:~# | ||
</code> | </code> | ||
+ | Logați-vă din nou ca ''root'' pentru a se modifica prompt-ul. | ||
+ | |||
+ | În acest moment am creat 2 legături virtuale între instanțele KVM și mașina fizică. În mod uzual se dorește ca mașinile virtuale și mașina fizică să aparțină aceleiași rețele. Pentru acest lucru avem nevoie de un //switch virtual// în care să conectăm legăturile create anterior (''tap-vm1'' și ''tap-vm2'') împreună cu mașina fizică. //Switch-ul virtual// poate fi emulat folosind conceptul de //bridge// din kernelul de Linux. | ||
- | În acest moment am creat 2 legături virtuale între instanțele KVM și mașina fizică. În mod uzual se dorește ca mașinile virtuale și mașina fizică să aparțină aceleași rețele. Pentru acest lucru avem nevoie de un //switch virtual// în care să conectăm legăturile create anterior (''tap-vm1'' și ''tap-vm2'') împreună cu mașina fizică. //Switch-ul virtual// poate fi emulat folosind conceptul de //bridge// din kernelul de Linux. Vom crea bridge-ul/switch-ul virtual uzual denumit ''brX'', unde ''X'' va fi ''0'' (//br// urmat de un index):<code> | + | Vom crea bridge-ul/switch-ul virtual denumit ''brX'', unde ''X'' va fi ''0'' (//br// urmat de un index):<code bash> |
root@saisp:~# brctl addbr br0 | root@saisp:~# brctl addbr br0 | ||
root@saisp:~# ip link set dev br0 up | root@saisp:~# ip link set dev br0 up | ||
</code> | </code> | ||
<note important>Întotdeauna, nu uitați să ridicați nivelul 2 al bridge-ului</note> | <note important>Întotdeauna, nu uitați să ridicați nivelul 2 al bridge-ului</note> | ||
- | Vom conecta cele două interfețe virtuale ''tap-vm1'' și ''tap-vm2'':<code> | + | Vom conecta cele două interfețe virtuale ''tap-vm1'' și ''tap-vm2'' in bridge:<code bash> |
root@saisp:~# brctl addif br0 tap-vm1 | root@saisp:~# brctl addif br0 tap-vm1 | ||
root@saisp:~# brctl addif br0 tap-vm2 | root@saisp:~# brctl addif br0 tap-vm2 | ||
</code> | </code> | ||
- | Configurați pe interfața ''br0'' adresa IP ''192.168.1.1/24'', iar pe mașinile virtuale adresa IP ''192.168.1.2/24'', respectiv ''192.168.1.3/24''. Verificați conectivitatea între cele 3 adrese IP folosind comanda ''ping''. | + | Configurați pe interfața ''br0'' adresa IP ''192.168.1.1/24'', iar pe mașinile virtuale adresele IP ''192.168.1.2/24'', respectiv ''192.168.1.3/24''. Verificați conectivitatea între cele 3 adrese IP folosind comanda ''ping''. |
<solution -hidden> | <solution -hidden> | ||
- | <code> | + | <code bash> |
root@saisp:~# ip a a 192.168.1.1/24 dev br0 | root@saisp:~# ip a a 192.168.1.1/24 dev br0 | ||
- | root@VM1:~# ip a a 192.168.1.2/24 dev eth5 | + | root@VM1:~# ip a a 192.168.1.2/24 dev eth0 |
- | root@VM2:~# ip a a 192.168.1.3/24 dev eth4 | + | root@VM2:~# ip a a 192.168.1.3/24 dev eth0 |
root@saisp:~# ping 192.168.1.2 | root@saisp:~# ping 192.168.1.2 | ||
Line 50: | Line 64: | ||
</solution> | </solution> | ||
- | În acest moment avem conectivitate între toate cele host-uri (''saisp'', ''VM1'', ''VM2''). Pentru a asigura conectivitatea la Internet trebuie să activăm rutarea și translatarea de adrese (NAT) pe mașina fizică:<code> | + | În acest moment avem conectivitate între toate cele host-uri (''saisp'', ''VM1'', ''VM2''). Pentru a asigura conectivitatea la Internet trebuie să activăm rutarea și translatarea de adrese (NAT) pe mașina fizică:<code bash> |
root@saisp:~# echo 1 > /proc/sys/net/ipv4/ip_forward | root@saisp:~# echo 1 > /proc/sys/net/ipv4/ip_forward | ||
- | root@saisp:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | + | root@saisp:~# iptables -t nat -A POSTROUTING -o ethX -j MASQUERADE |
</code> | </code> | ||
+ | unde ''ethX'' este placa de retea de pe masina fizica. | ||
Ne mai rămâne să configurăm ruta implicită și serverul de DNS pe mașinile virtuale. Conectați-vă folosind SSH la mașinile virtuale și adăugați ca rută implicită adresa ''192.168.1.1'' (mașina fizică) și ca server de DNS ''8.8.8.8''. Verificați cu ajutorul comenzii ''ping'' că site-ul ''www.google.ro'' răspunde la cereri. | Ne mai rămâne să configurăm ruta implicită și serverul de DNS pe mașinile virtuale. Conectați-vă folosind SSH la mașinile virtuale și adăugați ca rută implicită adresa ''192.168.1.1'' (mașina fizică) și ca server de DNS ''8.8.8.8''. Verificați cu ajutorul comenzii ''ping'' că site-ul ''www.google.ro'' răspunde la cereri. | ||
<solution -hidden> | <solution -hidden> | ||
- | <code> | + | <code bash> |
root@saisp:~# ssh root@192.168.1.2 | root@saisp:~# ssh root@192.168.1.2 | ||
root@VM1:~# ip route add default via 192.168.1.1 | root@VM1:~# ip route add default via 192.168.1.1 | ||
- | root@VM1:~# echo nameserver 8.8.8.8 > /etc/resolv.conf | + | root@VM1:~# echo "nameserver 8.8.8.8" > /etc/resolv.conf |
root@VM1:~# ping www.google.ro | root@VM1:~# ping www.google.ro | ||
</code> | </code> | ||
</solution> | </solution> | ||
- | Scoatem interfețele ''tap-vm1'' și ''tap-vm2'' din bridge, după care îl ștergem pe acesta:<code> | + | Scoatem interfețele ''tap-vm1'' și ''tap-vm2'' din bridge, după care îl ștergem pe acesta:<code bash> |
root@saisp:~# brctl delif br0 tap-vm1 | root@saisp:~# brctl delif br0 tap-vm1 | ||
root@saisp:~# brctl delif br0 tap-vm2 | root@saisp:~# brctl delif br0 tap-vm2 | ||
+ | root@saisp:~# ip link set dev br0 down | ||
root@saisp:~# brctl delbr br0 | root@saisp:~# brctl delbr br0 | ||
</code> | </code> | ||
Închideți mașinile virtuale și ștergeți imaginile create (''sda-vm1.qcow2'' și ''sda-vm2.qcow2''). | Închideți mașinile virtuale și ștergeți imaginile create (''sda-vm1.qcow2'' și ''sda-vm2.qcow2''). |