Hetzner - DokuWiki

Xen 4.6 auf Debian Stretch with multiple ipv4 and ipv6 subnet addresses

Dieses Tutorial bezieht sich auf einen Hetzner Root-Server und eine Debian Stretch 64 Bit. Es geht von einem IPv4 und einem IPv6 Subnetz sowie von einer einzelnen IPv4 Server IP aus.

Xen-Guests dieses Tutorials können beliebig viele IPv4 und IPv6 Adressen nutzen (Natürlich abhängig von den gebuchten Subnetzen) und sollen auf LVM Partitionen gespeichert werden.

Achtung: Die Server EX41/EX51 (Intel Skylake) können nur mit Xen 4.6 oder neuer betrieben werden, da die älteren Kernelimages Skylake noch nicht unterstützen! Siehe hier: [1]

Inhaltsverzeichnis

Grundsystem mit Raid1 und LVM installieren

  • Grundüberlegungen:
  • Hetzner Rescuesystem starten
  • Neuinstallation Starten:
installimage
  • Normales Debian-minimal wählen
  • Die Configdatei umschreiben:
# Ggfs Disk ausschliessen  - !!und andere disks renummerieren!!
# Raid anschalten
raid 1
raidlevel 1


#Partitionierung:
PART /boot ext4 512M
PART swap swap 16G
PART / ext4 16G
PART lvm xen-guests all
LV xen-guests backup /backup ext4 50G
  • Neu starten:
reboot
  • Non-Root user erstellen:
adduser nonroot
  • Hostname setzen
vi /etc/hostname
your-xen-host-name
  • Debian auf den neuesten Stand bringen:
aptitude update
aptitude upgrade
  • Zeitabgleich sicherstellen:
aptitude install ntp
  • Tools installieren:
aptitude install smartmontools mc locate iotop htop iftop
  • mdadm die Platten überwachen lassen:
vim /etc/mdadm/mdadm.conf
MAILADDR your-admin@domain.tld
  • rebooten
reboot


Host das Mailen beibringen

aptitude install exim4
dpkg-reconfigure exim4-config
->split: no
->Versandt über Sendezentrale smarthost
-> alles standart lassen, bis:
-> Visible Domain Name for local users: xen-host-stretch.dannhauer.info
-> ip/fqdn des Smarthost für ausgehende eMails: mail.dannhauer.info
-> root ans Postmaster recipient: admin@dannhauer.info

dann die IP des Hosts noch in im Mailserver::/etc/postfix/main.cf -> mynetworks hinterlegen (damit kein auth nötig ist) - alternativ auth mittels passwd.client nach: http://www.linuxer.onlinehome.de/apps/exim.htm - und fertig :)

Getestet werden kann das Mailen mit

mail -s testsubject empfaenger@domain.tld


Xen installieren

Dieses Tutorial bezieht sich auf Debian Stretch und Xen 4.6 mit dem libxl Toolstack und xen-tools zum einfachen Verwalten der DomUs via CLI.


Pakete installieren

  • Installieren der Xen-pakete:
aptitude install xen-linux-system-4.3.0-1-amd64 debootstrap xen-tools


Grub2 konfigurieren

Nach dem installieren von Xen ist Grub2 bereits korrekt konfiguriert, jedoch steht noch immer der Standardkernel an erster Stelle. Daher muss die Bootreihenfolge korrigiert und Grub aktualisiert werden.

mv /etc/grub.d/10_linux /etc/grub.d/50_linux
update-grub

Um RAM zu sparen wird die DOM_0 angewiesen nur 128 MB ram zu verwenden. Hierzu muss in /boot/grub/menu.lst im XEN-eintrag unter "Kernel" der Parameter "dom0_mem=128000" angehängt werden

Backup Systeme installieren

