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:
Die Neuanlage eines virtuellen Brdige virbr0
Netzwerkinterfaces erfolgt bereits bei der Installation der Virtualisierungsumgebung im Konfigurationsverzeichnis:
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:
Nachfolgende Änderungen müssen an dem physikalischen Interface - hier in diesem Beispiel - eth0 durchgeführt werden, wodurch die Konfigurationsdatei
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
HINWEIS - es soll keine IP-Adresse via DHCP vergeben werden, sondern eine feste IP-Adresse verwendet werden!!!
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
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
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
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
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
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
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
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!
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.
Eine Verbindung zwischen dem
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
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
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,
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 ...
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!!!