Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| centos:kvm:network1 [08.08.2011 20:21. ] – [Konfigurationen] django | centos:kvm:network1 [20.05.2021 12:41. ] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== virtuelle Netzwerke mit QEMU/KVM unter CentOS 6 ====== | ||
| + | Nach der [[centos: | ||
| + | ===== vHost mit NAT ===== | ||
| + | Die Einfachste Variante für die Vernetzung und Anbindung der virtuellen Gastsysteme ist die Nutzung von NAT((**N**etwork **A**dress **T**ranslation)) mit Hilfe von **libvirt**. | ||
| + | ==== Netzwerkbeispiel / -übersicht ==== | ||
| + | Diese einfache Variante der Vernetzung, die uns die Basisinstallation von Haus aus mitbringt, zeigt beispielshaft die nachfolgende Graphik. | ||
| + | |||
| + | <uml> | ||
| + | |||
| + | state Switch { | ||
| + | Switch : Physikalischer Netzwerk-Switch | ||
| + | Switch : Netz 192.168.100.0/ | ||
| + | } | ||
| + | |||
| + | state Wirt_System { | ||
| + | | ||
| + | state vSwitch { | ||
| + | vSwitch : virbr0 | ||
| + | vSwitch : ============================= | ||
| + | vSwitch : Link encap: | ||
| + | vSwitch : Hardware Adresse B1: | ||
| + | vSwitch : inet Adresse: | ||
| + | vSwitch : Bcast: | ||
| + | vSwitch : Maske: | ||
| + | } | ||
| + | |||
| + | vSwitch -down-> Switch | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | ==== Konfigurationen ==== | ||
| + | Auf unserem Wirt finden also breits unser //default virtual network//, welches wir bei der Standardinstallation von [[http:// | ||
| + | |||
| + | Ein Blick "unter die Haube" zeigt uns auch das entsprechende Netzwerk an. | ||
| + | |||
| + | # ip addr | ||
| + | < | ||
| + | link/ | ||
| + | inet 127.0.0.1/8 scope host lo | ||
| + | inet6 ::1/128 scope host | ||
| + | | ||
| + | 2: eth0: < | ||
| + | link/ether 00: | ||
| + | inet 192.168.101.233/ | ||
| + | inet6 fe80:: | ||
| + | | ||
| + | 3: eth1: < | ||
| + | link/ether 00: | ||
| + | 4: virbr0: < | ||
| + | link/ether fe: | ||
| + | inet 192.168.122.1/ | ||
| + | </ | ||
| + | Neben dem loopbackdevice und den beiden physikalischen Netzwerkschnittstellen unseres Wirtsystems haben wir also bereits das Netzwerkgerät **virbr0** in unserem System. | ||
| + | |||
| + | Mit **virsh** können wir auch überprüfen, | ||
| + | # virsh net-list --all | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | Sobald unser //default network// läuft, sehen wir unsere Netzwerk-Bridge, | ||
| + | |||
| + | # brctl show | ||
| + | |||
| + | | ||
| + | | ||
| + | ===== vHost mit bridged NIC ===== | ||
| + | ==== Netzwerkbeispiel / -übersicht ==== | ||
| + | <uml> | ||
| + | |||
| + | state Switch { | ||
| + | Switch : Physikalischer Netzwerk-Switch | ||
| + | Switch : Netz 192.168.100.0/ | ||
| + | } | ||
| + | |||
| + | state CentOS_6_Wirt_System { | ||
| + | | ||
| + | state vSwitch { | ||
| + | vSwitch : virtuelle Netzwerkswitch | ||
| + | vSwitch : mit NAT (virbr0) | ||
| + | vSwitch : ------------------------------------------- | ||
| + | vSwitch : Link encap: | ||
| + | vSwitch : Hardware Adresse FE: | ||
| + | vSwitch : inet Adresse: | ||
| + | vSwitch : Bcast: | ||
| + | vSwitch : Maske: | ||
| + | vSwitch : DHCP-Range: 192.168.122.100-254 | ||
| + | } | ||
| + | | ||
| + | state vml000010 { | ||
| + | vml000010 : vml000010.nausch.org | ||
| + | vml000010 : ------------------------------------------- | ||
| + | vml000010 : CPU: 1 | ||
| + | vml000010 : RAM: 1024/512 MB | ||
| + | vml000010 : HD: 10240 MB | ||
| + | vml000010 : Imageformat qcow2 | ||
| + | vml000010 : ------------------------------------------- | ||
| + | vml000010 : Link encap: | ||
| + | vml000010 : Hardware Adresse 52: | ||
| + | vml000010 : inet Adresse: | ||
| + | vml000010 : Uplink direkt an Switch via br0 | ||
| + | |||
| + | } | ||
| + | |||
| + | vSwitch -down-> Switch | ||
| + | vml000010 -down-> Switch | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | ==== Konfigurationen ==== | ||
| + | Auf unserem [[centos: | ||
| + | - **eth0** : Unser Interface für die NAT-Anbindung von virtuellen Maschinen | ||
| + | - **eth1** : Die Netzwerkschnittstelle die wir für das gebridgde Netzwerk verwenden | ||
| + | - **IPMI** : Netzwerk-Port füf das Managemnt via IPMI (Webbrowser und/oder SSH) | ||
| + | === eth1 === | ||
| + | Die Konfiguration des Bridging-Interfaces nehmen wir direkt an der Konfikuartionsdatei im Verzeichnis // | ||
| + | # vim / | ||
| + | < | ||
| + | DEVICE=" | ||
| + | HWADDR=00: | ||
| + | ONBOOT=" | ||
| + | BRIDGE=br0 | ||
| + | MTU=9000 | ||
| + | </ | ||
| + | === br0 === | ||
| + | Für die Verknüpfung der physikalischen Netzwerkschnittstelle **eth1** des Wirt-Systemes mit einer virtuellen Netzwerkschnittstelle eines Gastsystems/ | ||
| + | # vim / | ||
| + | < | ||
| + | DEVICE=br0 | ||
| + | TYPE=Bridge | ||
| + | ONBOOT=yes | ||
| + | DELAY=0 | ||
| + | </ | ||
| + | === Aktivierung === | ||
| + | Nach Definition der beiden Netzwerkschnittstellen aktivieren wir das geänderte bzw. des neu erstellte Netzwerkgerät, | ||
| + | # service network restart | ||
| + | Damit nun auch noch die Virtualisierungs-API // | ||
| + | # service libvirtd restart | ||
| + | Neben dem bereits vorhandenem Netzwerkgerät **virbr0** aus unserer Standardkonfigurationsumgebung [[centos: | ||
| + | # ip addr | ||
| + | < | ||
| + | link/ | ||
| + | inet 127.0.0.1/8 scope host lo | ||
| + | inet6 ::1/128 scope host | ||
| + | | ||
| + | 2: eth0: < | ||
| + | link/ether 00: | ||
| + | inet 192.168.10.13/ | ||
| + | inet6 fe80:: | ||
| + | | ||
| + | 3: eth1: < | ||
| + | link/ether 00: | ||
| + | inet6 fe80:: | ||
| + | | ||
| + | 4: br0: < | ||
| + | link/ether 00: | ||
| + | inet 192.168.10.212/ | ||
| + | inet6 fe80:: | ||
| + | | ||
| + | 5: virbr0: < | ||
| + | link/ether ca: | ||
| + | inet 192.168.122.1/ | ||
| + | </ | ||
| + | Über das Device **br0** haben nun die vHOSTS einen direkten Zugriff auf die Netzwerk-Schnittstelle **eth1** auf unserem Server. Diese Schnittstelle werden wir dann in einer späteren Konfigurationsschritt als Uplink zu unserem ISP benutzen. | ||
| + | Unsere nunmehr beiden Bridges könen wir auch mit Hilfe der Ethernet Bridge Ddministration Tools **brctl** aus dem RPM-Paket **bridge-utils** abfragen. | ||
| + | # brctl show | ||
| + | < | ||
| + | br0 | ||
| + | vnet0 | ||
| + | virbr0 | ||
| + | </ | ||
| + | |||
| + | ===== vHosts mit bridged NIC und interner Bridge ===== | ||
| + | Als weitere Steigerung zum vorgenannten Konfigurationsbeispiel, | ||
| + | ==== Netzwerkbeispiel / -übersicht ==== | ||
| + | <uml> | ||
| + | |||
| + | state Switch { | ||
| + | Switch : Physikalischer Netzwerk-Switch | ||
| + | Switch : Netz 192.168.100.0/ | ||
| + | } | ||
| + | |||
| + | state CentOS_6_Wirt_System { | ||
| + | | ||
| + | state vSwitch { | ||
| + | vSwitch : virtueller Netzwerkswitch | ||
| + | vSwitch : mit NAT (virbr0) | ||
| + | vSwitch : ------------------------------------------- | ||
| + | vSwitch : Link encap: | ||
| + | vSwitch : Hardware Adresse FE: | ||
| + | vSwitch : inet Adresse: | ||
| + | vSwitch : Bcast: | ||
| + | vSwitch : Maske: | ||
| + | vSwitch : DHCP-Range: 192.168.122.100-254 | ||
| + | } | ||
| + | |||
| + | state brdmz { | ||
| + | brdmz : virtueller Netzwerkswitch | ||
| + | brdmz : nur innerhalb der DMZ (brdmz) | ||
| + | brdmz : ------------------------------------------- | ||
| + | brdmz : Link encap: | ||
| + | brdmz : Netz: | ||
| + | brdmz : statische IP-Adressvergabe | ||
| + | } | ||
| + | | ||
| + | state vml000010 { | ||
| + | vml000010 : vml000010.nausch.org | ||
| + | vml000010 : ------------------------------------------- | ||
| + | vml000010 : CPU: 1 | ||
| + | vml000010 : RAM: 1024/512 MB | ||
| + | vml000010 : HD: 10240 MB | ||
| + | vml000010 : Imageformat qcow2 | ||
| + | vml000010 : ------------------------------------------- | ||
| + | vml000010 : Link encap: | ||
| + | vml000010 : Hardware Adresse 52: | ||
| + | vml000010 : inet Adresse: | ||
| + | vml000010 : Uplink direkt an Switch via br0 | ||
| + | vml000010 : ------------------------------------------- | ||
| + | vml000010 : Link encap: | ||
| + | vml000010 : Hardware Adresse 52: | ||
| + | vml000010 : inet Adresse: | ||
| + | vml000010 : Uplink an interne DMZ-Bridge (brdmz) | ||
| + | } | ||
| + | | ||
| + | state vml000020 { | ||
| + | vml000020 : vml000020.nausch.org | ||
| + | vml000020 : ------------------------------------------- | ||
| + | vml000020 : CPU: 1 | ||
| + | vml000020 : RAM: 1024/512 MB | ||
| + | vml000020 : HD: 10240 MB | ||
| + | vml000020 : Imageformat qcow2 | ||
| + | vml000020 : ------------------------------------------- | ||
| + | vml000020 : Link encap: | ||
| + | vml000020 : Hardware Adresse 52: | ||
| + | vml000020 : inet Adresse: | ||
| + | vml000020 : default Gateway: 10.0.0.10 | ||
| + | vml000020 : Uplink nur an interne DMZ-Bridge (brdmz) | ||
| + | | ||
| + | } | ||
| + | |||
| + | brdmz -down-> vml000010 | ||
| + | brdmz -right-> vml000020 | ||
| + | vSwitch -down-> Switch | ||
| + | vml000010 -down-> Switch | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | ==== Konfigurationen am Wirtsystem ==== | ||
| + | === brdmz === | ||
| + | Neben dem Interface **br0** aus dem vorgenannten [[centos: | ||
| + | # vim / | ||
| + | < | ||
| + | DEVICE=brdmz | ||
| + | TYPE=Bridge | ||
| + | ONBOOT=yes | ||
| + | DELAY=0 | ||
| + | </ | ||
| + | === Aktivierung === | ||
| + | Für die Aktivierung des neuen Netzwerkinterfaces starten wir nun den Dienst **network** und auch den Dienst **libvirt** einmal durch. | ||
| + | # service network restart && service libvirtd restart | ||
| + | Für die Weiterleitung der IP-Pakete durch die Bridge erweiteren wir noch unseren Paketfilterregelsatz. | ||
| + | # iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT | ||
| + | Anschließend speichern wir die gänderten // | ||
| + | # service iptables save | ||
| + | | ||
| + | Neben dem bereits vorhandenem Netzwerkgerät **virbr0** aus unserer Standardkonfigurationsumgebung [[centos: | ||
| + | < | ||
| + | 1: lo: < | ||
| + | link/ | ||
| + | inet 127.0.0.1/8 scope host lo | ||
| + | inet6 ::1/128 scope host | ||
| + | | ||
| + | 2: eth0: < | ||
| + | link/ether 00: | ||
| + | inet 192.168.10.13/ | ||
| + | inet6 fe80:: | ||
| + | | ||
| + | 3: eth1: < | ||
| + | link/ether 00: | ||
| + | inet6 fe80:: | ||
| + | | ||
| + | 4: br0: < | ||
| + | link/ether 00: | ||
| + | inet 192.168.10.212/ | ||
| + | inet6 fe80:: | ||
| + | | ||
| + | 5: brdmz: < | ||
| + | link/ether fe: | ||
| + | inet6 fe80:: | ||
| + | | ||
| + | 6: virbr0: < | ||
| + | link/ether ca: | ||
| + | inet 192.168.122.1/ | ||
| + | </ | ||
| + | Über das Device **br0** haben nun die vHOSTS einen direkten Zugriff auf die Netzwerk-Schnittstelle **eth1** auf unserem Server. Diese Schnittstelle werden wir dann in einer späteren Konfigurationsschritt als Uplink zu unserem ISP benutzen. Das Device **brdmz** nutzen wir nun ausschließlich für die Vernetzung der betreffenden DMZ-vHOSTS in unserer Virtualiiserungsumgebung. | ||
| + | Die drei Bridges könen wir auch mit Hilfe der Ethernet Bridge Ddministration Tools **brctl** aus dem RPM-Paket **bridge-utils** abfragen. | ||
| + | # brctl show | ||
| + | < | ||
| + | br0 | ||
| + | vnet0 | ||
| + | brdmz | ||
| + | vnet2 | ||
| + | virbr0 | ||
| + | </ | ||
| + | ==== Konfigurationen auf dem Gastsystem ==== | ||
| + | === Erstellen einer zweiten Netzwerkkarte === | ||
| + | Unser vHOST der die Trennung der DMZ-Umgebung mit der Außenwelt herstellt, definieren wir uns bei der Installation einfach eine weitere Netzwerkschnittstelle. Beim letzten Konfigurationsfenster beim Anlegen eines neuen vHOSTs wählen wir nun unter dem Punkt **Erweiterete Optionen** unser Bridge **br0** an, da der Host eine direkte Verbindung zur eth1 des Wirt-systemes bekommen soll. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Weiterhin setzen wir noch das Häkchen bei **Konfig__u__ration vor der Instalation anpassen**, weil wirgleich noch eine weitere Netzwerkschnittstelle für den internen virtuellen Switch **brdmz** definieren möchten. Auf dem folgenden Fenster wählen wir dann die Schaltfläche **Har__d__ware hinzufügen**. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Da wir eine neue Netzwerkkarte hinzufügen möchten fällt die nachfolgende Auswahl nicht schwer. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Auf dem nun folgenden Konfigurationsfenster wäheln wir bei dem Punkt **__H__ost Gerät** unseren internen Switch **brdmz** aus, da die weitere Netzwerkschnittstelle mit dieser verbunden werden soll. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Zu guter letzt werden un nochmals alle relevanten Konfigurationsdaten unserer zweiten virtuellen Netzwerkkarte angezeigt. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Anschließend beenden wir die Konfiguration mit einem //klick// auf den grünen Haken **Installation abschließen** links oben und beginnen wir gewohnt mit der Installation unseres Gast-Betriebssystemes. | ||
| + | === Konfiguration an vHOST === | ||
| + | Da wir auf die Dienste des NetworkManagers auf unserem virtuellen Serversystem verzichten, bearbeiten wir unsere Netzwerkschnittstellen wie gewohnt direkt im System. | ||
| + | == eth0 (untrust network) == | ||
| + | Für die Anbindung an die Außenwelt benutzen wir die bei der Installation festgelegten Netzwerkschnittstelle **eth0**, welche die Verbindung zur Außenwelt (untrusted network) herstellt. | ||
| + | # vim / | ||
| + | < | ||
| + | NM_CONTROLLED=" | ||
| + | ONBOOT=yes | ||
| + | HWADDR=52: | ||
| + | TYPE=Ethernet | ||
| + | BOOTPROTO=dhcp | ||
| + | DEFROUTE=yes | ||
| + | PEERDNS=yes | ||
| + | PEERROUTES=yes | ||
| + | IPV4_FAILURE_FATAL=yes | ||
| + | IPV6INIT=no | ||
| + | NAME=" | ||
| + | UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 | ||
| + | </ | ||
| + | == eth1 (trusted network) == | ||
| + | Die Verbindung zu unserem vertrauenswürdigen interenen Netzwerk ermöglichen wir über die zweite Netzwerkschnittstelle **eth1** die wir bei der Definition unseres vHOSTs mit der Bridge **brdmz** verbunden hatten. | ||
| + | # vim / | ||
| + | < | ||
| + | NM_CONTROLLED=" | ||
| + | ONBOOT=yes | ||
| + | TYPE=Ethernet | ||
| + | BOOTPROTO=none | ||
| + | IPADDR=10.0.0.10 | ||
| + | PREFIX=24 | ||
| + | DNS1=192.168.10.1 | ||
| + | DOMAIN=dmz.nausch.org | ||
| + | DEFROUTE=yes | ||
| + | IPV4_FAILURE_FATAL=yes | ||
| + | IPV6INIT=no | ||
| + | NAME=" | ||
| + | UUID=9c92fad9-6ecb-3e6c-eb4d-8a47c6f50c04 | ||
| + | HWADDR=52: | ||
| + | </ | ||
| + | == Port Forwarding und iptables Regeln == | ||
| + | Damit unser neuer vHOST nun die IP-Pakete auds dem internen Netzwerk **brdmz** auch an die Schnittstelle **eth0**, also zum //untrusted Netwok// weiterreichen kann, aktivieren wir noch das Portforwarding für IPv4, indem wir in die betreffende Konfigurationsdatei einfach eine **logische 1** eintragen. | ||
| + | # vim / | ||
| + | < | ||
| + | # | ||
| + | # For binary values, 0 is disabled, 1 is enabled. | ||
| + | # sysctl.conf(5) for more details. | ||
| + | |||
| + | # Controls IP packet forwarding | ||
| + | # Django | ||
| + | # default : net.ipv4.ip_forward = 0 | ||
| + | net.ipv4.ip_forward = 1 | ||
| + | |||
| + | # Controls source route verification | ||
| + | net.ipv4.conf.default.rp_filter = 1 | ||
| + | |||
| + | # Do not accept source routing | ||
| + | net.ipv4.conf.default.accept_source_route = 0 | ||
| + | |||
| + | # Controls the System Request debugging functionality of the kernel | ||
| + | kernel.sysrq = 0 | ||
| + | |||
| + | # Controls whether core dumps will append the PID to the core filename. | ||
| + | # Useful for debugging multi-threaded applications. | ||
| + | kernel.core_uses_pid = 1 | ||
| + | |||
| + | # Controls the use of TCP syncookies | ||
| + | net.ipv4.tcp_syncookies = 1 | ||
| + | |||
| + | # Disable netfilter on bridges. | ||
| + | net.bridge.bridge-nf-call-ip6tables = 0 | ||
| + | net.bridge.bridge-nf-call-iptables = 0 | ||
| + | net.bridge.bridge-nf-call-arptables = 0 | ||
| + | </ | ||
| + | Die beiden Themen // | ||
| + | * **Masquerading** '' | ||
| + | * **IP Forwarding (// | ||
| + | * **IP Forwarding (// | ||
| + | Beides tragen wir nun in unsere Konfigurationsdatei des Paketfilters iptables ein. | ||
| + | # vim / | ||
| + | < | ||
| + | # Manual customization of this file is not recommended. | ||
| + | *nat | ||
| + | :PREROUTING ACCEPT [0:0] | ||
| + | :OUTPUT ACCEPT [0:0] | ||
| + | : | ||
| + | # Django : 2011-08-04 Masquerading aktiviert | ||
| + | -A POSTROUTING -o eth0 -j MASQUERADE | ||
| + | # Django : end | ||
| + | COMMIT | ||
| + | *filter | ||
| + | :INPUT ACCEPT [0:0] | ||
| + | :FORWARD ACCEPT [0:0] | ||
| + | :OUTPUT ACCEPT [0:0] | ||
| + | -A INPUT -m state --state ESTABLISHED, | ||
| + | -A INPUT -p icmp -j ACCEPT | ||
| + | -A INPUT -i lo -j ACCEPT | ||
| + | -A INPUT -i eth1 -j ACCEPT | ||
| + | -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT | ||
| + | -A FORWARD -m state --state ESTABLISHED, | ||
| + | -A FORWARD -p icmp -j ACCEPT | ||
| + | -A FORWARD -i lo -j ACCEPT | ||
| + | # Django : 2011-08-04 Portforwarding aktiviert eth0 = untrusted und eth1 trusted | ||
| + | -A FORWARD -i eth0 -o eth1 -m state --state RELATED, | ||
| + | -A FORWARD -i eth1 -o eth0 -j ACCEPT | ||
| + | # Django : end | ||
| + | -A INPUT -j REJECT --reject-with icmp-host-prohibited | ||
| + | -A FORWARD -j REJECT --reject-with icmp-host-prohibited | ||
| + | COMMIT | ||
| + | </ | ||
| + | Anschließend aktivieren wir unser geändertes Regelwerk durch einen Neustart des Systemdienstes // | ||
| + | |||
| + | Sobald nun weitere vHOSTs über die interne Netzwerk-Bridge **brdmz** aktiviert werden, können diese über unseren Firewall-HOST Daten nach außen schicken und natürlich auch die gewünschten Antwortpakete empfangen. | ||
| + | ====== Links ====== | ||
| + | * **[[centos: | ||
| + | * **[[wiki: | ||
| + | * **[[http:// | ||
| + | |||