Uživatelské nástroje

Nástroje pro tento web


navody:vps:kvm

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
Následující verzeObě strany příští revize
navody:vps:kvm [2016/12/02 20:20] spacexnavody:vps:kvm [2022/07/14 00:20] – Odstraneni preklepu. rhorin
Řádek 1: Řádek 1:
 +<page>manuals:vps:kvm</page>
 ====== Používání KVM a na vpsFree.cz  ====== ====== Používání KVM a na vpsFree.cz  ======
  
Řádek 6: Řádek 7:
  
   * Bridge – povolí vytvoření síťového bridge, do kterého následně připojíte KVM virtuály,   * Bridge – povolí vytvoření síťového bridge, do kterého následně připojíte KVM virtuály,
 +  * TUN/TAP - povolí vytváření virtuálních interface, které jsou pak bridgovány,
   * iptables – povolí použití iptables, které jsou potřeba pro nastavení IP maškarády,   * iptables – povolí použití iptables, které jsou potřeba pro nastavení IP maškarády,
   * KVM – povolí použití KVM (pro HW podporu virtualizace).   * KVM – povolí použití KVM (pro HW podporu virtualizace).
Řádek 13: Řádek 15:
  
 ===== KVM na Alpine Linuxu  ===== ===== KVM na Alpine Linuxu  =====
 +
 +Připravu hypervizoru lze provést automatizovaně pomocí [[http://docs.ansible.com/ansible/latest/index.html|Ansible]].
 +
 +[[https://gist.github.com/HalisCz/192955c64c255ee15cc647f6efabd020|Na GitHubu]] jsou dle níže uvedeného návodu automatizovány zatím tyto sekce:
 +  * [[navody:vps:kvm#instalace_balicku_a_konfigurace_hypervizoru|Instalace balíčků a konfigurace hypervizoru]] - tag ''instalace''
 +  * [[navody:vps:kvm#nastaveni_iptables|Nastavení iptables]] - tag ''nastaveni-iptables''
 +
 +==== Instalace balíčků a konfigurace hypervizoru ====
  
 Nainstalujte potřebné balíčky (ip6tables je volitelný): Nainstalujte potřebné balíčky (ip6tables je volitelný):
Řádek 19: Řádek 29:
 apk update apk update
 apk add qemu-system-x86_64 qemu-openrc qemu-img bridge iptables ip6tables apk add qemu-system-x86_64 qemu-openrc qemu-img bridge iptables ip6tables
 +</code>
 +
 +Nastavte potřebná práva pro přístup ke KVM a TUN (do skupin //kvm// a //netdev// by měl patřit uživatel //qemu//, pod kterým bude běžet vytvořený virtuál):
 +
 +<code shell>
 +chown :kvm /dev/kvm
 +chmod g+rw /dev/kvm
 +chown :netdev /dev/net/tun
 +chmod g+rw /dev/net/tun
 </code> </code>
  
Řádek 63: Řádek 82:
 <code shell> <code shell>
 mkdir -p /var/lib/qemu/myvirt/ mkdir -p /var/lib/qemu/myvirt/
-qemu-img create -f raw /var/lib/qemu/myvirt/disk0.img 5G +qemu-img create -f raw /var/lib/qemu/myvirt/disk0.raw 5G 
-chown qemu:qemu /var/lib/qemu/myvirt/disk0.img +chown qemu:qemu /var/lib/qemu/myvirt/disk0.raw 
-chmod 0600 /var/lib/qemu/myvirt/disk0.img+chmod 0600 /var/lib/qemu/myvirt/disk0.raw
 </code> </code>
  
Řádek 72: Řádek 91:
 <code shell> <code shell>
 cd /etc/conf.d cd /etc/conf.d
-cp qemu qemu.jarvis +cp qemu qemu.myvirt 
-vi qemu.jarvis  # read comments and edit+vi qemu.myvirt  # read comments and edit
 </code> </code>
  
Řádek 98: Řádek 117:
 </code> </code>
  
 +<note important>
 +Pokud máte problémy s tím, že při větším provozu na síťové kartě spadne ve virtuálu sít, zkuste použít driver e1000 místo výchozího virtio-net-pci:
 +
 +<code shell>net0_device="e1000"</code>
 +
 +stabilitu je možno otestovat iperf-em, na testovanem stroji:
 +
 +<code shell>iperf -s</code>
 +
 +na hostiteli pak:
 +<code shell>
 +iperf -c 172.17.1.X -P 20
 +</code>
 +</note>
  
 ==== Nastavení iptables ==== ==== Nastavení iptables ====
Řádek 107: Řádek 140:
 <code shell> <code shell>
 rmdir /etc/iptables rmdir /etc/iptables
-wget -O /etc/iptables http://haste.fit.cvut.cz/raw/iwuqoso+wget -O /etc/iptables https://gist.githubusercontent.com/jirutka/3742890/raw/c9f6bdbfcf597578e562c92ea1e256a9ebcf3a2c/rules-both.iptables
 </code> </code>
  
Řádek 146: Řádek 179:
 <note warning> <note warning>
 Tento návod platí pouze pro CentOS 7.1. Na CentOS 7.2 aktuálně nefunguje interní síť mezi VPS a VM. Použijte buď CentOS 7.1 nebo Debian 8, než bude tento problém vyřešen. Tento návod platí pouze pro CentOS 7.1. Na CentOS 7.2 aktuálně nefunguje interní síť mezi VPS a VM. Použijte buď CentOS 7.1 nebo Debian 8, než bude tento problém vyřešen.
 +
 +2018-03-26 (phatina) Pripojenie k libvirtd zlyhava: An error occurred, but the cause is unknown.
 </note> </note>
  
Řádek 198: Řádek 233:
 virt-manager virt-manager
 </code> </code>
-Díky XMingu můžete teď na dálku z Windows nastavit a spustit instalaci virtuálního serveru uvnitř své VPS. Upozorňuji, že pod X11 nefunguje spice displej, takže pokud chcete grafické rozhraní při instalaci virtuálu, je potřeba to v nastavení přepnout na „Display VNC“ a restartnout virtuál. Pokud to uděláte a server restartnete, může ztratit informaci o tom, že byl připojen .iso image pro instalaci, takže musíte opět do nastavení do záložky „CD-ROM“ a tam v „Source-path“ nastavit znova .iso image pro instalaci. Poté již jen nainstalujte zvolený Linux. Nakonec už zbývá jen na vaší VPS udělat správný portforwarding, aby jste se k virtuálu skrz VPS dostali z venku.+Díky XMingu můžete teď na dálku z Windows nastavit a spustit instalaci virtuálního serveru uvnitř své VPS. Upozorňuji, že pod X11 nefunguje spice displej, takže pokud chcete grafické rozhraní při instalaci virtuálu, je potřeba to v nastavení přepnout na „Display VNC“ a restartnout virtuál. Pokud to uděláte a server restartnete, může ztratit informaci o tom, že byl připojen .iso image pro instalaci, takže musíte opět do nastavení do záložky „CD-ROM“ a tam v „Source-path“ nastavit znova .iso image pro instalaci. Pokud vytvoření KVM mašiny selže s hláškou "Could not start virtual network "default": Unable to set bridge virbr0 forward_delay: Operation not permitted", pak si ve VPS adminu povolte "TUN/TAP". Poté již jen nainstalujte zvolený Linux. Nakonec už zbývá jen na vaší VPS udělat správný portforwarding, aby jste se k virtuálu skrz VPS dostali z venku. Pokud budete chtít používat příkazy virsh, např. pro start a autostart sítě "default", používejte přepínač -c, např.  
 +<code> 
 +virsh -c qemu:///system net-start default 
 +virsh -c qemu:///system net-autostart default 
 +virsh -c qemu:///system net-list --all 
 +virsh -c qemu:///system list 
 +</code>
  
-==== Konfigurace sítě KVM na Debian 8==== +Pokud nechcete pokaždé zadávat přepínač -c pro příkazy virsh a používáte pouze lokální hypervisor, je potřeba v tomto souboru /etc/libvirt/libvirt.conf odkomentovat následující příkaz: 
-=== Routování veřejné IPv4 do „KVM virtuálu ===+<code shell> 
 +uri_default "qemu:///system" 
 +</code>
  
-Máme veřejnou IPv4 adresu a tu idělíme „KVM virtuálu“ a síťový provoz plně směrujeme pro danou veřejnou IPv4 adresu z „VPS“ es privátní / lokální IPv4 na danou veřejnou IPv4 adresu „KVM virtuálu“. Kromě portu 1022, aby byla „VPS“ přes SSH na IPv4 i nadále dostupná. „KVM virtuál“ má plnou konektivitu z do internetu přes IPv4 (kromě portu 1022 na IPv4).+Poté íkazy virsh dále používáme již bez epínače -c tedy následně
 +<code shell> 
 +virsh net-start default 
 +virsh net-autostart default 
 +virsh net-list --all 
 +virsh list 
 +</code>
  
-„VPS“ má pouze privátní / lokální IPv4 a je z pohledu internetu za NATem v rámci sítě vpsfree.cz a není z internetu dostupná, kromě výše zmíněného portu 1022 pro přístup na SSH dané „VPS“. Pokud má „VPS“ privátní IPv4 (rozsah v rámci sítě vpsfree.cz), má „VPS“ IPv4 konektivitu do internetu. Pokud má „VPS“ lokální IPv4 (rozsah v rámci sítě „VPS“ <=> „KVM virtuál“), nemá „VPS“ IPv4 konektivitu do internetu a není možné například stahovat a instalovat aktualizace přes IPv4 (pouze případně jen přes IPv6lze obejít NATem, viz odstavec „Lokální IPv4 adresa „KVM virtuálu“ za NATem“ níže).+==== Konfigurace sítě KVM na Debian 8 ==== 
 +=== * Routování veřejné IPv4 přes lokální rozsah do KVM virtuálulokální IPv4 u VPS ===
  
-Nejprve je potřeba ve vpsAdminu, v detailu vaší VPS, zapnout vlastnost: TUN/TAP.+Tento návod byl otestován na VPS Debian 8 OpenVZ kontejnerujako KVM virtuál byl použit systém Ubuntu 16.04.1 LTS x86_64.
  
-Dále nakonfigurujte bridge pro KVM virtuál“ na straně VPS. Jelikož OpenVZ přepisuje soubor /etc/network/interfaces , konfiguraci bridge přidáváme do interfaces.tail. +Máme pouze jednu veřejnou IPv4 adresu ''185.8.164.43'' a tu přidělíme KVM virtuálu a síťový provoz plně směrujeme pro veřejnou IPv4 adresu ''185.8.164.43'' z VPS přes privátní / lokální rozsah ''172.16.20.0/24'' / ''192.168.122.0/24'' na veřejnou IPv4 adresu ''185.8.164.43'' KVM virtuálu. Tedy kromě portu 1022, ten rezervujeme pro SSH na VPS, aby byla VPS na IPv4 adrese ''185.8.164.43'' přes SSH i nadále dostupná. KVM virtuál má plnou konektivitu z / do internetu přes privátní / lokální IPv4 adresu ''172.16.20.13'' / ''192.168.122.2'' (kromě portu 1022 na IPv4 adrese ''185.8.164.43''). 
-Vytvořte tedy soubor /etc/network/interfaces.tail a vložíme do něj následující kód (privátní IPv4 adresu VPS“ zvolíte z aktuální nastavené konfigurace ve vpsAdminu, lokální IPv4 adresu VPS“ si samozřejmě můžete zvolit libovolnou z lokálního rozsahu. Já jsem použil privátní IPv4 adresu pro VPS“ v rámci sítě vpsfree.cz):+ 
 +VPS má pouze privátní / lokální IPv4 adresu ''172.16.20.12'' / ''192.168.122.1'' a je z pohledu internetu za NATem v rámci sítě vpsfree.cz a není z internetu dostupná, kromě výše zmíněného portu 1022 (na veřejné IPv4 adrese ''185.8.164.43'' KVM virtuálu) pro přístup na SSH dané VPS. Pokud má VPS privátní IPv4 adresu ''172.16.20.12'' (rozsah v rámci sítě vpsfree.cz), má VPS IPv4 konektivitu do internetu. Pokud má VPS lokální IPv4 adresu ''192.168.122.1'' (rozsah v rámci sítě VPS ⇔ KVM virtuál), nemá VPS IPv4 konektivitu do internetu a není možné například stahovat a instalovat aktualizace přes IPv4 (pouze případně jen přes IPv6).  
 + 
 +<note warning>Nejprve je potřeba ve vpsAdminu (v detailu nastavení vaší VPS), zapnout / zkontrolovat vlastnosti: Bridge, iptables, KVM a TUN/TAP. 
 +</note> 
 +Dále nakonfigurujte bridge ''br0'' pro KVM virtuál na straně VPS. Jelikož OpenVZ přepisuje soubor ''/etc/network/interfaces'', konfiguraci bridge ''br0'' přidáváme do ''interfaces.tail'', OpenVZ ji pak sám po restartu vloží do ''/etc/network/interfaces''. 
 + 
 +Vytvořte tedy soubor ''/etc/network/interfaces.tail'' a vložte do něj následující kód (privátní IPv4 adresu VPS zaměníte za správnou IPv4 adresu z aktuální nastavené konfigurace ve vpsAdminu, lokální IPv4 adresu VPS si samozřejmě můžete zvolit libovolnou z lokálního rozsahu. Já jsem dále použil privátní IPv4 adresu pro VPS v rámci sítě vpsfree.cz:
 <code shell> <code shell>
-auto vnet0 +auto br0 
-iface vnet0 inet static +iface br0 inet static 
-        address 172.16.20.12 + address 172.16.20.12 
-        netmask 255.255.255.255 + netmask 255.255.255.255 
-        mtu 1280 + bridge_ports venet0:0 
-        bridge_ports venet0:0 + bridge_stp on 
-        bridge_stp on + bridge_fd 0.0 
-        bridge_fd 0.0 + dad-attempts 0 
-        dad-attempts 0 + accept_ra 0
-        accept_ra 0+
 </code> </code>
  
-Vzhledem k tomu že OpenVZ již po této úpravě nevloží konfiguraci pro veřejnou IPv4 adresu, vložíme ještě na konec souboru dočasně konfiguraci pro veřejnou IPv4 adresu (tu budeme v průběhu návodu mazat, takže na to pamatovat):+Vzhledem k tomu že OpenVZ již po této úpravě automaticky nevloží do ''/etc/network/interfaces'' konfiguraci pro veřejnou IPv4 adresu, vložíme ještě na konec souboru ''/etc/network/interfaces.tail'' dočasně konfiguraci pro veřejnou IPv4 adresu VPS. Správnou veřejnou IPv4 adresu zvolíme dle aktuální nastavené konfigurace ve vpsAdminu (tento následující kód budeme v průběhu návodu zase mazat, takže na to pamatovat):
 <code shell> <code shell>
 auto venet0:0 auto venet0:0
 iface venet0:0 inet static iface venet0:0 inet static
-        address 185.8.164.43 + address 185.8.164.43 
-        netmask 255.255.255.255+ netmask 255.255.255.255
 </code> </code>
  
-Soubor /etc/network/interfaces.tail uložíme a v tuto chvíli je nutné VPS“ tedy OpenVZ kontejner restartovat aby se daná nastavení v souboru interfaces.tail uplatnila.+Soubor ''/etc/network/interfaces.tail'' uložíme a v tuto chvíli je nutné VPS tedy OpenVZ kontejner restartovat aby se daná nastavení v souboru ''interfaces.tail'' uplatnila do ''interfaces'' a vytvořil se bridge ''br0''.
  
-Vytvoříme KVM virtuál“ a nakonfigurujeme síťové rozhraní směřující na bridge vnet0 (důležité vybrat bridge vnet0dané „VPS“, s těmito parametry (privátní IPv4 adresu KVM virtuálu“ zvolíte z aktuální konfigurace ve vpsAdminu, lokální IPv4 adresu KVM virtuálu“ si samozřejmě můžete zvolit libovolnou z lokálního rozsahu. Já jsem použil privátní IPv4 adresu pro KVM virtuál“ v rámci sítě vpsfree.cz, kde brána je IPv4 pro „VPS“ tedy OpenVZ kontejner):+Například pomocí ''virt-manager'' vytvoříme KVM virtuál a nakonfigurujeme síťové rozhraní směřující na bridge ''br0'' VPS (důležité vybrat bridge ''br0''). Nastartujeme OS KVM virtuálu a v systému nakonfigurujeme jeho síť dle vzoru se správnými parametry (opět privátní IPv4 adresu KVM virtuálu zvolíte správnou z aktuální konfigurace ve vpsAdminu, lokální IPv4 adresu KVM virtuálu si zvolíme dle použitého lokálního rozsahu v předchozích krocích. Já jsem zde opět použil privátní IPv4 adresu pro KVM virtuál v rámci sítě vpsfree.cz, kde brána IPv4 je již zvolená IPv4 adresa pro bridge ''br0'', tedy privátní / lokální IPv4 adresa pro VPS OpenVZ kontejner):
 <code shell> <code shell>
-IP adresa:  172.16.20.13 +IP adresa: 172.16.20.13 
-Maska sítě: 255.255.255.0  (maska pro privátní IPv4, pro lokální IPv4 je nutné použít masku 255.255.255.255)+Maska sítě: 255.255.255.0  (maska pro privátní IPv4, pro lokální IPv4 je nutné pro tuto konfiguraci použít masku 255.255.255.255)
 Brána: 172.16.20.12 Brána: 172.16.20.12
 DNS servery: 37.205.9.100,  37.205.10.88 DNS servery: 37.205.9.100,  37.205.10.88
 </code> </code>
  
-A k danému rozhraní ještě přidáme veřejnou IPv4 adresu:+A k danému rozhraní ještě přidáme veřejnou IPv4 adresu: 
 <code shell> <code shell>
-IP adresa: 185.8.164.43+IP adresa: 185.8.164.43 (zvolíte správnou z aktuální konfigurace ve vpsAdminu)
 Maska sítě: 255.255.255.0 (masku zvolíme stejnou jako pro privátní / lokální IPv4 adresu) Maska sítě: 255.255.255.0 (masku zvolíme stejnou jako pro privátní / lokální IPv4 adresu)
 </code> </code>
  
-Vrátíme se ke konfiguraci souboru /etc/network/interfaces.tail a odebereme dočasnou konfiguraci pro veřejnou IPv4 adresu, tedy vymažeme následující řádky kódu na konci souboru:+Vrátíme se ke konfiguraci souboru ''/etc/network/interfaces.tail'' a odebereme dočasnou konfiguraci pro veřejnou IPv4 adresu, tedy vymažeme následující řádky kódu na konci souboru: 
 <code shell> <code shell>
-<del>auto venet0:0+auto venet0:0
 iface venet0:0 inet static iface venet0:0 inet static
-        address 185.8.164.43 + address 185.8.164.43 
-        netmask 255.255.255.255</del>+ netmask 255.255.255.255
 </code> </code>
  
-Místo to do souboru /etc/network/interfaces.tail přidáme routování privátního / lokálního rozsahu na rozhraní VPS“ tedy venet0. Správný tvar pro privátní rozsah IPv4 nalezneme ve vpsAdminu [[https://vpsadmin.vpsfree.cz/?page=networking&action=ip_addresses&list=1&limit=25&offset=0&v=0&vps=&network=0&ip_range=0&location=0|zde]]. Správný tvar rozsahu pro lokální rozsah IPv4 je dle zvolené lokální IPv4 adresy. Do souboru /etc/network/interfaces.tail přidáme řádky se správným rozsahem za výše uvedený kód:+Místo toho do souboru ''/etc/network/interfaces.tail'' přidáme routování privátního / lokálního rozsahu na rozhraní VPS tedy ''venet0'' 
 + 
 +Správný tvar pro privátní rozsah IPv4 nalezneme ve vpsAdminu [[https://vpsadmin.vpsfree.cz/?page=networking&action=ip_addresses&list=1&limit=25&offset=0&v=0&vps=&network=0&ip_range=0&location=0|zde]]. Správný tvar rozsahu pro lokální rozsah IPv4 je dle zvolené lokální IPv4 adresy. Do souboru ''/etc/network/interfaces.tail'' přidáme řádky se správným rozsahem za předchozí kód:
 <code shell> <code shell>
-        up ip route add 172.16.20.0/24 dev venet0 + up ip route add 172.16.20.0/24 dev venet0 
-        down ip route del 172.16.20.0/24 dev venet0+ down ip route del 172.16.20.0/24 dev venet0
 </code> </code>
  
-Přidáme routování pro privátní / lokální IPv4 adresu KVM virtuálu“ na daný bridge tedy vnet0 a routování pro veřejnou IPv4 adresu KVM virtuálu“ na daný bridge vnet0. Do souboru /etc/network/interfaces.tail přidáme řádky se správnou privátní / lokální IPv4 adresou a správnou veřejnou IPv4 adresou za výše uvedený kód:+Přidáme routování pro privátní / lokální IPv4 adresu KVM virtuálu na daný bridge tedy ''br0'' a routování pro veřejnou IPv4 adresu KVM virtuálu na daný bridge ''br0''. Do souboru ''/etc/network/interfaces.tail'' přidáme řádky se správnou privátní / lokální IPv4 adresou a správnou veřejnou IPv4 adresou za výše uvedený kód: 
 <code shell> <code shell>
-        up ip route add 172.16.20.13 dev vnet0 + up ip route add 172.16.20.13 dev br0 
-        down ip route del 172.16.20.13 dev vnet0 + down ip route del 172.16.20.13 dev br0 
-        up ip route add 185.8.164.43 dev vnet0 + up ip route add 185.8.164.43 dev br0 
-        down ip route del 185.8.164.43 dev vnet0+ down ip route del 185.8.164.43 dev br0
 </code> </code>
  
-Povolíme předávání datagramů z jednoho síťového rozhraní na druhé (ip_forward/ forwarding) a nastavíme DNS servery IPv4 sítě vpsfree.cz. Do souboru /etc/network/interfaces.tail přidáme řádky za výše uvedený kód:+Povolíme předávání datagramů z jednoho síťového rozhraní na druhé (ip_forward/ forwarding) a nastavíme DNS servery IPv4 sítě vpsfree.cz. Do souboru ''/etc/network/interfaces.tail'' přidáme řádky za výše uvedený kód: 
 <code shell> <code shell>
-        post-up echo 1 > /proc/sys/net/ipv4/ip_forward + post-up echo 1 > /proc/sys/net/ipv4/ip_forward 
-        post-up echo 1 > /proc/sys/net/ipv4/conf/all/forwarding + post-up echo 1 > /proc/sys/net/ipv4/conf/all/forwarding 
-        dns-nameservers  37.205.9.100  37.205.10.88+ dns-nameservers  37.205.9.100  37.205.10.88
 </code> </code>
  
-Nastavíme směrování portu 1022 pro SSH VPS“ (nezapomeňte nastavit také port 1022 u služby SSH na VPS), abychom neztratili přístup k SSH u VPS, vhledem k tomu že síťový provoz bude zcela směrován jen na veřejnou IPv4 adresu KVM virtuálu. Do souboru /etc/network/interfaces.tail přidáme řádky za výše uvedený kód:+Nastavíme směrování portu 1022 pro SSH VPS (nezapomeňte nastavit také port 1022 u samotné služby SSH na VPS), abychom neztratili přístup k SSH u VPS, vhledem k tomu že síťový provoz bude zcela směrován jen na veřejnou IPv4 adresu KVM virtuálu. Do souboru ''/etc/network/interfaces.tail'' přidáme řádky za výše uvedený kód:
 <code shell> <code shell>
-        up iptables -t nat -A PREROUTING -p tcp --dport 1022 -d 185.8.164.43 -j DNAT --to 172.16.20.12 + up iptables -t nat -A PREROUTING -p tcp --dport 1022 -d 185.8.164.43 -j DNAT --to 172.16.20.12 
-        up iptables -t nat -A POSTROUTING -p tcp --sport 1022 -d 172.16.20.12 -j SNAT --to 185.8.164.43 + up iptables -t nat -A POSTROUTING -p tcp --sport 1022 -d 172.16.20.12 -j SNAT --to 185.8.164.43 
-        down iptables -t nat -D PREROUTING -p tcp --dport 1022 -d 185.8.164.43 -j DNAT --to 172.16.20.12 + down iptables -t nat -D PREROUTING -p tcp --dport 1022 -d 185.8.164.43 -j DNAT --to 172.16.20.12 
-        down iptables -t nat -D POSTROUTING -p tcp --sport 1022 -d 172.16.20.12 -j SNAT --to 185.8.164.43+ down iptables -t nat -D POSTROUTING -p tcp --sport 1022 -d 172.16.20.12 -j SNAT --to 185.8.164.43
 </code> </code>
  
-Soubor /etc/network/interfaces.tail uložíme a v tuto chvíli je nutné VPS“ tedy OpenVZ kontejner restartovat aby se daná nastavení v souboru interfaces.tail uplatnila a je hotovo.+Soubor ''/etc/network/interfaces.tail'' uložíme a v tuto chvíli je nutné VPS tedy OpenVZ kontejner restartovat aby se daná nastavení v souboru ''interfaces.tail'' uplatnila a je hotovo.
  
-=== Routování veřejné IPv6 do „KVM virtuálu“ ===+=== * Lokální IPv4 adresa KVM virtuálu za NATem, veřejná IPv4 u VPS ===
  
-Máme veřejnou IPv6 adresu a tu přidělíme „KVM virtuálu“ a síťový provoz pro danou IPv6 adresu přímo směrujeme z „VPS“ na danou veřejnou IPv6 adresu „KVM virtuálu“„KVM virtuál“ má plnou konektivitu z / do internetu přes IPv6.+Tento návod byl otestován na VPS Debian 8 OpenVZ kontejneru, jako KVM virtuál byl použit systém Ubuntu 16.04.1 LTS x86_64.
  
-VPS“ má vlastní veřejnou IPv6 a má plnou konektivitu z / do internetu přes IPv6.+Máme lokální IPv4 adresu ''192.168.122.2'' (rozsah v rámci sítě VPS ⇔ KVM virtuál) za NATem dané VPS a na tuto lokální IPv4 adresu ''192.168.122.2'' směrujeme jednotlivé porty pro jednotlivé dané služby běžící na KVM virtuálu. KVM virtuál má plnou konektivitu pouze do internetu přes lokální IPv4 adresu ''192.168.122.2'', směrem z internetu jsou dostupné pouze předem dané porty služeb běžících na KVM virtuálu a to přes veřejnou IPv4 adresu ''185.8.164.43'' VPS.
  
 +VPS má vlastní veřejnou IPv4 adresu ''185.8.164.43'' a má plnou konektivitu z / do internetu přes veřejnou IPv4 adresu ''185.8.164.43'' (kromě portů směrovaných na služby KVM virtuálu). VPS má také lokální IPv4 adresu ''192.168.122.1'' (rozsah v rámci sítě VPS ⇔ KVM virtuál) která slouží jako brána pro NAT VPS.
 +
 +<note warning>Nejprve je potřeba ve vpsAdminu (v detailu nastavení vaší VPS), zapnout / zkontrolovat vlastnosti: Bridge, iptables, KVM a TUN/TAP.</note>
 +
 +Dále nakonfigurujte bridge ''br0'' pro KVM virtuál na straně VPS. Jelikož OpenVZ přepisuje soubor ''/etc/network/interfaces'', konfiguraci bridge ''br0'' přidáváme do ''interfaces.tail'', OpenVZ ji pak sám po restartu vloží do ''/etc/network/interfaces''.
 +
 +Vytvořte tedy soubor ''/etc/network/interfaces.tail'' a vložte do něj následující kód (lokální IPv4 adresu VPS si samozřejmě můžete zvolit libovolnou z lokálního rozsahu. Já jsem použil lokální IPv4 adresu v rámci rozsahu ''192.168.122.0'':
 <code shell> <code shell>
-        …… daný návod teprve bude zveřejněn.+auto br0 
 +iface br0 inet static 
 + address 192.168.122.1 
 + netmask 255.255.255.255 
 + bridge_ports venet0:0 
 + bridge_stp on 
 + bridge_fd 0.0
 </code> </code>
  
-=== Lokální IPv4 adresa „KVM virtuálu“ za NATem ===+Do souboru ''/etc/network/interfaces.tail'' přidáme routování lokálního rozsahu na rozhraní bridge ''br0''. Správný tvar rozsahu pro lokální rozsah IPv4 je dle zvolené lokální IPv4 adresy v předchozím kroku. Do souboru ''/etc/network/interfaces.tail'' přidáme řádky se správným rozsahem za předchozí kód: 
 +<code shell> 
 + up ip route add 192.168.122.0/24 dev br0 
 + down ip route del 192.168.122.0/24 dev br0 
 +</code>
  
-Máme lokální IPv4 adresu (rozsah v rámci sítě „VPS“ <=> „KVM virtuálu“za NATem „VPS“ na tuto lokální IPv4 adresu směrujeme jednotlivé poty pro dané služby běžící na „KVM virtuálu“„KVM virtuál“ má plnou konektivitu pouze do internetu es IPv4, směrem z internetu jsou dostupné pouze dané porty služeb běžících na „KVM virtuálu“.+Povolíme předávání datagramů z jednoho síťového rozhraní na druhé (ip_forward) a nastavíme NAT a IP maškarádu mezi bridge ''br0'' a rozhraní VPS tedy ''venet0''. Do souboru ''/etc/network/interfaces.tail'' idáme řádky za výše uvedený kód: 
 +<code shell> 
 + post-up echo 1 > /proc/sys/net/ipv4/ip_forward 
 + up iptables --table nat --append POSTROUTING --out-interface venet0 -j MASQUERADE 
 + up iptables --append FORWARD --in-interface br0 -j ACCEPT 
 +</code>
  
-„VPS“ má vlastní veřejnou IPv4 a má plnou konektivitu z do internetu přes IPv4.+Vzhledem k tomu že OpenVZ již po této úpravě automaticky nevloží do ''/etc/network/interfaces'' konfiguraci pro veřejnou IPv4 adresu, vložíme ještě na konec souboru ''/etc/network/interfaces.tail'' konfiguraci pro veřejnou IPv4 adresu VPS dle aktuální nastavené konfigurace ve vpsAdminu a nastavíme DNS servery IPv4 sítě vpsfree.cz: 
 +<code shell> 
 +auto venet0:0 
 +iface venet0:0 inet static 
 + address 185.8.164.43 
 + netmask 255.255.255.255 
 + dns-nameservers  37.205.9.100  37.205.10.88 
 +</code>
  
 +
 +Soubor ''/etc/network/interfaces.tail'' uložíme a v tuto chvíli je nutné VPS tedy OpenVZ kontejner restartovat aby se daná nastavení v souboru ''interfaces.tail'' uplatnila do ''interfaces'' a vytvořil se bridge ''br0''.
 +
 +Například pomocí ''virt-manager'' vytvoříme KVM virtuál a nakonfigurujeme síťové rozhraní směřující na bridge ''br0'' VPS (důležité vybrat bridge ''br0''). Nastartujeme OS KVM virtuálu a v systému nakonfigurujeme jeho síť dle vzoru se správnými parametry (lokální IPv4 adresu KVM virtuálu si zvolíme dle použitého lokálního rozsahu v předchozích krocích, kde brána IPv4 je již zvolená IPv4 adresa pro bridge ''br0'', tedy lokální IPv4 adresa pro VPS OpenVZ kontejner):
 <code shell> <code shell>
-        …… daný návod teprve bude zveřejněn.+IP adresa: 192.168.122.2 
 +Maska sítě: 255.255.255.0 
 +Brána: 192.168.122.1 
 +DNS servery: 37.205.9.100,  37.205.10.88
 </code> </code>
  
 +
 +Nyní je čas na nastavení směrování portů (port forwarding) pro dané služby na KVM virtuálu, které boudou na daných portech dostupné na veřejné IPv4 adrese VPS. Toto nastavení provedeme pomocí skriptu (tento skript je převzat a upraven dle oficiálního návodu k libvirt, zdroj [[https://wiki.libvirt.org/page/Networking |zde]]) umístěného v souboru ''/etc/libvirt/hooks/qemu'' 
 +
 +Vytvoříme tedy soubor ''/etc/libvirt/hooks/qemu'' a vložíme následující kód:
 +<code shell>
 +#!/bin/bash
 +# used some from advanced script to have multiple ports: use an equal number of guest and host ports
 +
 +# Update the following variables to fit your setup
 +Guest_name='kvm-virtual'
 +Guest_ipaddr='192.168.122.2'
 +Guest_port=( '80' '443' )
 +Host_ipaddr='185.8.164.43'
 +Host_port=(  '80' '443' )
 +
 +length=$(( ${#Host_port[@]} - 1 ))
 +if [ "${1}" = "${Guest_name}" ]; then
 +   if [ "${2}" = "stopped" ] || [ "${2}" = "reconnect" ]; then
 +       for i in `seq 0 $length`; do
 +               iptables -t nat -D PREROUTING -d ${Host_ipaddr} -p tcp --dport ${Host_port[$i]} -j DNAT --to ${Guest_ipaddr}:${Guest_port[$i]}
 +               iptables -D FORWARD -d ${Guest_ipaddr}/32 -p tcp -m state --state NEW -m tcp --dport ${Guest_port[$i]} -j ACCEPT
 +               iptables -t nat -D PREROUTING -d ${Host_ipaddr} -p udp --dport ${Host_port[$i]} -j DNAT --to ${Guest_ipaddr}:${Guest_port[$i]}
 +               iptables -D FORWARD -d ${Guest_ipaddr}/32 -p udp -m state --state NEW -m udp --dport ${Guest_port[$i]} -j ACCEPT
 +       done
 +   fi
 +   if [ "${2}" = "start" ] || [ "${2}" = "reconnect" ]; then
 +       for i in `seq 0 $length`; do
 +               iptables -t nat -A PREROUTING -d ${Host_ipaddr} -p tcp --dport ${Host_port[$i]} -j DNAT --to ${Guest_ipaddr}:${Guest_port[$i]}
 +               iptables -I FORWARD -d ${Guest_ipaddr}/32 -p tcp -m state --state NEW -m tcp --dport ${Guest_port[$i]} -j ACCEPT
 +               iptables -t nat -A PREROUTING -d ${Host_ipaddr} -p udp --dport ${Host_port[$i]} -j DNAT --to ${Guest_ipaddr}:${Guest_port[$i]}
 +               iptables -I FORWARD -d ${Guest_ipaddr}/32 -p udp -m state --state NEW -m udp --dport ${Guest_port[$i]} -j ACCEPT
 +       done
 +   fi
 +fi
 +</code>
 +
 +V souboru ještě před uložením skriptu ''/etc/libvirt/hooks/qemu'' musíme nastavit správné konstanty ve skriptu a to následovně:
 +<code shell>
 +Guest_name='kvm-virtual' (vyplňte název virtuálu v libvirt, seznam virtuálů a jejich správné názvy se dají zobrazit příkazem ‚virsh list‘)
 +Guest_ipaddr='192.168.122.2' (je IPv4 lokální adresa již samotného KVM virtuálu)
 +Guest_port=( '80' '443' ) (definice portů běžících služeb na KVM virtuálu)
 +Host_ipaddr='185.8.164.43' (je veřejná IPv4 adresa samotné VPS, na které spustíme virtuál)
 +Host_port=(  '80' '443' ) (definice portů na veřejné IPv4 adrese, směrované na KVM virtuál)
 +</code>
 +
 +V příkladu výše, se směruje port 80 a 443 pro webserver na KVM virtuálu, z veřejné IPv4 adresy VPS (port 80 a 443) na lokální IPv4 adresu (port 80 a 443) KVM virtuálu. Pokud chceme mít také přístup na SSH u KVM virtuálu, je třeba doplnit také dané porty pro SSH na KVM virtuálu (pozor na to , aby port pro SSH nebyl stejný jako je aktuálně SSH u VPS). Vstupní a výstupní port samozřejmě nemusí být stejný.
 +
 +Soubor ''/etc/libvirt/hooks/qemu'' uložíme a nastavíme správné atributy souboru skriptu ke spouštění skriptu, příkazem:
 +<code shell>
 +chmod +x /etc/libvirt/hooks/qemu
 +</code>
 +
 +V tuto chvíli je nejjistější VPS tedy OpenVZ kontejner restartovat aby se všechna daná nastavení uplatnila a je hotovo.
 +
 +=== * Routování veřejné IPv4 do KVM virtuálu, veřejná IPv4 u VPS ===
 +
 +Tento návod byl otestován na VPS Debian 8 OpenVZ kontejneru, jako KVM virtuál byl použit systém Ubuntu 16.04.1 LTS x86_64.
 +
 +Máme veřejnou IPv4 adresu ''185.8.164.43'' a tu přidělíme KVM virtuálu a síťový provoz pro danou veřejnou IPv4 adresu ''185.8.164.43'' KVM virtuálu směrujeme přímo přes veřejnou IPv4 adresu ''185.8.164.36'' VPS na veřejnou IPv4 adresu ''185.8.164.43'' KVM virtuálu. KVM virtuál má plnou konektivitu z / do internetu přes veřejnou IPv4 adresu ''185.8.164.43''.
 +
 +VPS má vlastní veřejnou IPv4 adresu ''185.8.164.36''a má plnou konektivitu z / do internetu přes veřejnou IPv4 adresu ''185.8.164.36''.
 +
 +<note warning>Nejprve je potřeba ve vpsAdminu (v detailu nastavení vaší VPS), zapnout / zkontrolovat vlastnosti: Bridge, iptables, KVM a TUN/TAP.</note>
 +
 +Dále nakonfigurujte bridge ''br0'' pro KVM virtuál na straně VPS. Jelikož OpenVZ přepisuje soubor ''/etc/network/interfaces'', konfiguraci bridge ''br0'' přidáváme do ''interfaces.tail'', OpenVZ ji pak sám po restartu vloží do ''/etc/network/interfaces''.
 +
 +Vytvořte tedy soubor ''/etc/network/interfaces.tail'' a vložte do něj následující kód (veřejnou IPv4 adresu VPS zaměníte za správnou IPv4 adresu z aktuální nastavené konfigurace ve vpsAdminu):
 +<code shell>
 +auto br0
 +iface br0 inet static
 + address 185.8.164.36
 + netmask 255.255.255.255
 + bridge_ports venet0:0
 + bridge_stp on
 + bridge_fd 0.0
 + dad-attempts 0
 + accept_ra 0
 +</code>
 +
 +Do souboru ''/etc/network/interfaces.tail'' přidáme routování veřejného rozsahu na rozhraní VPS tedy ''venet0''.
 +
 +Správný tvar pro veřejný rozsah k dané veřejné IPv4 adrese nalezneme ve vpsAdminu [[https://vpsadmin.vpsfree.cz/?page=networking&action=ip_addresses&list=1&limit=25&offset=0&v=0&vps=&network=0&ip_range=0&location=0|zde]]. Do souboru ''/etc/network/interfaces.tail'' přidáme řádky se správným rozsahem za předchozí kód:
 +<code shell>
 + up ip route add 185.8.164.0/32 dev venet0
 + down ip route del 185.8.164.0/32 dev venet0
 +</code>
 +
 +Přidáme routování pro veřejnou IPv4 adresu KVM virtuálu na daný bridge tedy ''br0''. Do souboru ''/etc/network/interfaces.tail'' přidáme řádky se správnou veřejnou IPv4 adresou za výše uvedený kód: 
 +<code shell>
 + up ip route add 185.8.164.43 dev br0
 + down ip route del 185.8.164.43 dev br0
 +</code>
 +
 +Povolíme předávání datagramů z jednoho síťového rozhraní na druhé (ip_forward/ forwarding) a nastavíme DNS servery IPv4 sítě vpsfree.cz. Do souboru ''/etc/network/interfaces.tail'' přidáme řádky za výše uvedený kód: 
 +<code shell>
 + post-up echo 1 > /proc/sys/net/ipv4/ip_forward
 + post-up echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
 + dns-nameservers  37.205.9.100  37.205.10.88
 +</code>
 +
 +Soubor ''/etc/network/interfaces.tail'' uložíme a v tuto chvíli je nutné VPS tedy OpenVZ kontejner restartovat aby se daná nastavení v souboru ''interfaces.tail'' uplatnila a vytvořil se bridge ''br0''.
 +
 +V systému KVM virtuálu nakonfigurujeme jeho síť dle vzoru se správnými parametry (veřejnou IPv4 adresu pro KVM virtuál jsme si již vybrali v předchozím kroku, zadáme stejnou a brána je IPv4 adresa VPS již zvolená pro bridge ''br0'', tedy veřejná IPv4 adresa pro VPS OpenVZ kontejner):
 +<code shell>
 +IP adresa: 185.8.164.43
 +Maska sítě: 255.255.255.255
 +Brána: 185.8.164.36
 +DNS servery: 37.205.9.100  37.205.10.88
 +</code>
 +
 +A je hotovo.
 +
 +=== * Routování veřejné IPv6 do KVM virtuálu, veřejná IPv6 u VPS ===
 +
 +Tento návod byl otestován na VPS Debian 8 OpenVZ kontejneru, jako KVM virtuál byl použit systém Ubuntu 16.04.1 LTS x86_64.
 +
 +Máme veřejnou IPv6 adresu ''2a03:3b40:3::52'' a tu přidělíme KVM virtuálu a síťový provoz pro danou veřejnou IPv6 adresu ''2a03:3b40:3::52'' KVM virtuálu směrujeme přímo přes veřejnou IPv6 adresu ''2a03:3b40:3::47'' VPS na veřejnou IPv6 adresu ''2a03:3b40:3::52'' KVM virtuálu. KVM virtuál má plnou konektivitu z / do internetu přes veřejnou IPv6 adresu ''2a03:3b40:3::52''.
 +
 +VPS má vlastní veřejnou IPv6 adresu ''2a03:3b40:3::47'' a má plnou konektivitu z / do internetu přes veřejnou IPv6 adresu ''2a03:3b40:3::47''.
 +<note warning>
 +Následující návod předpokládá již provedení kroků konfigurace IPv4 pomocí jednoho z následujících postup v těchto odstavcích:
 +
 +* „Routování veřejné IPv4 přes lokální rozsah do KVM virtuálu, lokální IPv4 u VPS“,
 +
 +* „Lokální IPv4 adresa KVM virtuálu za NATem, veřejná IPv4 u VPS“ či 
 +
 +* „Routování veřejné IPv4 do KVM virtuálu, veřejná IPv4 u VPS“
 +
 +tohoto návodu výše.
 +
 +Bez těchto předchozích kroků nelze následující návod pro IPv6 použít v této formě!
 +</note>
 +
 +Do existujícího souboru ''/etc/network/interfaces.tail'' vložte následující kód za existující kódu pro definování IPv4 bridge ''br0'' (veřejnou IPv6 adresu VPS zvolíte správnou z aktuální nastavené konfigurace ve vpsAdminu):
 +<code shell>
 +iface br0 inet6 static
 + address 2a03:3b40:3::47
 + netmask 128
 + autoconf 0
 + dad-attempts 0
 + accept_ra 0
 +</code>
 +
 +Do souboru ''/etc/network/interfaces.tail'' přidáme routování IPv6 rozsahu na rozhraní VPS tedy ''venet0'' a routování pro veřejnou IPv6 adresu KVM virtuálu na daný bridge ''br0''.
 +
 +Správný tvar pro rozsah IPv6 nalezneme ve vpsAdminu [[https://vpsadmin.vpsfree.cz/?page=networking&action=ip_addresses&list=1&limit=25&offset=0&v=0&vps=&network=0&ip_range=0&location=0|zde]] a danou veřejnou IPv6 adresu pro KVM virtuálu nastavíme správnou dle aktuální nastavené konfigurace ve vpsAdminu.
 +
 +Do souboru ''/etc/network/interfaces.tail'' přidáme řádky se správným rozsahem a správnou veřejnou IPv6 adresou pro KVM virtuál za předchozí kód:
 +<code shell>
 + up route -A inet6 add 2a03:3b40:3::/128 dev venet0
 + down route -A inet6 del 2a03:3b40:3::/128 dev venet0
 + up route -A inet6 add 2a03:3b40:3::52 dev br0
 + down route -A inet6 del 2a03:3b40:3::52 dev br0
 +</code>
 +
 +Povolíme předávání datagramů z jednoho síťového rozhraní na druhé (forwarding) a nastavíme DNS servery IPv6 sítě vpsfree.cz. Do souboru ''/etc/network/interfaces.tail'' přidáme řádky za výše uvedený kód:
 +<code shell>
 + post-up echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
 + dns-nameservers 2a01:430:17:1::ffff:666 2a01:430:17:1::ffff:588
 +</code>
 +
 +V systému KVM virtuálu nakonfigurujeme jeho síť dle vzoru se správnými parametry (veřejnou IPv6 adresu pro KVM virtuál jsme si již vybrali v předchozím kroku, zadáme stejnou a brána je IPv6 adresa již zvolená pro bridge ''br0'', tedy veřejná IPv6 adresa pro VPS OpenVZ kontejner):
 +<code shell>
 +IP adresa: 2a03:3b40:3::52
 +Maska sítě: 128
 +Brána: 2a03:3b40:3::47
 +DNS servery: 2a01:430:17:1::ffff:666, 2a01:430:17:1::ffff:588
 +</code>
 +
 +Soubor ''/etc/network/interfaces.tail'' uložíme a v tuto chvíli je nutné VPS tedy OpenVZ kontejner restartovat aby se daná nastavení v souboru ''interfaces.tail'' uplatnila a je hotovo.
 +
 +===== KVM na Debian 9  =====
 +Nefunguje více info v https://lists.vpsfree.cz/pipermail/community-list/2017-July/004532.html
 ===== Kontakty ===== ===== Kontakty =====
  
-  * [[:uzivatele/pavlix]] (CentOS, Debian) +<maintainers> 
-  * [[:uzivatele/jirutka]] (Alpine Linux)+pavlix (CentOS, Debian) 
 +jirutka (Alpine Linux) 
 +</maintainers>
navody/vps/kvm.txt · Poslední úprava: 2023/10/20 11:03 autor: rene.la