VPS Qemu: Skirtumas tarp puslapio versijų
S |
|||
(nerodoma 3 tarpinės versijos, sukurtos to paties naudotojo) | |||
9 eilutė: | 9 eilutė: | ||
==== Bridge tipo fizinis tinklas (Išoriniai ip) ==== | ==== Bridge tipo fizinis tinklas (Išoriniai ip) ==== | ||
− | apt install resolvconf | + | apt install resolvconf bridge-utils |
Standartinis '''/etc/network/interfaces''' maždaug atrodo taip: | Standartinis '''/etc/network/interfaces''' maždaug atrodo taip: | ||
76 eilutė: | 76 eilutė: | ||
</interface> | </interface> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | ==== NAT'intas į External IP tinklas ==== | ||
+ | Kai nėra galimybių užbindinti ip prie mac adresų. Pirmaiusia reikia sugeneruoti mac adresą kurį pripažintų libvirt | ||
+ | hexdump -vn3 -e '/3 "52:54:00"' -e '/1 ":%02x"' -e '"\n"' /dev/urandom | ||
+ | Tuomet reikia užkurti virtualų bridžą ir sudėti mūsų virtualaus tinklo 192.168.100.0/24 šliuzą | ||
+ | ip link add virbr10-dummy address 52:54:00:e6:1d:48 type dummy | ||
+ | brctl addbr virbr10 | ||
+ | brctl stp virbr10 on | ||
+ | brctl addif virbr10 virbr10-dummy | ||
+ | ip address add 192.168.100.1/24 dev virbr10 broadcast 192.168.100.255 | ||
+ | Vidinio tinklo vps konfigūracija būtų tokia: | ||
+ | iface ens3 inet static | ||
+ | address 192.168.100.9 | ||
+ | network 192.168.100.0 | ||
+ | broadcast 192.168.100.255 | ||
+ | gateway 192.168.100.1 | ||
+ | dns-servers 1.1.1.1 | ||
+ | |||
+ | Perforwardinam trafficą iš ir į external ip, tai pat nukreipdami į vidinį tinklo resurso ip | ||
+ | iptables -t nat -A POSTROUTING -s 192.168.100.9 -j SNAT --to-source EXTERNAL_IP | ||
+ | iptables -t nat -A PREROUTING -d EXTERNAL_IP -j DNAT --to-destination 192.168.100.9 | ||
+ | Jokių papildomų portų forwardinti nereikia, vidinio ip adreso visi portai ir kiti resursai taps pasiekiami per išorinį pririštą ip. | ||
+ | O pačio vps xml tinklo konfigūracija būtų tokia: | ||
+ | <interface type='bridge'> | ||
+ | <mac address='52:54:00:47:9e:bd'/> | ||
+ | <source bridge='virbr10'/> | ||
+ | <model type='virtio'/> | ||
+ | <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> | ||
+ | </interface> | ||
+ | Diegiant naują vps, reiktų naudoti šiuos tinklo parametrus | ||
+ | --bridge=virbr10 | ||
+ | |||
+ | '''PASTABA!''' Tinklas jau buvo sukonfiguruotas taip, kad jo pagrindinis interfeisas sukištas į br0 taip pat ten sudėti ir visi papildomi external ip adresai. | ||
==== Tinklas pagal nutylėjimą ==== | ==== Tinklas pagal nutylėjimą ==== |
Dabartinė 11:13, 15 liepos 2020 versija
Šiame straipsnyje aprašoma kaip įdiegti bei valdyti Qemu paremta Linux hipervisoriaus virtualizacija Debian GNU/Linux distribucijoje. Informacija taikytina ir kitoms panašioms distribucijoms bei sistemoms.
Diegimas[keisti]
apt-get install qemu-kvm libvirt-bin virtinst
Tinklo konfigūravimas[keisti]
Bridge tipo fizinis tinklas (Išoriniai ip)[keisti]
apt install resolvconf bridge-utils
Standartinis /etc/network/interfaces maždaug atrodo taip:
allow-hotplug eth0 iface eth0 inet dhcp
Užkomentuodami pastarąsias eilutes, pridedame teksto:
iface eth0 manual auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_stp off bridge_maxwait 0 bridge_fd 0
Išsaugome failą, tuomet atsidarome /etc/sysctl.conf ir įrašome šias eilutes (išjungiame nenaudojamą ipv6 bridžinimą):
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
Išsaugome ir paleidžiame:
/sbin/sysctl -p /etc/sysctl.conf
Tuomet reikia pridėti šias eilutes į /etc/rc.local (būtų gerai rankomis dar prieš exit eilutę, jeigu pastaroji yra):
echo "iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu" >> /etc/rc.local
Galų gale kuriant VPS galima bus panaudoti parametrą, pvz.: --bridge=br0,model=rtl8139,mac=54:52:01:94:92:96 Arba, tinklo konfigūracijos XML apačioje.
<interface type='bridge'>
<mac address='52:54:00:00:99:c5'/>
<source bridge='br0'/>
</interface>
Dabar mums reikia kreiptis į ISP arba Hostingo provaiderį, kad kiekvienam papildomam ip adresui priskirtų po atskirą MAC adresą, kai gausime sąrašą galime konfigūruoti virtualių mašinų ip adresus, pvz.:
iface eth0 inet static address PAP_IL_DOM_AS_IP netmask 255.255.255.0 gateway GATEWAY_KAIP_IR_HYPERVISORIUJE dns-nameservers 1.1.1.1 8.8.8.8
Perkrauname ir žiūrime koks bus rezultatas, visada galima pasitelkti tcpdump ir stebėti vnet0 kaip eina paketai.
NAT'intas bridžintas virtualus tinklas[keisti]
Sukuriam failą vps_tinklas.xml kurio viduje turim turėti:
<network> <name>tinklas</name> <bridge name="virbr10" /> <forward mode="nat"/> <ip address="10.0.0.1" netmask="255.255.255.0"> <dhcp> <range start="10.0.0.2" end="10.0.0.254" /> </dhcp> </ip> </network>
Sukuriam šį tinklą per virsh
# net-create --file /pathas/iki/failo/vps_tinklas.xml # net-start tinklas # net-autostart tinklas
Priskiriame tinklą kokiam nors vps'ui, atsidarę jo konfigą:
<interface type='network'>
<mac address='52:54:00:b9:cc:31'/>
<source network='tinklas'/>
<model type='rtl8139'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
NAT'intas į External IP tinklas[keisti]
Kai nėra galimybių užbindinti ip prie mac adresų. Pirmaiusia reikia sugeneruoti mac adresą kurį pripažintų libvirt
hexdump -vn3 -e '/3 "52:54:00"' -e '/1 ":%02x"' -e '"\n"' /dev/urandom
Tuomet reikia užkurti virtualų bridžą ir sudėti mūsų virtualaus tinklo 192.168.100.0/24 šliuzą
ip link add virbr10-dummy address 52:54:00:e6:1d:48 type dummy brctl addbr virbr10 brctl stp virbr10 on brctl addif virbr10 virbr10-dummy ip address add 192.168.100.1/24 dev virbr10 broadcast 192.168.100.255
Vidinio tinklo vps konfigūracija būtų tokia:
iface ens3 inet static address 192.168.100.9 network 192.168.100.0 broadcast 192.168.100.255 gateway 192.168.100.1 dns-servers 1.1.1.1
Perforwardinam trafficą iš ir į external ip, tai pat nukreipdami į vidinį tinklo resurso ip
iptables -t nat -A POSTROUTING -s 192.168.100.9 -j SNAT --to-source EXTERNAL_IP iptables -t nat -A PREROUTING -d EXTERNAL_IP -j DNAT --to-destination 192.168.100.9
Jokių papildomų portų forwardinti nereikia, vidinio ip adreso visi portai ir kiti resursai taps pasiekiami per išorinį pririštą ip. O pačio vps xml tinklo konfigūracija būtų tokia:
<interface type='bridge'> <mac address='52:54:00:47:9e:bd'/>
<model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>
Diegiant naują vps, reiktų naudoti šiuos tinklo parametrus
--bridge=virbr10
PASTABA! Tinklas jau buvo sukonfiguruotas taip, kad jo pagrindinis interfeisas sukištas į br0 taip pat ten sudėti ir visi papildomi external ip adresai.
Tinklas pagal nutylėjimą[keisti]
# virsh net-start default # virsh net-autostart default
Paleidimas[keisti]
/etc/init.d/libvirtd start
Virtualių VPS mašinų valdymas[keisti]
Įeiname į virsh VPS valdymo komandinę konsolę parašę "virsh". Arba šias komandas vykdome iš shell'o darašius priekyje virsh, pvz.: virsh destroy vps_pavadinimas.
Sukūrimas[keisti]
create_vps skriptas su komentarais, kuriuos būtinai perskaitykite ir pagal tai keiskite jo konfigūraciją.
#!/bin/sh truncate --size=50192M /srv/vps/windows.img # Virtualus 50GB diskas (truncate reiškia, kad jis bus sukurtas ne pilnos 50GB talpos, o pagal VPS užimtą vietą) virt-install --force -r 1596 -n Win10 \ # nurodome 1596MB Ram ir pavadinimą Win10 --os-type=windows \ # Nurodome OS tipą -f /srv/vps/windows.img \ # Nurodome HDD atvaizdą --network network:tinklas \ # Nurodome tinko tipą (APIE TINKLO KONFIGŪRACIJĄ APRAŠYTA VIRŠUJE) --cdrom /srv/vps/win10.iso \ # Nurodome ISO failą iš kurio diegsime operacijų sistemą --graphics vnc,password=slaptazodis,listen=0.0.0.0,port=5913 # Nurodome VNC serverio portą bei slaptažodį echo "VPS Sukurtas"
Galimos problemos su win7/8/10 diegimu senesnėse libvirt versijose todėl reiktų keletos pakeitimų skripte:
virt-install --force -r 1596 --vcpus=2 -n Win7 \ --os-type=windows --noapic --noreboot \ -f /srv/vps/windows.img \ --network network:tinklas \ --cdrom /srv/vps/windows7.iso \ --graphics vnc,password=slaptazodis,listen=0.0.0.0,port=5913
Valdymas[keisti]
# virsh list # virsh start vps_pavadinimas # vncdisplay vps_pavadinimas # parodo kaip sukonfigūruotas VNC serveris # nodeinfo # informacija apie VPS # list # parodo visus veikiančius VPS # setmem <vps_pavadinimas> 16G --config # suteikti daugiau darbinės atminties (tik išjungtam hostui)
CPU priskyrimai
Konfiguracijos koregavimas[keisti]
Jeigu norint pakeisti viena ar kita parametra, pvz.: prideti cpu branduoliu arba prideti ram, pakeisti aparatine iranga, reikia atsidaryti guest'o konfiga su komanda:
# virsh edit <vps_pavadinimas>
Didinam cpu resursus (statiniai cpu)
<vcpu placement=’static’>8</vcpu>
Keiciam cpu loginius resursus bei cpu modeli ir t.t.
<cpu> <model>power8</model> <topology sockets=’1’ cores=’2’ threads=’4’/> </cpu>
Po viso sito, virsh shutdown <vps_pavadinimas>, virsh start <vps_pavadinimas>
Krovimas is CDROM[keisti]
virsh edit <virtualas>
Pridedam sias eilutes tarp <os> </os>
<boot dev='cdrom'/> <boot dev='hd'/> <bootmenu enable='yes'/>
Virtualaus disko prapletimas[keisti]
Prieš ką nors darydami pirmiausia išjungiame virtualią mašiną Pažiūrime info:
virt-filesystems --long -h --all -a olddisk
Praplečiame diską papildomais 5GB
truncate -r olddisk newdisk truncate -s +5G newdisk
Particijų dydžių keitimas tiesiogiai virtualiame hdd (PASTABA! particija yra sename disko imidže)
virt-resize --expand /dev/sda2 olddisk newdisk
Įjungiame mašiną
Virtualaus disko konvertavimas i cow2 format[keisti]
qemu-img convert -f raw -O qcow2 /path/to/your/hdd/vm01.img /path/to/your/hdd/vm01.qcow2
Po to nepamirstame pakeisti disko tipo:
virsh edit <vm>
Virtualių diskų managinimas[keisti]
apt-get install libguestfs-tools guestfish -a vps.img
Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.
Type: 'help' for help on commands
'man' to read the manual
'quit' to quit the shell
><fs> run
100% [###########################################################################################################################################################################################################] 00:00
><fs>
><fs> list-filesystems
/dev/sda1: ext4
/dev/sda2: ext4
><fs> fsck ext4 /dev/sda1
Virtualių diskų pridėjimas[keisti]
Sukuriame diską:
truncate --size=30192M /srv/vps/30additional.img
Sukuriame konfiga /srv/vps/NewStorage.xml
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source file='/srv/vps/30additional.img'/>
<target dev='hdd' bus='virtio'/>
</disk>
Prijungiame:
virsh attach-device Win10 NewStorage.xml
Jeigu norime prijungti diską ne vienam kartui tuomet pridedame parametrą "--persistent"
virsh attach-device --persistent Win10 NewStorage.xml
Jeigu tai windows Guest OS būtina papildomai įdiegti draiverius: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso viostor ir vioscsi Tuomet per disk manager initializuojame naują diską su pasirinkta failų sistema ir galime naudoti.
Pašalinimas[keisti]
Komandos skirtos išjungti ir pašalinti virtualų hostą:
# destroy vps_pavadinimas # undefine vps_pavadinimas
Atvaizdu akturimas[keisti]
Apie netyčia arba tyčia ištrintų image atvaizdų atkūrimą, skaitykite photorec puslapyje.
Migracija[keisti]
Nukopijuojame hdd .img ar .qcow2 disko atvaizdus i naujaji serveri. Tuomet padarome vm'u konfiguraciju dump'us
virsh dumpxml <VPS> > manovps.xml virsh net-dumpxml <tinklas> > netxml.xml
Kitoje masinoje rasome
virsh define manovps.xml virsh net-define netxml.xml virsh net-start <netname> virsh net-autostart <netname>
Live Migracija[keisti]
Nukopijuojame vm hdd image:
scp {volume-file} {user}@{host}:{path}
Atliekame live migracija:
virsh migrate --live --copy-storage-all {vm-name} qemu+ssh://{host}/system
Ex.:
administrator@jungle:~$ scp test-vm/tmpZFu5C7.qcow2 forest.cnx.rice.edu:/homes/administrator/test-vm/tmpZFu5C7.qcow2 administrator@jungle:~$ virsh migrate --live --copy-storage-all test-vm qemu+ssh://forest.cnx.rice.edu/system