vim /etc/apt/sources.list
deb http://wertarbyte.de/apt/ ./
wget -O /etc/apt/sources.list.d/wertarbyte-apt.list http://wertarbyte.de/apt/wertarbyte-apt.list
wget -O - http://wertarbyte.de/apt/software-key.gpg | apt-key add -
aptitude update
aptitude install tartarus pbzip2 gnupg


Ordner für Guest-Kernel anlegen

Damit DomU Kernel separat liegen und bei Host-Updates der intiramfs-tools die Kernel nicht fälschelicherweise finden, soll ein Ordner für Guests Kernels angelegt werden:

mkdir /etc/xen/domU-kernels/
chown nonroot:nonroot /etc/xen/domU-kernels/


Xen-Tools

Xen-tools ist ein einfacher und robuster Toolstack zur Verwaltung (Erzeugen, Löschen,...) von Xen VMs. Es kann mit dem alten xm (Xend in pre Xen 4.6) wie auch dem neuen libxl (Xen 4.6+) umgehen.

Installieren:

aptitude install xen-tools

Defaultwerte für xen-create-image konfigurieren:

vim /etc/xen-tools/xen-tools.conf
lvm = xen-guests
install-method = debootstrap
size   = 4G      # Disk image size.
memory = 256M    # Memory size
swap   = 2G    # Swap size
# noswap = 1      # Don't use swap at all for the new system.
fs     = ext4     # use the EXT3 filesystem for the disk image.
dist   = `xt-guess-suite-and-mirror --suite` # Default distribution to install.
image  = full   # Specify sparse vs. full disk images.
gateway   = LLL.MMM.NNN.225   # IP, die in Dom0 vom Subnetz als Guest-Gateway verwendet wurde.
netmask   = 255.255.255.240
arch=amd64   # Defaultmässig werden 64Bit-Guests erzeugt
passwd = 1
hash_method = sha512

Nutzen: Xen Guests können mittels xen-create-image erzeugt und mittels xen-delete-image gelöscht werden. Alle nicht angegeben Parameter werden den obig konfigurierten Defaultparametern entnommen.


Xen Netzwerk Konfiguration

Die Philosophie von Xen ist es, dass die passende Netzwerkkonfiguration schon vorliegen muss beim Start der Guests. Um die Installation/Wartung aber zu vereinfachen, werden weiterhin die alten Xen-Netzwerkscripte verwendet, welche allerdings für ipv6 Verwendung angepasst werden müssen.

Bei der Hetzner-Art der Subnetz-Allokierung ist es leider nicht möglich ein "Bridged"-Setup zu verwenden. vServer(linux-virtualserver, Xen, vmware, etc) müssen ein sogenanntes "Routed"-Setup verwenden. Hierbei hat das Host-System bzw. die dom0 eine IP des zusätzlichen Subnetzes konfiguriert und dient für die Guests als Gateway. Die zusätzliche IP des Host-Systems muss also in den guests als Gateway konfiguriert werden.

nach:

  • Es muss XL konfiguriert werden, das Netzwerk "routed" zu konfigurieren, anstelle als "bridged" (default):
vim /etc/xen/xl.conf
#vif.default.script="vif-bridge"
vif.default.script="vif-route"


  • Routing script modifizieren damit auch IPv6 unterstützt wird:
