Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verzeNásledující verzeObě strany příští revize | ||
navody:vps:kvm [2016/12/06 10:26] – [Konfigurace sítě KVM na Debian 8] - Lokální IPv4 adresa KVM virtuálu za NATem, veřejná IPv4 u VPS rene.la | navody:vps:kvm [2023/07/31 14:50] – Aktualizace pro vpsAdminOS, odstraneny stare-nekompatibilni distribuce Aither | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
< | < | ||
- | ====== Používání KVM a na vpsFree.cz | + | ====== Používání KVM na vpsFree.cz |
+ | VPS jsou [[informace: | ||
+ | mezi všemi VPS. Pokud z nějakého důvodu potřebuješ vlastní kernel, nebo chceš provozovat jiný operační | ||
+ | systém, můžeš si ve VPS spouštět vlastní plnohodnotné virtuály pomocí QEMU/KVM. | ||
- | Tato info stránka obsahuje návody pro zprovoznění KVM na Alpine Linux 3.4+, CentOS 7 a Debian 8. | + | ===== Konfigurace ===== |
+ | Nejprve je potřeba ve vpsAdminu v detailu VPS zapnout následující vlastnosti: | ||
- | Nejprve je potřeba ve vpsAdminu, v detailu vaší VPS, zapnout následující vlastnosti: | + | |
- | + | ||
- | | + | |
- | * 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). | ||
- | Na vpsFree není jiná možnost než mít disky pro KVM virtuály v souborech (images). Doporučujeme k tomu vytvořit nový (sub)dataset, | + | Na vpsFree není jiná možnost než mít disky pro KVM virtuály v souborech (images). Doporučujeme k tomu vytvořit nový (sub)dataset, |
+ | ===== libvirt ===== | ||
+ | Virtuály můžeš spravovat pomocí [[https:// | ||
+ | a připojit se k němu přes [[https:// | ||
===== KVM na Alpine Linuxu | ===== KVM na Alpine Linuxu | ||
+ | |||
+ | Připravu hypervizoru lze provést automatizovaně pomocí [[http:// | ||
+ | |||
+ | [[https:// | ||
+ | * [[navody: | ||
+ | * [[navody: | ||
+ | |||
+ | ==== Instalace balíčků a konfigurace hypervizoru ==== | ||
Nainstalujte potřebné balíčky (ip6tables je volitelný): | Nainstalujte potřebné balíčky (ip6tables je volitelný): | ||
Řádek 20: | Řádek 32: | ||
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 | ||
+ | </ | ||
+ | |||
+ | 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 / | ||
+ | chmod g+rw / | ||
</ | </ | ||
Řádek 64: | Řádek 85: | ||
<code shell> | <code shell> | ||
mkdir -p / | mkdir -p / | ||
- | qemu-img create -f raw / | + | qemu-img create -f raw / |
- | chown qemu:qemu / | + | chown qemu:qemu / |
- | chmod 0600 / | + | chmod 0600 / |
</ | </ | ||
Řádek 73: | Řádek 94: | ||
<code shell> | <code shell> | ||
cd /etc/conf.d | cd /etc/conf.d | ||
- | cp qemu qemu.jarvis | + | cp qemu qemu.myvirt |
- | vi qemu.jarvis | + | vi qemu.myvirt |
</ | </ | ||
Řádek 99: | Řádek 120: | ||
</ | </ | ||
+ | <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> | ||
+ | |||
+ | stabilitu je možno otestovat iperf-em, na testovanem stroji: | ||
+ | |||
+ | <code shell> | ||
+ | |||
+ | na hostiteli pak: | ||
+ | <code shell> | ||
+ | iperf -c 172.17.1.X -P 20 | ||
+ | </ | ||
+ | </ | ||
==== Nastavení iptables ==== | ==== Nastavení iptables ==== | ||
Řádek 108: | Řádek 143: | ||
<code shell> | <code shell> | ||
rmdir / | rmdir / | ||
- | wget -O / | + | wget -O / |
</ | </ | ||
Řádek 143: | Řádek 178: | ||
- | ===== KVM na CentOS 7 ===== | ||
- | |||
- | <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. | ||
- | </ | ||
- | |||
- | KVM používám prostřednictvím libvirt na aktualizovaném CentOS 7. | ||
- | |||
- | Doporučuju CentOS 7 plně aktualizovat, | ||
- | |||
- | <code shell> | ||
- | yum group install virtualization-host-environment | ||
- | yum install virt-manager xauth | ||
- | systemctl enable libvirtd | ||
- | systemctl disable firewalld | ||
- | reboot | ||
- | </ | ||
- | |||
- | ==== Vytvoření virtuálu pomocí virt-manager na straně serveru ==== | ||
- | |||
- | Motivace: Když pracujete na pomalém připojení (což O2 ADSL na vsi bezpochyby je), potřebujete minimalizovat datové toky přes váš pracovní počítač. Lokální virt-manager by stahoval minimálně kernel a initramdisk po relativně pomalém downloadu a typicky po ukrutně pomalém uploadu nahrával na hostitelský kontejner. | ||
- | |||
- | <code shell> | ||
- | ssh root@your-host-name -Y virt-manager | ||
- | </ | ||
- | |||
- | Na vzdáleně spuštěné instanci lze zahájit instalaci, ale nefunguje mi zobrazení instalátoru pomocí výchozího spice. Protože mi přijde krajně nepraktické přepínat libvirt na VNC, takže doporučuju pro instalaci a další používání spustit virt-manager lokálně a přidat cestu k serveru. | ||
- | |||
- | |||
- | ===== KVM na Debian 8 ===== | ||
- | |||
- | Tento návod je prováděn na Debianu 8. Měl by být plně funkční také na CentOS (s jinými příkazy viz. výše). Pokoušel jsem se KVM rozchodit i na Ubuntu 14.04, ale tam bohužel marně. | ||
- | |||
- | Pokud používáte Windows, je potřeba nainstalovat a zapnout XMing (pokud budete chtít minimálně virtuál nainstalovat a nastavit skrz grafické rozhraní jako já). Poté zapneme putty (nezapomeňte si zapnout XMing a zaškrtnout „Enable X11 forwarding“) a můžeme kouzlit. Stačí také přes "apt install xrdp" na server nainstalovat podporu remote desktop a od té doby už se z Windows připojovat nativním klientem Remote desktop (mstsc). | ||
- | |||
- | Začneme klasikou: | ||
- | |||
- | <code shell> | ||
- | apt-get update | ||
- | apt-get upgrade | ||
- | </ | ||
- | |||
- | Poté nainstalujeme libvirt knihovnu: | ||
- | <code shell> | ||
- | apt-get install qemu-kvm libvirt-bin | ||
- | apt-get install virt-manager | ||
- | </ | ||
- | Celkově mají tyto dva balíčky asi 320 MB. Dále je potřeba si někam na disk stáhnout image distribuce, kterou chcete do virtuálu nainstalovat. Já jsem instaloval Ubuntu server 14.04. Vyberte si adresář, do kterého chcete image stáhnout, a pomocí '' | ||
- | <code shell> | ||
- | cd /home | ||
- | wget http:// | ||
- | </ | ||
- | Zapněte virt-managera. | ||
- | <code shell> | ||
- | virt-manager | ||
- | </ | ||
- | Díky XMingu můžete teď na dálku z Windows nastavit a spustit instalaci virtuálního serveru uvnitř své VPS. Upozorňuji, | ||
- | < | ||
- | virsh -c qemu:/// | ||
- | virsh -c qemu:/// | ||
- | virsh -c qemu:/// | ||
- | virsh -c qemu:/// | ||
- | </ | ||
- | |||
- | 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 / | ||
- | <code shell> | ||
- | uri_default = " | ||
- | </ | ||
- | |||
- | Poté příkazy virsh dále používáme již bez přepínače -c tedy následně: | ||
- | <code shell> | ||
- | virsh net-start default | ||
- | virsh net-autostart default | ||
- | virsh net-list --all | ||
- | virsh list | ||
- | </ | ||
- | |||
- | ==== Konfigurace sítě KVM na Debian 8 ==== | ||
- | === * Routování veřejné IPv4 přes lokální rozsah do KVM virtuálu, lokální 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 pouze jednu veřejnou IPv4 adresu '' | ||
- | |||
- | VPS má pouze privátní / lokální IPv4 adresu '' | ||
- | |||
- | Nejprve je potřeba ve vpsAdminu, v detailu vaší VPS, ke vlastnostem Bridge, iptables a KVM také zapnout vlastnost: | ||
- | |||
- | * TUN/TAP - povolí možnost vytvoření virtuálního síťového rozhraní TUN/TAP. | ||
- | |||
- | Dále nakonfigurujte bridge '' | ||
- | |||
- | Vytvořte tedy soubor ''/ | ||
- | <code shell> | ||
- | auto br0 | ||
- | iface br0 inet static | ||
- | address 172.16.20.12 | ||
- | netmask 255.255.255.255 | ||
- | mtu 1280 | ||
- | bridge_ports venet0:0 | ||
- | bridge_stp on | ||
- | bridge_fd 0.0 | ||
- | dad-attempts 0 | ||
- | accept_ra 0 | ||
- | </ | ||
- | |||
- | Vzhledem k tomu že OpenVZ již po této úpravě automaticky nevloží do ''/ | ||
- | <code shell> | ||
- | auto venet0:0 | ||
- | iface venet0:0 inet static | ||
- | address 185.8.164.43 | ||
- | netmask 255.255.255.255 | ||
- | </ | ||
- | |||
- | Soubor ''/ | ||
- | |||
- | Například pomocí '' | ||
- | <code shell> | ||
- | IP adresa: | ||
- | Maska sítě: | ||
- | Brána: | ||
- | DNS servery: | ||
- | </ | ||
- | |||
- | A k danému rozhraní ještě přidáme veřejnou IPv4 adresu: | ||
- | <code shell> | ||
- | IP adresa: | ||
- | Maska sítě: | ||
- | </ | ||
- | |||
- | Vrátíme se ke konfiguraci souboru ''/ | ||
- | <code shell> | ||
- | auto venet0:0 | ||
- | iface venet0:0 inet static | ||
- | address 185.8.164.43 | ||
- | netmask 255.255.255.255 | ||
- | </ | ||
- | |||
- | Místo toho do souboru ''/ | ||
- | |||
- | Správný tvar pro privátní rozsah IPv4 nalezneme ve vpsAdminu [[https:// | ||
- | <code shell> | ||
- | up ip route add 172.16.20.0/ | ||
- | down ip route del 172.16.20.0/ | ||
- | </ | ||
- | |||
- | Přidáme routování pro privátní / lokální IPv4 adresu KVM virtuálu na daný bridge tedy '' | ||
- | <code shell> | ||
- | up ip route add 172.16.20.13 dev br0 | ||
- | down ip route del 172.16.20.13 dev br0 | ||
- | up ip route add 185.8.164.43 dev br0 | ||
- | down ip route del 185.8.164.43 dev br0 | ||
- | </ | ||
- | |||
- | Povolíme předávání datagramů z jednoho síťového rozhraní na druhé (ip_forward/ | ||
- | <code shell> | ||
- | post-up echo 1 > / | ||
- | post-up echo 1 > / | ||
- | dns-nameservers | ||
- | </ | ||
- | |||
- | 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 ''/ | ||
- | <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 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 POSTROUTING -p tcp --sport 1022 -d 172.16.20.12 -j SNAT --to 185.8.164.43 | ||
- | </ | ||
- | |||
- | Soubor ''/ | ||
- | |||
- | === * Lokální IPv4 adresa KVM virtuálu za NATem, 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 lokální IPv4 adresu '' | ||
- | |||
- | VPS má vlastní veřejnou IPv4 adresu '' | ||
- | |||
- | Nejprve je potřeba ve vpsAdminu, v detailu vaší VPS, ke vlastnostem Bridge, iptables a KVM také zapnout vlastnost: | ||
- | |||
- | * TUN/TAP - povolí možnost vytvoření virtuálního síťového rozhraní TUN/TAP. | ||
- | |||
- | Dále nakonfigurujte bridge '' | ||
- | |||
- | Vytvořte tedy soubor ''/ | ||
- | <code shell> | ||
- | 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 | ||
- | </ | ||
- | |||
- | Do souboru ''/ | ||
- | <code shell> | ||
- | up ip route add 192.168.122.0/ | ||
- | down ip route del 192.168.122.0/ | ||
- | </ | ||
- | |||
- | 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 '' | ||
- | <code shell> | ||
- | post-up echo 1 > / | ||
- | up iptables --table nat --append POSTROUTING --out-interface venet0 -j MASQUERADE | ||
- | up iptables --append FORWARD --in-interface br0 -j ACCEPT | ||
- | </ | ||
- | |||
- | Vzhledem k tomu že OpenVZ již po této úpravě automaticky nevloží do ''/ | ||
- | <code shell> | ||
- | auto venet0:0 | ||
- | iface venet0:0 inet static | ||
- | address 185.8.164.43 | ||
- | netmask 255.255.255.255 | ||
- | dns-nameservers | ||
- | </ | ||
- | |||
- | |||
- | Soubor ''/ | ||
- | |||
- | Například pomocí '' | ||
- | <code shell> | ||
- | IP adresa: | ||
- | Maska sítě: | ||
- | Brána: | ||
- | DNS servery: | ||
- | </ | ||
- | |||
- | |||
- | 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:// | ||
- | |||
- | Vytvoříme tedy soubor ''/ | ||
- | <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=' | ||
- | Guest_ipaddr=' | ||
- | Guest_port=( ' | ||
- | Host_ipaddr=' | ||
- | Host_port=( | ||
- | |||
- | length=$(( ${# | ||
- | if [ " | ||
- | if [ " | ||
- | for i in `seq 0 $length`; do | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | done | ||
- | fi | ||
- | if [ " | ||
- | for i in `seq 0 $length`; do | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | done | ||
- | fi | ||
- | fi | ||
- | </ | ||
- | |||
- | V souboru ještě před uložením skriptu ''/ | ||
- | <code shell> | ||
- | Guest_name=' | ||
- | Guest_ipaddr=' | ||
- | Guest_port=( ' | ||
- | Host_ipaddr=' | ||
- | Host_port=( | ||
- | </ | ||
- | |||
- | 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 ''/ | ||
- | <code shell> | ||
- | chmod +x / | ||
- | </ | ||
- | |||
- | V tuto chvíli je nejjistější VPS tedy OpenVZ kontejner restartovat aby se všechna daná nastavení uplatnila a je hotovo. | ||
===== Kontakty ===== | ===== Kontakty ===== | ||
< | < | ||
- | pavlix (CentOS, Debian) | ||
jirutka (Alpine Linux) | jirutka (Alpine Linux) | ||
</ | </ |