Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:virtualisierung_netzwerk-bridge

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:

New VM - Schritt 5 - Advanced options - Netzwerkkarte

:!: 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:

New VM - Schritt 5 - Advanced options - Netzwerkkarte

:!: 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!!!

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
tachtler/virtualisierung_netzwerk-bridge.txt · Zuletzt geändert: 2012/05/08 22:32 von klaus