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í verze | ||
| navody:vps:kvm [2023/10/20 11:03] – rene.la | navody:vps:kvm [2026/08/17 11:09] (aktuální) – Napojení na revizi zdroje a testy virtualizace aither | ||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| < | < | ||
| - | ====== 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. | ||
| - | ===== Konfigurace ===== | + | < |
| - | Nejprve je potřeba ve vpsAdminu v detailu VPS zapnout následující vlastnosti: | + | source=" |
| + | test=" | ||
| + | /> | ||
| - | * TUN/TAP - povolí vytváření virtuálních interface, které jsou pak bridgovány, | + | ====== KVM a libvirt uvnitř VPS ====== |
| - | * 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, | + | ===== Instalace libvirt ===== |
| - | ===== libvirt ===== | + | vpsAdminOS provozuje VPS v kontejnerech, |
| - | Virtuály můžeš spravovat pomocí [[https:// | + | uvnitř |
| - | a připojit se k němu přes [[https://virt-manager.org|virt-manager]]. | + | hardwarovou virtualizaci fyzického nodu přímo. |
| + | Tento návod používá aktuální šablonu **Debian (latest)**, libvirt a systémové | ||
| + | spojení '' | ||
| - | ===== Mount dataset export z NAS serveru pro QEMU/KVM ===== | + | < |
| - | Pokud chceš používat v QEMU/KVM připojený dataset export z NAS serveru, například | + | Pro virtualizaci je potřeba funkce **KVM**. **TUN/TAP** je potřeba pro síťová |
| + | rozhraní virtuálních strojů typu TAP. Obě funkce jsou u nových VPS zapnuté ve | ||
| + | výchozím nastavení v sekci **Funkce** v detailu VPS ve vpsAdminu. | ||
| + | </vpsadmin-nav> | ||
| - | Například pokud používáš pro mount do systému fstab: | + | {{:cs: |
| - | 562.586.65.25:/ | + | Nainstaluj QEMU, libvirt a '' |
| - | Nově použiješ mount příkaz takto: | + | <code bash> |
| + | # | ||
| + | set -euo pipefail | ||
| - | 562.586.65.25:/ | + | apt-get update |
| + | apt-get install --yes \ | ||
| + | iptables \ | ||
| + | libvirt-clients \ | ||
| + | libvirt-daemon-system \ | ||
| + | qemu-system-x86 \ | ||
| + | qemu-utils \ | ||
| + | virtinst | ||
| - | (**//562.586.65.25//** > Adresa tvého NFS serveru; **// | + | virsh --connect qemu:///system version |
| + | </code> | ||
| - | ===== KVM na Alpine Linuxu | + | Používej systémové spojení '' |
| + | libvirt přes SSH, například '' | ||
| + | klíčem. Nezveřejňuj nešifrovaný libvirt TCP socket do internetu. | ||
| - | Připravu hypervizoru lze provést automatizovaně pomocí [[http:// | + | ===== Diskové obrazy a ZFS ===== |
| - | [[https:// | + | Pro obrazy disků použij samostatný |
| - | * [[navody: | + | vlastnosti pak můžeš změnit bez zásahu do kořenového datasetu VPS. Úložiště |
| - | * [[navody:vps: | + | připrav takto: |
| - | ==== Instalace balíčků | + | * < |
| + | * < | ||
| + | * < | ||
| - | Nainstalujte potřebné balíčky (ip6tables je volitelný): | + | Například z běžné kapacity 120 GiB můžeš ponechat 20 GiB kořenovému datasetu |
| + | a 100 GiB přidělit datasetu '' | ||
| + | můžeš přidělit například 80 GiB a ponechat 20 GiB volných pro jeho růst a | ||
| + | snapshoty. | ||
| - | <code shell> | + | Subdataset se [[navody: |
| - | apk update | + | VPS. |
| - | 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): | + | {{:cs: |
| - | < | + | Připojený adresář přidej do libvirt jako trvalý storage pool: |
| - | chown :kvm /dev/kvm | + | |
| - | chmod g+rw /dev/kvm | + | < |
| - | chown :netdev | + | # |
| - | chmod g+rw /dev/net/tun | + | set -euo pipefail |
| + | |||
| + | virsh --connect qemu:///system pool-define-as \ | ||
| + | | ||
| + | virsh --connect qemu:///system pool-start vm-images | ||
| + | virsh --connect qemu:/// | ||
| + | virsh --connect qemu:///system pool-info vm-images | ||
| </ | </ | ||
| - | Nakonfigurujte bridge pro Qemu/KVM virtuály; vytvořte soubor ///etc/network/interfaces.tail// (IP adresu si samozřejmě můžete zvolit libovolnou | + | Disky pak vytvářej prostřednictvím libvirt, '' |
| + | '' | ||
| + | |||
| + | ZFS vlastnosti subdatasetu ponech na výchozích hodnotách, dokud měření | ||
| + | neukáže důvod ke změně. Komprese je ve výchozím nastavení zapnutá. Výchozí | ||
| + | '' | ||
| + | používá i menší záznamy. Změna '' | ||
| + | vytvořených | ||
| + | |||
| + | Pro obrazy na ZFS je vhodnou výchozí volbou formát '' | ||
| + | další copy-on-write vrstvu. '' | ||
| + | files, interní snapshoty nebo jiné funkce obrazového formátu. | ||
| + | |||
| + | Podrobnosti k ladění podle zátěže popisuje [[https://openzfs.github.io/openzfs-docs/Performance%20and%20Tuning/Workload%20Tuning.html|OpenZFS Workload Tuning]], formáty obrazů pak [[https://www.qemu.org/ | ||
| + | |||
| + | ===== Síť virtuálních strojů ===== | ||
| + | |||
| + | Síťové rozhraní VPS je k nodu připojené směrovaným spojem na třetí vrstvě. | ||
| + | Nepřidávej proto rozhraní VPS do bridge spravovaného libvirt. Pro připojení | ||
| + | virtuálních strojů k síti jsou vhodná dvě zapojení: | ||
| + | |||
| + | ^ Zapojení ^ Adresy v doméně ^ Výhody ^ Nevýhody ^ | ||
| + | | NAT v libvirt | Privátní IPv4 a privátní ULA IPv6 | Funguje s běžnými adresami VPS, snadno obslouží více domén. | Příchozí služby potřebují přesměrování portů a provoz prochází NAT44 i NAT66. | | ||
| + | | Směrované veřejné adresy | Veřejná IPv4 ''/ | ||
| + | |||
| + | NAT je obvykle jednodušší pro jednu nebo několik domén s malým počtem | ||
| + | zveřejněných služeb. Směrované adresy použij, když má mít doména vlastní | ||
| + | veřejné adresy, všechny porty nebo protokoly, které se přes port forwarding | ||
| + | obsluhují špatně. Pro čistě vnitřní komunikaci mezi doménami | ||
| + | izolovanou síť libvirt; přístup ven nadále řeší jedno z uvedených zapojení. | ||
| + | |||
| + | ==== Veřejné adresy na VPS a dvouprotokolový NAT ==== | ||
| + | |||
| + | Veřejná IPv4 ''/ | ||
| + | '' | ||
| + | '' | ||
| + | NAT66. Výchozí síť '' | ||
| + | IPv4 a používá '' | ||
| + | dvouprotokolovou síť s odlišnou IPv4 podsítí. NAT66 se v XML zapíná pomocí | ||
| + | ''< | ||
| + | [[https:// | ||
| + | |||
| + | ULA '' | ||
| + | více privátních sítí později propojovat pomocí VPN nebo směrování, | ||
| + | každou z nich vlastní náhodný ULA ''/ | ||
| + | '' | ||
| + | |||
| + | Podstatnou část definice sítě tvoří následující XML: | ||
| - | < | + | < |
| - | auto br0 | + | < |
| - | iface br0 inet static | + | < |
| - | pre-up brctl addbr br0 | + | < |
| - | | + | <nat ipv6=' |
| - | netmask 255.255.255.0 | + | </ |
| - | post-down brctl delbr br0 | + | <bridge name=' |
| + | < | ||
| + | < | ||
| + | </ | ||
| </ | </ | ||
| - | Jelikož OpenVZ poněkud neohrabaně | + | Vytvořenou doménu |
| + | '' | ||
| + | nastav stabilní adresy a brány: | ||
| - | Povolte uživateli ve skupině | + | <code conf> |
| + | auto ens3 | ||
| + | iface ens3 inet static | ||
| + | address 192.168.124.10/24 | ||
| + | gateway 192.168.124.1 | ||
| - | <code shell> | + | iface ens3 inet6 static |
| - | echo "allow br0" > / | + | |
| - | chown root:qemu /etc/ | + | |
| - | chmod 0640 / | + | |
| </ | </ | ||
| - | Nastavte IP maškarádu pro přístup Qemu/KVM virtuálů ven do veřejného Internetu. | + | Přesměrování portu se skládá z DNAT na adresu domény a povolení odpovídajícího |
| + | forwardu. Pro web na IPv4 jsou podstatou například tyto dva příkazy: | ||
| - | Pokud už máte nakonfigurované | + | <code bash> |
| + | iptables | ||
| + | -j DNAT --to-destination 192.168.124.10:80 | ||
| + | iptables -t filter -I FORWARD 1 -p tcp -d 192.168.124.10 --dport 80 \ | ||
| + | -j ACCEPT | ||
| + | </ | ||
| - | < | + | Stejná pravidla je potřeba vytvořit i pomocí '' |
| - | iptables -t nat -A POSTROUTING | + | zadaná pravidla však libvirt při změnách sítě nezachová. Následující úplný |
| + | skript proto vytvoří síť, soubor s přesměrováním a hook, který pravidla obnoví | ||
| + | při spuštění nebo znovupřipojení sítě. Ve výchozím nastavení zveřejní web na | ||
| + | portu 80 a SSH domény na portu 2222 pro IPv4 i IPv6. | ||
| + | |||
| + | Ulož jej například jako ''/ | ||
| + | s jednou veřejnou IPv4 a jednou adresou z IPv6 '' | ||
| + | |||
| + | <code bash> | ||
| + | PUBLIC_IPV4=VPS_IPV4 PUBLIC_IPV6=VPS_IPV6 \ | ||
| + | / | ||
| </ | </ | ||
| - | V opačném | + | Skript se spouští |
| + | hodnot, ne po každém restartu VPS. Síť má zapnutý autostart a pravidla při jejím | ||
| + | spuštění načte hook. | ||
| + | <code bash> | ||
| + | # | ||
| + | set -euo pipefail | ||
| - | ==== Vytvoření | + | : " |
| + | : " | ||
| - | V tomto návodu předpokládám použití [[https://github.com/jirutka/qemu-openrc|qemu-openrc]] – OpenRC init skript pro startování Qemu/KVM. Na Alpine samozřejmě můžete používat i libvirt, ale opravdu chcete a potřebujete jeho neohrabané XML konfiguráky a/nebo klikátka nad ním…? ;) Qemu-openrc je výrazně jednodušší a transparentnější řešení. Každý virtuál je reprezentovaný init skriptem, stejně jako ostatní programy, můžete deklarativně nastavovat závislosti mezi virtuály atd. | + | guest_ipv4=${GUEST_IPV4: |
| + | guest_ipv6=${GUEST_IPV6: | ||
| + | host_ipv4=${HOST_IPV4: | ||
| + | host_ipv6=${HOST_IPV6: | ||
| + | connection=qemu:///system | ||
| + | network=dualstack-nat | ||
| + | hook=/etc/ | ||
| + | config=/etc/libvirt/port-forwards.conf | ||
| + | xml=$(mktemp) | ||
| + | trap 'rm -f " | ||
| - | Vytvoření nového virtálu spočívá pouze v přípravě image disku, vytvoření symlinku pro init skript a úpravě jednoduchého konfiguračního skriptu. Nechť se nový virtuál jmenuje třeba „myvirt.“ | + | network_uuid=$(virsh --connect " |
| + | uuid_element= | ||
| + | if [[ -n $network_uuid ]]; then | ||
| + | uuid_element=" | ||
| + | fi | ||
| + | cat >" | ||
| + | < | ||
| + | < | ||
| + | $uuid_element | ||
| + | <forward mode=' | ||
| + | <nat ipv6=' | ||
| + | </ | ||
| + | <bridge name=' | ||
| + | <ip address=' | ||
| + | < | ||
| + | <range start=' | ||
| + | </ | ||
| + | </ | ||
| + | <ip family=' | ||
| + | </ | ||
| + | EOF | ||
| - | Připravte raw image pro myvirt o potřebné velikosti: | + | if virsh --connect " |
| + | | grep -Fx " | ||
| + | printf '%s is active. Shut down its attached domains, run ' " | ||
| + | printf 'virsh net-destroy %s, then rerun this script.\n' | ||
| + | exit 1 | ||
| + | fi | ||
| - | <code shell> | + | install |
| - | mkdir -p /var/lib/qemu/myvirt/ | + | install |
| - | qemu-img create | + | cat >" |
| - | chown qemu:qemu /var/lib/qemu/myvirt/disk0.raw | + | #!/usr/bin/env bash |
| - | chmod 0600 /var/lib/qemu/myvirt/disk0.raw | + | set -euo pipefail |
| - | </code> | + | |
| + | PATH=/ | ||
| + | network=${1-} | ||
| + | action=${2-} | ||
| + | config=/etc/ | ||
| + | nat_chain=VPSFREE_KVM_DNAT | ||
| + | filter_chain=VPSFREE_KVM_FWD | ||
| + | |||
| + | [[ $network == dualstack-nat ]] || exit 0 | ||
| + | exec 9>/run/lock/vpsfree-kvm-port-forwards.lock | ||
| + | flock 9 | ||
| + | |||
| + | delete_jumps() { | ||
| + | local tool | ||
| + | for tool in iptables ip6tables; do | ||
| + | while " | ||
| + | " | ||
| + | done | ||
| + | while " | ||
| + | " | ||
| + | done | ||
| + | done | ||
| + | } | ||
| + | |||
| + | delete_chains() { | ||
| + | local tool | ||
| + | for tool in iptables ip6tables; do | ||
| + | if " | ||
| + | " | ||
| + | " | ||
| + | fi | ||
| + | if " | ||
| + | " | ||
| + | " | ||
| + | fi | ||
| + | done | ||
| + | } | ||
| + | |||
| + | cleanup() { | ||
| + | delete_jumps | ||
| + | delete_chains | ||
| + | } | ||
| + | |||
| + | valid_ip_address() { | ||
| + | local family=$1 address=$2 | ||
| + | |||
| + | perl -MSocket=AF_INET, | ||
| + | my ($family, $address) = @ARGV; | ||
| + | my $af = $family eq " | ||
| + | exit(defined(inet_pton($af, | ||
| + | ' " | ||
| + | } | ||
| + | |||
| + | if [[ $action == stopped ]]; then | ||
| + | cleanup | ||
| + | exit 0 | ||
| + | fi | ||
| + | [[ $action == started || $action == reconnect ]] || exit 0 | ||
| + | |||
| + | entries=() | ||
| + | while read -r family protocol public_ip public_port guest_ip guest_port extra \ | ||
| + | || [[ -n ${family:-} ]]; do | ||
| + | [[ -n ${family:-} && $family != \#* ]] || continue | ||
| + | [[ $family == ipv4 || $family == ipv6 ]] || { | ||
| + | printf ' | ||
| + | exit 1 | ||
| + | } | ||
| + | [[ $protocol == tcp || $protocol == udp ]] || { | ||
| + | printf ' | ||
| + | exit 1 | ||
| + | } | ||
| + | for address in " | ||
| + | valid_ip_address " | ||
| + | printf ' | ||
| + | " | ||
| + | exit 1 | ||
| + | } | ||
| + | done | ||
| + | [[ $public_port =~ ^[0-9]{1, | ||
| + | printf ' | ||
| + | exit 1 | ||
| + | } | ||
| + | public_port=$((10# | ||
| + | guest_port=$((10# | ||
| + | ((public_port >= 1 && public_port <= 65535)) || exit 1 | ||
| + | ((guest_port >= 1 && guest_port <= 65535)) || exit 1 | ||
| + | [[ -z ${extra:-} ]] || { | ||
| + | printf 'Too many fields in %s\n' " | ||
| + | exit 1 | ||
| + | } | ||
| + | entries+=(" | ||
| + | done <" | ||
| + | |||
| + | cleanup | ||
| + | for tool in iptables ip6tables; do | ||
| + | " | ||
| + | " | ||
| + | done | ||
| + | for entry in " | ||
| + | IFS=' | ||
| + | <<<" | ||
| + | tool=iptables | ||
| + | destination=" | ||
| + | if [[ $family == ipv6 ]]; then | ||
| + | tool=ip6tables | ||
| + | destination=" | ||
| + | fi | ||
| + | " | ||
| + | --dport " | ||
| + | " | ||
| + | --dport " | ||
| + | done | ||
| + | for tool in iptables ip6tables; do | ||
| + | " | ||
| + | " | ||
| + | done | ||
| + | HOOK | ||
| + | chmod 0755 " | ||
| - | Zkopírujte výchozí konfigurák / | + | cat >" |
| + | # RODINA PROTOKOL VEŘEJNÁ_IP VEŘEJNÝ_PORT IP_DOMÉNY PORT_DOMÉNY | ||
| + | ipv4 tcp $PUBLIC_IPV4 80 $guest_ipv4 80 | ||
| + | ipv4 tcp $PUBLIC_IPV4 2222 $guest_ipv4 22 | ||
| + | ipv6 tcp $PUBLIC_IPV6 80 $guest_ipv6 80 | ||
| + | ipv6 tcp $PUBLIC_IPV6 2222 $guest_ipv6 22 | ||
| + | EOF | ||
| - | <code shell> | + | virsh --connect " |
| - | cd /etc/conf.d | + | virsh --connect " |
| - | cp qemu qemu.myvirt | + | systemctl restart libvirtd.service |
| - | vi qemu.myvirt | + | if ! virsh --connect " |
| + | | ||
| + | virsh --connect " | ||
| + | fi | ||
| + | " | ||
| + | virsh --connect " | ||
| </ | </ | ||
| - | Zejména tedy přidejte | + | Další port přidáš do ''/ |
| + | '' | ||
| + | HTTPS dostupné na portu 8443 přidáš pro oba protokoly takto: | ||
| - | < | + | < |
| - | disk1_file="/ | + | ipv4 tcp VPS_IPV4 8443 192.168.124.10 443 |
| - | disk1_format=" | + | ipv6 tcp VPS_IPV6 8443 fd5f: |
| </ | </ | ||
| - | A zřejmě také instalační CD některé distribuce, které jste si předem stáhli: | + | Podporované protokoly jsou '' |
| + | odmítne dříve, než se změní aktivní pravidla. Po změně souboru pravidla načti: | ||
| - | < | + | < |
| - | cdrom0_file=" | + | /etc/libvirt/hooks/network.d/ |
| </ | </ | ||
| - | Vytvořte symlink pro init skript a spusťte myvirt: | + | Port 2222 byl zvolen proto, aby SSH domény nekolidovalo s SSH samotné VPS. |
| + | Pravidla firewallu VPS dále omez podle toho, kdo má mít ke službám přístup. | ||
| - | <code shell> | + | ==== Privátní IPv4 na VPS a veřejné adresy v doméně ==== |
| - | cd / | + | |
| - | ln -s qemu qemu.myvirt | + | |
| - | rc-service qemu.myvirt start | + | V tomto zapojení má VPS privátní IPv4 ''/ |
| - | </code> | + | ''/ |
| + | '' | ||
| + | VPS funguje ve vnitřní síti vpsFree.cz a na internet odchází přes NAT na našich | ||
| + | routerech; veřejné adresy domény se v libvirt nepřekládají. | ||
| - | <note important> | + | Pro IPv4 nejprve požádej podporu o přidělení privátní IPv4 ''/ |
| - | 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> | + | <vpsadmin-nav id="networking.routable-addresses.open"> |
| + | V části **Síť → Routované adresy** pak vyber veřejnou ''/ | ||
| + | **Adresa**, privátní adresu VPS v poli **Přes** a cílové rozhraní VPS. Veřejná | ||
| + | adresa se tím nenastaví na žádném rozhraní uvnitř VPS; vpsAdminOS ji k VPS | ||
| + | směruje přes privátní adresu. | ||
| + | </vpsadmin-nav> | ||
| - | stabilitu je možno otestovat iperf-em, na testovanem stroji: | + | < |
| + | Pro IPv6 použij další ''/ | ||
| + | k dispozici, a nastav její směrování přes adresu z běžné ''/ | ||
| + | máš směrovanou větší síť, například ''/ | ||
| + | samostatnou ''/ | ||
| + | bridge libvirt; například pro '' | ||
| + | '' | ||
| + | </ | ||
| - | <code shell> | + | Tok IPv4 paketů používá malou tranzitní síť pouze mezi VPS a doménou: |
| - | na hostiteli pak: | + | < |
| - | < | + | internet → veřejná /32 → VPS → 192.168.123.1/30 |
| - | iperf -c 172.17.1.X -P 20 | + | ↓ |
| + | 192.168.123.2/30 → veřejná /32 v doméně | ||
| </ | </ | ||
| - | </ | ||
| - | ==== Nastavení iptables ==== | + | V XML libvirt je veřejná IPv4 samostatná trasa přes tranzitní adresu domény. |
| + | Směrovaná IPv6 ''/ | ||
| - | Pokud nepoužíváte žádný nástroj pro generování iptables pravidel (jako např. [[https://github.com/ | + | <code xml> |
| + | < | ||
| + | < | ||
| + | <forward mode=' | ||
| + | <bridge name=' | ||
| + | <ip address=' | ||
| + | <ip family=' | ||
| + | <route family=' | ||
| + | | ||
| + | </network> | ||
| + | </ | ||
| - | Stáhněte upravenou šablonu pravidel s přidanou maškarádou pro náš bridge do / | + | Na VPS musí být povolené směrování obou protokolů: |
| - | < | + | < |
| - | rmdir / | + | sysctl |
| - | wget -O / | + | sysctl |
| </ | </ | ||
| - | Upravte konfigurák | + | Následující skript vytvoří tuto síť a uloží forwarding do |
| - | + | '' | |
| - | <code shell> | + | '' |
| - | # /etc/conf.d/iptables | + | adresou routované IPv6 '' |
| - | IPTABLES_SAVE="/ | + | <code bash> |
| - | # | + | PUBLIC_IPV4=PUBLIC_IPV4 \ |
| - | SAVE_ON_STOP=" | + | IPV6_GATEWAY=ROUTED_IPV6_PREFIX:: |
| - | IPFORWARD=" | + | / |
| </ | </ | ||
| - | …a /etc/conf.d/ip6tables (IPv6): | + | Stejně jako u NAT se skript spouští při vytvoření sítě nebo změně adres. |
| + | Autostart sítě | ||
| - | < | + | < |
| - | # /etc/conf.d/ip6tables | + | #!/usr/bin/env bash |
| + | set -euo pipefail | ||
| - | IP6TABLES_SAVE="/etc/iptables" | + | : " |
| - | SAVE_RESTORE_OPTIONS="-T filter" | + | : "${IPV6_GATEWAY:? |
| - | SAVE_ON_STOP="no" | + | |
| - | IPFORWARD="yes" | + | host_transit_ipv4=${HOST_TRANSIT_IPV4: |
| + | guest_transit_ipv4=${GUEST_TRANSIT_IPV4: | ||
| + | connection=qemu:/// | ||
| + | network=public-routed | ||
| + | forwarding_config=/etc/sysctl.d/ | ||
| + | xml=$(mktemp) | ||
| + | trap 'rm -f "$xml"' EXIT | ||
| + | |||
| + | export LC_ALL=C | ||
| + | network_uuid=$(virsh --connect | ||
| + | uuid_element= | ||
| + | if [[ -n $network_uuid ]]; then | ||
| + | uuid_element=" | ||
| + | fi | ||
| + | cat >" | ||
| + | < | ||
| + | < | ||
| + | $uuid_element | ||
| + | <forward mode=' | ||
| + | <bridge name=' | ||
| + | <ip address=' | ||
| + | <ip family=' | ||
| + | <route family=' | ||
| + | | ||
| + | </ | ||
| + | EOF | ||
| + | |||
| + | if virsh --connect " | ||
| + | | grep -Fx " | ||
| + | printf '%s is active. Shut down its attached domains, run ' " | ||
| + | printf 'virsh net-destroy %s, then rerun this script.\n' | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | install -d -m 0755 " | ||
| + | cat >" | ||
| + | net.ipv4.ip_forward = 1 | ||
| + | net.ipv6.conf.all.forwarding = 1 | ||
| + | EOF | ||
| + | sysctl --quiet --load " | ||
| + | |||
| + | virsh --connect " | ||
| + | virsh --connect " | ||
| + | virsh --connect " | ||
| + | virsh --connect " | ||
| </ | </ | ||
| - | Spusťte iptables a ip6tables a přidejte je do runlevel boot: | + | Pokud je síť již aktivní, skript ji nezmění. Vypni připojené domény, zastav |
| + | síť příkazem '' | ||
| + | opět zapni. Skript zachová UUID existující sítě. | ||
| - | < | + | Doménu připoj k '' |
| - | rc-service iptables start | + | následující konfiguraci do ''/ |
| - | rc-service ip6tables start | + | '' |
| - | rc-update add iptables boot | + | skutečnými hodnotami: |
| - | rc-update | + | |
| + | < | ||
| + | auto ens3 | ||
| + | iface ens3 inet static | ||
| + | | ||
| + | up ip address | ||
| + | up ip route replace default via 192.168.123.1 src PUBLIC_IPV4 | ||
| + | down ip address del PUBLIC_IPV4/ | ||
| + | |||
| + | iface ens3 inet6 static | ||
| + | address GUEST_IPV6/ | ||
| + | gateway IPV6_GATEWAY | ||
| </ | </ | ||
| + | '' | ||
| + | VPS. Povol jen provoz, který má být doméně dostupný, a nezapomeň na pravidla | ||
| + | pro IPv4 i IPv6. Veřejná IPv4 je nakonfigurovaná pouze v doméně. IPv6 brána a | ||
| + | adresy domén jsou z druhé, směrované ''/ | ||
| + | jen adresa z její běžné ''/ | ||
| + | NAT. | ||
| + | |||
| + | ===== Instalační ISO na NFS ===== | ||
| + | |||
| + | Instalační ISO je bezpečnější nejprve zkopírovat na lokální dataset. U staršího | ||
| + | NFSv3 exportu bez funkčního síťového zamykání může QEMU při čekání na zámek | ||
| + | uvíznout nebo skončit chybou jako '' | ||
| + | '' | ||
| + | |||
| + | Pouze pro jednoho klienta a pouze pro instalační ISO připojené pro čtení lze | ||
| + | použít '' | ||
| + | |||
| + | <code bash> | ||
| + | # | ||
| + | set -euo pipefail | ||
| + | |||
| + | : " | ||
| + | : " | ||
| + | |||
| + | mountpoint=${ISO_MOUNTPOINT: | ||
| + | install -d -m 0755 " | ||
| + | mount -t nfs -o ro, | ||
| + | " | ||
| + | |||
| + | findmnt --noheadings --output FSTYPE, | ||
| + | </ | ||
| - | ===== Kontakty ===== | + | '' |
| + | zámky. Nikdy jej nepoužívej pro zapisovatelný nebo sdílený disk virtuálního | ||
| + | stroje. U NFSv4 je zamykání součástí protokolu a tato volba není řešením. Viz | ||
| + | [[https:// | ||
| - | < | ||
| - | jirutka (Alpine Linux) | ||
| - | </ | ||