# Backup erstellen
cp /etc/xen/scripts/vif-route /etc/xen/scripts/vif-route.org
vim /etc/xen/scripts/vif-route
#!/bin/bash
#============================================================================
# ${XEN_SCRIPT_DIR}/vif-route
#
# Script for configuring a vif in routed mode.
#
# Usage:
# vif-route (add|remove|online|offline)
#
# Environment vars:
# dev         vif interface name (required).
# XENBUS_PATH path to this device's details in the XenStore (required).
#
# Read from the store:
# ip      list of IP networks for the vif, space-separated (default given in
#         this script).
#============================================================================
dir=$(dirname "$0")
. "${dir}/vif-common.sh"
ip6_of()
{
        ip -6 addr show "$1" | perl -wane '/scope global/ && /inet6 (([0-9a-f]+:*)+)/ && print $1;'
}
dom0_ip6()
{
  local nd=${netdev:-eth0}
  local result=$(ip6_of "$nd")
  if [ -z "$result" ]
  then
        ""
  else
        echo "$result"
  fi
}
is_ipv6()
{
        echo "$1" | perl -wane '/:/ && print "yes"'
}
main_ip=$(dom0_ip)
main_ip6=$(dom0_ip6)
case "${command}" in
    online)
        log info "[vif-route] online request, ip ${ip} with main_ip ${main_ip} and main_ip6 ${main_ip6} for $dev."
        ifconfig ${dev} ${main_ip} netmask 255.255.255.255 up
        if [ ! -z "${main_ip6}" ]; then
                ip -6 addr add ${main_ip6} dev ${dev}
                echo 1 >/proc/sys/net/ipv6/conf/${dev}/proxy_ndp
        fi
        echo 1 >/proc/sys/net/ipv4/conf/${dev}/proxy_arp
        ipcmd='add'
        cmdprefix=
        ;;
    offline)
        do_without_error ifdown ${dev}
        ipcmd='del'
        cmdprefix='do_without_error'
        ;;
esac
if [ "${ip}" ] ; then
    # If we've been given a list of IP addresses, then add routes from dom0 to
    # the guest using those addresses.
    for addr in ${ip} ; do
        result=$(is_ipv6 "${addr}")
        if [ -z "${result}" ] ; then
                log info "[vif-route] Adding IPv4 address ${addr} with src ${main_ip} for $dev."
              result=`${cmdprefix} ip route ${ipcmd} ${addr} dev ${dev} src ${main_ip} 2>&1`
                log info "[vif-route] Result: ${result}"
        else
                log info "[vif-route] Adding IPv6 address ${addr} with src ${main_ip6} for $dev."
              result=`${cmdprefix} ip -6 route ${ipcmd} ${addr} dev ${dev} src ${main_ip6} 2>&1`
                log info "[vif-route] Result: ${result}"
                 log info "[vif-route] Adding IPv6 proxy ${addr} on ${netdev:-eth0}."
              result=`${cmdprefix} ip -6 neighbor ${ipcmd} proxy ${addr} dev ${netdev:-eth0} 2>&1`
                 log info "[vif-route] Result: ${result}"
        fi
    done
fi
handle_iptable
call_hooks vif post
log debug "Successful vif-route ${command} for ${dev}."
if [ "${command}" = "online" ]
then
  success
fi


  • IPv4 und IPv6 Routing Einstellungen im Host-Kernel vornehmen:
# Settings persistent speichern (erst nach Reboot aktiv)
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
echo 'net.ipv4.conf.all.rp_filter=1' >> /etc/sysctl.conf
echo 'net.ipv4.conf.default.proxy_arp=1' >> /etc/sysctl.conf
echo 'net.ipv4.icmp_echo_ignore_broadcasts=1' >> /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding=1' >> /etc/sysctl.conf
echo 'net.ipv6.conf.all.proxy_ndp=1' >> /etc/sysctl.conf
# Settings temporär setzen um reboot zu sparen
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv4.conf.all.rp_filter=1
sysctl -w net.ipv4.conf.default.proxy_arp=1
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
sysctl -w net.ipv6.conf.all.forwarding=1
sysctl -w net.ipv6.conf.all.proxy_ndp=1


IPv4 und IPv6 Routing der Hetzner-Subnetze zu den Xen-Guests

Dieses Tutorial nimmt die folgenden IP-Adressen von Hetzner an. Das Vorgehen ist an die eigenen IP-Adressen/Netze anzupassen:

