Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:kvm:network1 [02.08.2011 09:24. ] – 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:// | ||
+ | |||