Inhaltsverzeichnis
Virtualisierung Netzwerk-Bridge
Die Definition einer Netzwerk-Bridge ist zur Kommunikation der Gast-Systeme mit z.B. dem Internet eine Möglichkeit dies zu realisieren.
Die Definition einer Netzwerk-Bridge kann auch nur zur Kommunikation der Gast-Systeme - untereinander konfiguriert werden.
WICHTIG - Die Definition einer virtuellen Bridge virbr0
und einer Bridge br0
sollte NICHT verwechselt werden !!!
Nachfolgende Schritte definieren eine Bridge br0
als zusätzliches Netzwerkinterface auf dem Host-System.
Nachfolgende Schritte definieren eine virtuelle Bridge virbr0
als zusätzliches virtuelles Netzwerkinterface auf dem Host-System.
Die Neuanlage eines Bridge br0
Netzwerkinterfaces erfolgt wie die Konfiguration einer physischen Netzwerkkarte, oder dem loopback
-Interface im Konfigurationsverzeichnis:
- /etc/sysconfig/network-scripts
Die Neuanlage eines virtuellen Brdige virbr0
Netzwerkinterfaces erfolgt bereits bei der Installation der Virtualisierungsumgebung im Konfigurationsverzeichnis:
- /etc/libvirt/qemu/networks
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
Physikalisches Interface
Nachfolgende Änderungen müssen an dem physikalischen Interface - hier in diesem Beispiel - eth0 durchgeführt werden, wodurch die Konfigurationsdatei
- /etc/sysconfig/network-scripts/ifcfg-eth0
wie nachfolgend gezeigt, angepasst werden muss:
... BRIDGE=br0 ...
Die komplette Konfigurationsdatei /etc/sysconfig/network-scripts/ifcfg-eth0
sieht dann in etwa wie nachfolgend dargestellt aus:
# NM_CONTROLLED="yes" DEVICE=eth0 HWADDR=00:64:32:16:08:8c ONBOOT=yes BRIDGE=br0
Bridge Interface: br0
HINWEIS - es soll keine IP-Adresse via DHCP vergeben werden, sondern eine feste IP-Adresse verwendet werden!!!
Host/Gast geteilte Verbindung
HINWEIS - Es soll ermöglicht werden, dass das Host-System und alle Gast-System sich z.B. die Internet-Verbindung teilen können und sowohl der
- Host ins Internet kann
- Gast ins Internet kann
Host Definitionen
Um eine Bridge br0
anzulegen, wird ebenfalls im Verzeichnis /etc/sysconfig/network-scripts/ nachfolgende Konfigurationsdatei unter Zuhilfenahme des vi
-Editors NEU erzeugt:
# vi /etc/sysconfig/network-scripts/ifcfg-br0
welche in etwa nachfolgend dargestellten Inhalt haben sollte:
DEVICE=br0 HWADDR=00:64:32:16:08:8C ONBOOT=yes IPADDR=192.168.0.5 BOOTPROTO=none NETMASK=255.255.255.240 TYPE=Bridge GATEWAY=192.168.0.1 DNS1=192.168.0.1 IPV6INIT=no USERCTL=no DELAY=0
WICHTIG - Ein Neustart der Netzwerkverbindungen ist erforderlich !!!
Der Befehl zum Neustart der Netzwerkverbindungen lautete wie nachfolgend dargestellt:
# service network restart Shutting down interface eth0: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: [ OK ] Bringing up interface br0: [ OK ]
WICHTIG - Ein Neustart des libvirtd
(Daemon) ist erforderlich !!!
# service libvirtd restart Stopping libvirtd daemon: [ OK ] Starting libvirtd daemon: [ OK ]
Zur Überprüfung, ob eine Bridge br0
erfolgreich im Host-System angelegt wurde, können nachfolgend dargestellte Befehle genutzt werden:
# ifconfig br0 Link encap:Ethernet HWaddr 00:64:32:16:08:8C inet addr:192.168.0.5 Bcast:192.168.0.15 Mask:255.255.255.240 inet6 addr: fe80::225:90ff:fe25:c48c/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:249 errors:0 dropped:0 overruns:0 frame:0 TX packets:177 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:21734 (21.2 KiB) TX bytes:28444 (27.7 KiB) eth0 Link encap:Ethernet HWaddr 00:64:32:16:08:8C inet6 addr: fe80::225:90ff:fe25:c48c/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:88489 errors:0 dropped:0 overruns:0 frame:0 TX packets:99568 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:87181470 (83.1 MiB) TX bytes:88791181 (84.6 MiB) Memory:fe9e0000-fea00000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:34397 errors:0 dropped:0 overruns:0 frame:0 TX packets:34397 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:163885800 (156.2 MiB) TX bytes:163885800 (156.2 MiB) virbr0 Link encap:Ethernet HWaddr 26:64:32:16:08:0B inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:17 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:4423 (4.3 KiB)
und
# brctl show bridge name bridge id STP enabled interfaces br0 8000.00259025c48c no eth0 virbr0 8000.000000000000 yes
Gast Definitionen
In dieser Konfiguration wird davon ausgegangen, dass ein Gast-System wie unter nachfolgendem Link beschrieben, angelegt wurde:
Das Wesentliche bei der oben genannten Anlage eines Gast-Systems, ist hier die Definition der Netzwerkkarte, welche mit dem virt-manager
bei der Erstellung des Gast-Systems durchgeführt wurden. Diese sollte wie auf nachfolgendem Bild dargestellt konfiguriert worden sein:
WICHTIG - Die Netzwerkkarte MUSS als [Host device eth0 (Bridge 'br0')] definiert worden sein!!!
Die Konfigurationsdatei /etc/sysconfig/network-scripts/ifcfg-eth0
sieht dann in etwa wie nachfolgend dargestellt aus:
DEVICE=eth0 HWADDR=52:54:00:b6:10:9a ONBOOT=yes IPADDR=192.168.0.6 BOOTPROTO=none NETMASK=255.255.255.240 TYPE=Ethernet GATEWAY=192.168.0.1 DNS1=192.168.0.1 IPV6INIT=no USERCTL=no
Zum Abschluss müssen, ausgehend davon, dass der NetworkManager
NICHT genutzt wird, die Netzwerkkarten Definitionen neu eingelesen, bzw. das Netzwerk neu gestartet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# service network restart Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: [ OK ]
Anschließend kann mit nachfolgendem Befehl überprüft werden, ob eine Verbindung zum Gateway und dadurch auch ins Internet möglich ist:
# ping -c 3 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.375 ms 64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=0.602 ms 64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=0.588 ms --- 192.168.0.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.375/0.521/0.602/0.107 ms
Nur Gast Verbindung
HINWEIS - Es soll ermöglicht werden, dass das Host-System NICHT direkt die Internet-Verbindung nutzen kann, sondern NUR alle Gast-Systeme die Internet-Verbindung nutzen können
- Host NICHT direkt ins Internet kann
- Gast NUR ins Internet kann
Host Definitionen
Um eine Bridge br0
anzulegen, wird ebenfalls im Verzeichnis /etc/sysconfig/network-scripts/ nachfolgende Konfigurationsdatei unter Zuhilfenahme des vi
-Editors NEU erzeugt:
# vi /etc/sysconfig/network-scripts/ifcfg-br0
welche in etwa nachfolgend dargestellten Inhalt haben sollte:
DEVICE=br0 HWADDR=00:64:32:16:08:8C ONBOOT=yes BOOTPROTO=none TYPE=Bridge IPV6INIT=no USERCTL=no DELAY=0
HINWEIS - Die Bridge br0
hat hier KEINE IP-Adresse!!!
WICHTIG - Ein Neustart der Netzwerkverbindungen ist erforderlich !!!
Der Befehl zum Neustart der Netzwerkverbindungen lautete wie nachfolgend dargestellt:
# service network restart Shutting down interface eth0: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: [ OK ] Bringing up interface br0: [ OK ]
WICHTIG - Ein Neustart des libvirtd
(Daemon) ist erforderlich !!!
# service libvirtd restart Stopping libvirtd daemon: [ OK ] Starting libvirtd daemon: [ OK ]
Zur Überprüfung, ob eine Bridge br0
erfolgreich im Host-System angelegt wurde, können nachfolgend dargestellte Befehle genutzt werden:
# ifconfig br0 Link encap:Ethernet HWaddr 00:64:32:16:08:8C inet6 addr: fe80::225:90ff:fe25:c48c/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:249 errors:0 dropped:0 overruns:0 frame:0 TX packets:177 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:21734 (21.2 KiB) TX bytes:28444 (27.7 KiB) eth0 Link encap:Ethernet HWaddr 00:64:32:16:08:8C inet6 addr: fe80::225:90ff:fe25:c48c/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:88489 errors:0 dropped:0 overruns:0 frame:0 TX packets:99568 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:87181470 (83.1 MiB) TX bytes:88791181 (84.6 MiB) Memory:fe9e0000-fea00000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:34397 errors:0 dropped:0 overruns:0 frame:0 TX packets:34397 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:163885800 (156.2 MiB) TX bytes:163885800 (156.2 MiB) virbr0 Link encap:Ethernet HWaddr 26:64:32:16:08:0B inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:17 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:4423 (4.3 KiB)
und
# brctl show bridge name bridge id STP enabled interfaces br0 8000.00259025c48c no eth0 virbr0 8000.000000000000 yes
Gast Definitionen
In dieser Konfiguration wird davon ausgegangen, dass ein Gast-System wie unter nachfolgendem Link beschrieben, angelegt wurde:
Das Wesentliche bei der oben genannten Anlage eines Gast-Systems, ist hier die Definition der Netzwerkkarte, welche mit dem virt-manager
bei der Erstellung des Gast-Systems durchgeführt wurden. Diese sollte wie auf nachfolgendem Bild dargestellt konfiguriert worden sein:
WICHTIG - Die Netzwerkkarte MUSS als [Host device eth0 (Bridge 'br0')] definiert worden sein!!!
Die Konfigurationsdatei /etc/sysconfig/network-scripts/ifcfg-eth0
sieht dann in etwa wie nachfolgend dargestellt aus:
DEVICE=eth0 HWADDR=52:54:00:b6:10:9a ONBOOT=yes IPADDR=192.168.0.6 BOOTPROTO=none NETMASK=255.255.255.240 TYPE=Ethernet GATEWAY=192.168.0.1 DNS1=192.168.0.1 IPV6INIT=no USERCTL=no
Zum Abschluss müssen, ausgehend davon, dass der NetworkManager
NICHT genutzt wird, die Netzwerkkarten Definitionen neu eingelesen, bzw. das Netzwerk neu gestartet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# service network restart Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: [ OK ]
Anschließend kann mit nachfolgendem Befehl überprüft werden, ob eine Verbindung zum Gateway und dadurch auch ins Internet möglich ist:
# ping -c 3 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.375 ms 64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=0.602 ms 64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=0.588 ms --- 192.168.0.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.375/0.521/0.602/0.107 ms
Virtuelles Interface
Nachfolgende Änderungen können an dem virtuellen Interface - hier in diesem Beispiel - virbr0 durch Ausführen des Befehls
# virsh net-edit dmz Network default XML configuration edited.
durchgeführt werden, wodurch die komplette Konfigurationsdatei
- /etc/libvirt/qemu/networks/dmz.xml
wie nachfolgend gezeigt, aussieht:
<network> <name>dmz</name> <uuid>ef1d3d1e-a8a1-3179-d418-799d7131f79f</uuid> <forward mode='nat'/> <bridge name='virbr0' stp='on' delay='0' /> <ip address='192.168.1.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.1.2' end='192.168.1.254' /> </dhcp> </ip> </network>
WICHTIG - Durch die automatische Anlage eines virtuellen Interfaces durch den libvirtd
, werden auch z.B. iptables
Firewall-Regeln automatisch beim starten des libvirtd
hinzugefügt, bzw. beim stoppen des libvirtd
entfernt!!!
HINWEIS - Falls Dieses Verhalten NICHT gewünscht sein sollte, bleibt nur die Möglichkeit, auf die automatische Anlage eines virtuellen Interfaces durch den libvirtd
, zu verzichten!
Bridge Interface: virbr0
HINWEIS - es soll keine IP-Adresse via DHCP vergeben werden, sondern eine feste IP-Adresse verwendet werden!!!
WICHTIG - Grundsätzlich sind keine Veränderungen an dem virtuellen Interface virbr0
durchzuführen.
Host/Gast/Gast Verbindung
Eine Verbindung zwischen dem
- Host-System - und
- Gast-System - und den
- Gast-Systemen - untereinander,
kann mit nachfolgender Konfiguration einer Netzwerkkarte, wie unter nachfolgendem Link dargestellt,
realisiert werden.
Die eigentliche Konfiguration der Netzwerkkarte des Gast-Systems, hier am Beispiel einer Netzwerkinterfaces eth1
, in der Konfigurationsdatei
- /etc/sysconfig/network-scripts/ifcfg-eth1
könnte dann wie nachfolgend gezeigt aussehen:
# NM_CONTROLLED=yes DEVICE=eth1 HWADDR=52:54:00:fa:64:e9 ONBOOT=yes IPADDR=192.168.1.10 BOOTPROTO=none NETMASK=255.255.255.0 TYPE=Ethernet GATEWAY=192.168.1.10 DNS1=192.168.1.10 IPV6INIT=no USERCTL=no
WICHTIG - Ein Neustart der Netzwerkverbindungen ist erforderlich !!!
Der Befehl zum Neustart der Netzwerkverbindungen lautete wie nachfolgend dargestellt:
# service network restart Shutting down interface eth0: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: [ OK ] Bringing up interface eth1: [ OK ]
Anschließend kann mit nachfolgendem Befehl überprüft werden, ob eine Verbindung zum z.B. Host-System möglich ist:
# ping -c 3 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.365 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.601 ms 64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.558 ms --- 192.168.1.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.363/0.511/0.592/0.103 ms
Gast-System als Gateway
WICHTIG - Diese Einstellung ist NUR auf dem GAST-SYSTEM, welches als GATEWAY fungieren soll, zu aktivieren!!!
Das nachfolgend beschriebene Masquerading, beschreibt die Nutzung eines Gast-System anstelle des Wirt-System, um als Gateway für das virtuelle Netzwerkinterface virbr0 zu fungieren.
Nochmal zum deutlicheren Verständnis,
- das Wirt-System, darf KEINE Verbindung zum Internet aufbauen
- das Gast-System, welches als Gateway fungieren soll, baut als einziges Gast-System eine Verbindung zum Internet auf
- weitere Gast-System nutzen das Gast-System, welches als Gateway fungieren soll, um eine Verbindung ins Internet aufzubauen.
IP-Forwarding
Damit verschiedene Gast-Systeme für Netzübergreifende Kommunikation z.B. Internet, einen spezielles Gast-System als Gateway nutzen können, muss die nachfolgend genannte Konfigurationsdatei
/etc/sysctl.conf
wie nachstehend beschrieben geändert werden:
VON - KEIN Masquerading auf dem Gateway (nur relevanter Ausschnitt):
# Kernel sysctl configuration file for Red Hat Linux # # For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and # sysctl.conf(5) for more details. # Controls IP packet forwarding net.ipv4.ip_forward = 0 ...
AUF - Aktives Masquerading auf dem Gateway (nur relevanter Ausschnitt):
# Kernel sysctl configuration file for Red Hat Linux # # For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and # sysctl.conf(5) for more details. # Controls IP packet forwarding net.ipv4.ip_forward = 1 ...
Firewall-Regeln
Eine Anpassung der Firewall-Regeln muss ebenfalls erfolgen, da sonst keine Verbindung eines Gast-Systems über das Gast-System, welches als Gateway fungieren soll möglich ist, muss die nachfolgend genannte Konfigurationsdatei
/etc/sysconfig/iptables
wie nachstehend beschrieben, geändert werden:
VON - STANDARD - Vorher iptables
Regelwerk:
# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
AUF - MASQUERADING - Nachher - iptables
Regelwerk:
# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *nat :PREROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -A POSTROUTING -o eth+ -j MASQUERADE COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT -A FORWARD -p icmp -j ACCEPT -A FORWARD -i lo -j ACCEPT -A FORWARD -o eth+ -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
Der Unterschied liegt einmal darin, das NAT betrieben werden muss, was nachfolgender Teil der iptables
-Regeln aussagt (nur relevanter Ausschnitt):
... *nat :PREROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -A POSTROUTING -o eth+ -j MASQUERADE ...
und das die Möglichkeit die iptables
-Kette/CHAIN - FORWARD - für die Gast-Systeme, welche nicht als Gateway fungieren, nutzbar zu machen, was in nachfolgenden iptables
-Regeln beschrieben ist (nur relevanter Ausschnitt):
... -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT -A FORWARD -p icmp -j ACCEPT -A FORWARD -i lo -j ACCEPT -A FORWARD -o eth+ -j ACCEPT ...
WICHTIG - Es muss eine Neustart des entsprechenden Gast-Systems, welches als Gateway fungieren soll, durchgeführt werden!!!