IPv4 einzel-IP:
Einzelne Server-IP: AAA.BBB.CCC.DDD         (Hetzners org. interfaces file)
Broadcast der einzelnen IP: AAA.BBB.CCC.EEE (Hetzners org. interfaces file)
Netmask der einzelnen IP: FFF.GGG.HHH.III   (Hetzners org. interfaces file)
Gateway der einzelnen IP: WWW.XXX.YYY.ZZZ   (Hetzners org. interfaces file)
Ipv4 Subnetz
Subnetz: LLL.MMM.NNN.224 /28 (gateway/netzwerk)
Subnetz-Maske: 255.255.255.240
Subnetz-Broadcast: LLL.MMM.NNN.239
Verwendbare IP-Adressen:
LLL.MMM.NNN.225 		(1. Nutzbare IP, stellt den Gateway für die Guests dar.)
LLL.MMM.NNN.226 bis LLL.MMM.NNN.238 für die Xen-Guests.
IPv6 Netz (fiktiv!):
IPs: 2a01:4f8:AAAA::BBBB:: /64
Gateway: fe80::1 (link local)
Verwendbare IP-Adressen:
2a01:4f8:AAAA::BBBB::1 (Xen-Host)
2a01:4f8:AAAA::BBBB::2 bis 2a01:4f8:AAAA::BBBB:ffff:ffff:ffff:ffff  für die Xen-Guests


  • Adress Setup am Xen-Host

Das orginale von Hetzners Installscript angelegte "interfaces" file sollte gesichert werden, da einige Daten daraus benötigt werden.

cp /etc/network/interfaces /etc/network/interfaces.org
vim /etc/network/interfaces
### Hetzner Online AG - installimage
# Loopback device:
auto lo
iface lo inet loopback
# device: eth0
auto eth0
iface eth0 inet static
  # "Erste" IP des Servers:
  address   AAA.BBB.CCC.DDD
  broadcast AAA.BBB.CCC.EEE
  netmask   FFF.GGG.HHH.III
  # Von Hetzner für den Server angegebener Gateway
  gateway   WWW.XXX.YYY.ZZZ
  # Ebenfalls die GW Adresse
  pointopoint WWW.XXX.YYY.ZZZ
  # Erste Nutz-IP aus dem Subnetz, die aus Guest-Sicht den Gatway darstellt. Die Netmask hängt von der Subnetzgröße ab.
  up ip addr add LLL.MMM.NNN.225/28  dev eth0
 # default route to access subnet (added by hetzner installimage script)
 up route add -net AAA.BBB.CCC.0 netmask FFF.GGG.HHH.III gw WWW.XXX.YYY.ZZZ eth0
 # Hier die IPv6-Adresse des Xen-Hosts hinzufügen lassen
 up /sbin/ip -6 addr add 2a01:4f8:AAAA::BBBB::1/64 dev eth0
 # Route für das Gateway via eth0 hinzufügen
 up /sbin/ip -6 route add default via fe80::1 dev eth0
 # Für Virtualisierung: Deaktivieren des Feature Offloads (Aufgabendelegation an die NIC, denn der virtuelle Traffic durchläuft die NIC niemals)
 post-up  ethtool -K eth0 tx off


Sicherheitskonzept

Diese Liste soll nur als Starter dienen: Der Xen Host sollte definitiv gut abgesichert sein!

  • Auf dem Xen Host sollten nur die nötigsten Dienste laufen.
  • Fail2ban
  • rkhunter
  • ggfs SSH Port verlegen
  • SSH Config: PermitRootLogin auf no oder without-password setzen


Backups

Backups können auf LVM-Ebene sehr bequem getätigt werden, während die Guests laufen. Grundidee:

  • Snapshot des Guests erstellen
  • Snapshot bereinigen (fscheck)
  • Snapshot wegsichern
  • Snapshot entfernen

Diese Schritte können bequem z.b. mittels Tartarus durchgeführt werden.



© 2018. Hetzner Online GmbH. Alle Rechte vorbehalten.