VM über br0 Netzwerk geben

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

VM über br0 Netzwerk geben

Beitrag von Exxter » 25.11.2016 07:04:07

Hallo,

ich habe einen root-Server bei Strato. Auf diesem habe ich eine VM mit KVM und nochmal Debian 8 als Gast eingerichtet. Aber ich bekomme die Netzwerkkonfiguration des Gastes nicht hin. Da Strato genau wie Hetzner MAC-Adressen filtert, nutzte ich folgende Anleitungen:

https://wiki.hetzner.de/index.php/KVM_m ... e_easy_way
https://wiki.hetzner.de/index.php/KVM_m ... us_Subnetz

Die /etc/network/interfaces des Hosts:

Code: Alles auswählen

# The loopback network interface
auto lo br0
iface lo inet loopback

iface br0 inet dhcp

bridge_ports eth0
up route add -host IP.VOM.GAS.T dev br0
Auf dem Gast;

Code: Alles auswählen

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#allow-hotplug eth0
#iface eth0 inet dhcp

auto eth0
iface eth0 inet static
        address IP.VOM.GAS.T
        netmask 255.255.255.255
        gateway IP.VOM.HOS.T
        pointopoint IP.VOM.HOS.T
route -n auf dem Gast:

Code: Alles auswählen

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         IP.VOM.HOS.T  0.0.0.0         UG    0      0        0 eth0
IP.VOM.HOS.T  0.0.0.0         255.255.255.255 UH    0      0        0 eth0
route -n beim Host:

Code: Alles auswählen

Kernel-IP-Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
0.0.0.0         81.169.xxx.xxx    0.0.0.0         UG    0      0        0 br0
81.169.xxx.xxx    0.0.0.0         255.255.255.255 UH    0      0        0 br0
IP.VOM.GAS.T     0.0.0.0         255.255.255.255 UH    0      0        0 br0
In der /etc/sysctl.conf vom Host ist gesetzt:

Code: Alles auswählen

net.ipv4.conf.all.send_redirects = 0
net.ipv4.ip_forward=1
Habe den Dienst mit "sysctl --system" die Einstellungen neu einlesen lassen.

Auf dem Host habe ich Internet, dort funktioniert alles. Doch der Gast kann keine IP's pingen, auch nicht die vom Host. Hat jemand eine Idee, was hier noch faul ist?

trg2889
Beiträge: 137
Registriert: 01.07.2015 08:45:36

Re: VM über br0 Netzwerk geben

Beitrag von trg2889 » 25.11.2016 08:30:28

Vielleicht mal die FAQ von strato bemühen. Ist zwar für Debian 6 aber dürfte funktionieren
https://www.strato.de/faq/article/1611/ ... ebian.html

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: VM über br0 Netzwerk geben

Beitrag von Exxter » 25.11.2016 09:02:51

Danke für den Tip. Habe ich exakt so umgesetzt. Auf ttyS0 kommt:

Code: Alles auswählen

[180545.674297] IPv4: martian source 81.xxx.xxx.xxx from 81.xxx.xxx.xxx, on dev vnet0
[180545.689462] ll header: 00000000: ff ff ff ff ff ff 52 54 00 f0 da 2f 08 06        ......RT.../..
[180546.673814] IPv4: martian source 81.xxx.xxx.xxx from 81.xxx.xxx.xxx, on dev vnet0
[180546.689003] ll header: 00000000: ff ff ff ff ff ff 52 54 00 f0 da 2f 08 06        ......RT.../..
[180547.673801] IPv4: martian source 81.xxx.xxx.xxx from 81.xxx.xxx.xxx, on dev vnet0
[180547.688970] ll header: 00000000: ff ff ff ff ff ff 52 54 00 f0 da 2f 08 06        ......RT.../..
[180574.581912] kvm [22630]: vcpu0, guest rIP: 0xffffffff812d5e1c unhandled rdmsr: 0xc001100d
Ich habe es mit "eth0:1" probiert und auch mit "eth0", wozu ich die :1 verwenden soll erschliesst sich mir gerade nicht.

Auf dem Host habe ich die zusätzliche Route wieder gelöscht. ifconfig eth0 sagt jetzt:

Code: Alles auswählen

eth0      Link encap:Ethernet  HWaddr 52:54:00:f0:da:2f
          inet addr:81.XXX.XXX.XXX  Bcast:81.XXX.XXX.255  Mask:255.255.255.255
          inet6 addr: fe80::5555:ff:fef0:da2f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:798 (798.0 B)

Code: Alles auswählen

auto eth0
iface eth0 inet static
        address 81.169.xxx.xxx
        netmask 255.255.255.255
        network 81.169.xxx.xxx
        broadcast 81.169.xxx.255
        gateway 81.169.xxx.1
Das gateway ist das gateway vom Host. Auf dem Gast ist keine Route gesetzt.


Trotzdem kommt "connect: Network is unreachable" wenn ich die IP von heise.de anpinge.

trg2889
Beiträge: 137
Registriert: 01.07.2015 08:45:36

Re: VM über br0 Netzwerk geben

Beitrag von trg2889 » 25.11.2016 10:34:11

Poste doch mal die interfaces vom Host und von der vm

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: VM über br0 Netzwerk geben

Beitrag von Exxter » 25.11.2016 10:45:04

Gerne!

/etc/networkd/interfaces vom Host (ohne Kommentare):

Code: Alles auswählen

auto lo br0
iface lo inet loopback

iface eth0 inet manual

iface br0 inet dhcp

bridge_ports eth0
up route add -host 81.169.2xx.xxx dev br0
Die dort eingetragene Route habe ich manuell mit:

Code: Alles auswählen

route del -net 81.169.2x.xx netmask 255.255.255.255 dev br0
gelöscht, da ich eth0 auf dem Host nicht ohne weiteres neu starten kann. Die Bridge habe ich nach dem DebianWiki https://wiki.debian.org/BridgeNetworkConnections eingerichtet.

/etc/network/interfaces vom Gast:

Code: Alles auswählen

source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 81.169.2xx.xxx
        netmask 255.255.255.255
        network 81.169.2xx.xxx
        broadcast 81.169.2xx.255
        gateway 81.169.188.1
Das Problem ist mMn., die Anleitung von Strato geht davon aus, dass die gleiche Netzwerkkarte eine zweite IP-Adresse bekommt. Bei mir ist es aber eine VM mit einer anderen MAC-Adresse.

Ich habe noch etwas gefunden: http://www.linux-kvm.org/page/Networkin ... h_iptables
Das habe ich nochmal alles gecheckt, es ist so eingerichtet. Ein

Code: Alles auswählen

sysctl -a|grep net.ipv4.ip_forward
auf dem Host spuckt u.a. net.ipv4.ip_forward = 1 aus. Aber wenn ich auf dem Gast die Route hinzufüge kommt:

Code: Alles auswählen

~$ route add default gw 81.169.1xx.xx
SIOCADDRT: Network is unreachable
OK, wie es auf obiger Anleitung steht habe ich auf dem Gast auch noch die IP des Hosts als route und GW eingetragen:

Code: Alles auswählen

~$ route add -host 81.169.1xx.xxx dev eth0
~$ route add default gw 81.169.1xx.xxx
~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         81.169.1xx.xxx  0.0.0.0         UG    0      0        0 eth0
81.169.1xx.xxx  0.0.0.0         255.255.255.255 UH    0      0        0 eth0
~$ ping 193.99.144.80
PING 193.99.144.80 (193.99.144.80) 56(84) bytes of data.
From 81.169.214.164 icmp_seq=1 Destination Host Unreachable
From 81.169.214.164 icmp_seq=2 Destination Host Unreachable
From 81.169.214.164 icmp_seq=3 Destination Host Unreachable
^C
--- 193.99.144.80 ping statistics ---
5 packets transmitted, 0 received, +3 errors, 100% packet loss, time 4063ms
pipe 3
Das ist die IP von heise.

trg2889
Beiträge: 137
Registriert: 01.07.2015 08:45:36

Re: VM über br0 Netzwerk geben

Beitrag von trg2889 » 25.11.2016 12:13:45

Probiere mal folgendes:
Die Interfaces für den Host:

Code: Alles auswählen

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto eth0:1
iface eth0:1 inet static
address 11.22.33.44 (hier geben Sie stattdessen bitte Ihre 2. IP ein)
netmask 255.255.255.255
network 11.22.33.44 (hier geben Sie stattdessen bitte Ihre 2. IP ein)
broadcast 11.22.33.255 (Ihre 2. IP mit 255 am Ende)
gateway 81.169.xxx.1 (bitte beachten Sie obige Anmerkung)
Die Interfaces für die VM:

Code: Alles auswählen

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 11.22.33.44 (hier geben Sie stattdessen bitte Ihre 2. IP ein)
netmask 255.255.255.255
network 11.22.33.44 (hier geben Sie stattdessen bitte Ihre 2. IP ein)
broadcast 11.22.33.255 (Ihre 2. IP mit 255 am Ende)
gateway 81.169.xxx.1 (bitte beachten Sie obige Anmerkung) 
Eventuell beim Gateway die IP vom Host eintragen.

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: VM über br0 Netzwerk geben

Beitrag von Exxter » 25.11.2016 13:11:04

Habe es exakt so kopiert wie du es geschrieben hast, natürlich noch die eigenen Daten ersetzt. Nach einem /etc/init.d/network restart auf dem Host und einem Reboot der VM kommt auf der VM:

Code: Alles auswählen

~$ ping 193.99.144.80
connect: Network is unreachable
Dann habe ich mit virsh edit VM-NAME das Netzwerkdevice der VM von "br0" auf "eth0:1" geändert, jetzt kommt beim Start der VM:

Code: Alles auswählen

error: Failed to start domain VM-NAME
error: Unable to add bridge eth0:1 port vnet0: Die Operation wird nicht unterstützt
Habe als Gateway auch die IP des Hosts genommen auf der VM, noch mal neu gestartet, gleiches Ergebnis.

In der kern.log kommt beim Start der VM:

Code: Alles auswählen

[196887.097018] br0: port 2(vnet0) entered blocking state
[196887.107336] br0: port 2(vnet0) entered disabled state
[196887.117839] device vnet0 entered promiscuous mode
[196887.145112] br0: port 2(vnet0) entered blocking state
[196887.155418] br0: port 2(vnet0) entered forwarding state
[196899.863595] kvm [2698]: vcpu0, guest rIP: 0xffffffff812d5e1c unhandled rdmsr: 0xc001100d
 

trg2889
Beiträge: 137
Registriert: 01.07.2015 08:45:36

Re: VM über br0 Netzwerk geben

Beitrag von trg2889 » 25.11.2016 14:11:28

Das Netzwerkdevice in der vm soll eth0 heißen und nicht eth0:1 versuche es mal damit und dann nochmals testen ansonsten beim Host alles was mit eth0:1 in der interfaces steht auf br0 ändern und den Namen des Devices der vm auch ändern und nochmals testen

dufty2
Beiträge: 1711
Registriert: 22.12.2013 16:41:16

Re: VM über br0 Netzwerk geben

Beitrag von dufty2 » 25.11.2016 19:05:08

1. Frage: Du hast von Strato eine 2. IP (bzw. ein Netzwerk) bekommen, welche Du verwenden darfst?

2. Frage: Die Anleitung "KVM mit Nutzung aller IPs - the easy way" hast Du aber nicht 1:1 umgesetzt, warum nicht?
Denn bei jener z. B. heisst es "bridge_ports none" und br0 gibt es zusätzlich zu eth0.
Falls ich es richtig verstanden habe, hat das nämlich zur Folge, dass die IP des Hosts 2x auftaucht:
1 x bei eth0 und einmal bei br0, wobei eth0 _kein_ Bestandteil der Bridge ist.
Der Trick ist hierbei, dass die Pakete der VM keine "Layer-2-Verbindung" zum eth0 haben (also die MAC der VM gar nicht weitergereicht werden kann) sondern nur über "Layer-3".
Demzufolge sehen dann die Routen auf dem Host so aus

Code: Alles auswählen

Kernel-IP-Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
0.0.0.0         81.169.xxx.yyy    0.0.0.0         UG    0      0        0 eth0
81.169.xxx.xxx    0.0.0.0         255.255.255.255 UH    0      0        0 eth0
IP.VOM.GAS.T     0.0.0.0         255.255.255.255 UH    0      0        0 br0
Vielleicht hab's ich auch missverstanden :)

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: VM über br0 Netzwerk geben

Beitrag von Exxter » 28.11.2016 08:18:11

Guten Morgen,

sorry für die späte Antwort, mich hat de Grippe etwas erwischt.
trg2889 hat geschrieben:Das Netzwerkdevice in der vm soll eth0 heißen und nicht eth0:1 versuche es mal damit und dann nochmals testen ansonsten beim Host alles was mit eth0:1 in der interfaces steht auf br0 ändern und den Namen des Devices der vm auch ändern und nochmals testen
Die Netzwerkkarte in der VM heisst eth0 (mehr gibts nicht). "eth0:1" war ein Test auf dem Host. Ich habe wieder br0 auf dem Host eingerichtet, dh. eth0 hat keine IP und br0 hat die öffentliche ERSTE IP. Der Host ist so wieder normal erreichbar:

Code: Alles auswählen

$ ifconfig
br0       Link encap:Ethernet  Hardware Adresse 40:61:86:eo:45:84
          inet Adresse:81.169.1xx.xxx  Bcast:81.169.1xx.xxx  Maske:255.255.255.255
          inet6-Adresse: fe80::4261:86ff:feec:4584/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:23143 errors:0 dropped:0 overruns:0 frame:0
          TX packets:19198 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000
          RX bytes:2913767 (2.7 MiB)  TX bytes:33130565 (31.5 MiB)

eth0      Link encap:Ethernet  Hardware Adresse 40:61:86:eo:45:84
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:91993 errors:0 dropped:0 overruns:0 frame:0
          TX packets:88285 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000
          RX bytes:23675185 (22.5 MiB)  TX bytes:82713666 (78.8 MiB)
          Interrupt:16 Speicher:feae0000-feb00000

lo        Link encap:Lokale Schleife
          inet Adresse:127.0.0.1  Maske:255.0.0.0
          inet6-Adresse: ::1/128 Gültigkeitsbereich:Maschine
          UP LOOPBACK RUNNING  MTU:65536  Metrik:1
          RX packets:206684 errors:0 dropped:0 overruns:0 frame:0
          TX packets:206684 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1
          RX bytes:86395789 (82.3 MiB)  TX bytes:86395789 (82.3 MiB)
Zu Frage 1: Ja, wird im Webinterface angezeigt. Sie soll laut Anleitung von Strato als statische IP, nicht per DHCP konfiguriert werden. Habe ich in der VM auch so probiert, aber da war das Gateway von Strato nicht errichbar, die Netzwerkkarte bekam keine Internetverbindung.

Frage 2: Du hast Recht, das "bridge_ports none" habe ich noch nicht probiert. Ich habs mal so umgesetzt:

Code: Alles auswählen

auto lo
iface lo inet loopback

auto br0
iface br0 inet dhcp
 bridge_ports none
 bridge_stp off
 bridge_fd 0
 bridge_maxwait 0
 up route add -host 81.169.2xx.xxx dev br0
Die Route bekommt die zweite IP. So bekommt aber weder eth0 noch br0 eine IP und der Host ist nicht mehr erreichbar. Aber mir fällt gerade auf, ich habe beim letzten Versuch "iface eth0 inet manual" vergessen. Das werde ich dann gleich noch mal testen.

dufty2
Beiträge: 1711
Registriert: 22.12.2013 16:41:16

Re: VM über br0 Netzwerk geben

Beitrag von dufty2 » 28.11.2016 20:11:40

Exxter hat geschrieben:Ich habs mal so umgesetzt:
Ne, ne, ne ;)
Du weigerst Dich standhaft, das Tutorial zu befolgen.

Code: Alles auswählen

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 81.169.2xx.xxx
        netmask 255.255.255.255
        gateway IP.VOM.GATE.WAY
        pointopoint IP.VOM.GATE.WAY

auto br0
iface br0 inet static
        address 81.169.2xx.xxx
        netmask 255.255.255.255
        bridge_ports none
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0
        up route add -host IP.VOM.GAS.T dev br0
und noch die vom Gast (die Du ja schon hattest):

Code: Alles auswählen

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address IP.VOM.GAS.T
        netmask 255.255.255.255
        gateway IP.VOM.HOS.T
        pointopoint IP.VOM.HOS.T
Schaut jetzt ein bischen komisch aus, weil die host-IP 2x vorkommt.
Ist jetzt alles statisch; mit DHCP, mmmh, tricky.

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: VM über br0 Netzwerk geben

Beitrag von Exxter » 29.11.2016 06:45:05

dufty2 hat geschrieben:
Exxter hat geschrieben:Ich habs mal so umgesetzt:
Ne, ne, ne ;)
Du weigerst Dich standhaft, das Tutorial zu befolgen.
Entschuldige, manchmal sieht man den Wald vor lauter Bäumen nicht und passt die Konfiguration noch so an, wie sie vorher funktionierte (dhcp) :facepalm:. Du hast Recht, ich werd nicht mehr, es funktioniert so! Juchu, vielen vielen Dank!! :D

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: VM über br0 Netzwerk geben

Beitrag von Exxter » 30.11.2016 08:47:29

Hm, funktioniert noch nicht zuverlässig. Wunderte mich, dass die VM nicht mehr per SSH erreichbar ist. Auf dem Host hat br0 keine IP mehr, eth0 schon. Die route auf br0 auf dem Host fehlte auch. Es laufen keine cronjobs, die irgendwas mit dem Netzwerk machen.

Das einzige was ich bisher in den Logs fand ist:

Code: Alles auswählen

[179836.382026] IPv4: martian source IP.VOM.HOS.T from IP.VOM.GAS.T, on dev br0
[179836.396818] ll header: 00000000: ff ff ff ff ff ff 52 54 00 f0 da 2f 08 06        ......RT.../..
[179837.381918] IPv4: martian source IP.VOM.HOS.T from IP.VOM.GAS.T, on dev br0
[179837.396736] ll header: 00000000: ff ff ff ff ff ff 52 54 00 f0 da 2f 08 06        ......RT.../..
[179838.381931] IPv4: martian source IP.VOM.HOS.T from IP.VOM.GAS.T, on dev br0
[179838.396756] ll header: 00000000: ff ff ff ff ff ff 52 54 00 f0 da 2f 08 06        ......RT.../..
[179841.420127] IPv4: martian source IP.VOM.HOS.T from IP.VOM.GAS.T, on dev br0
[179841.434963] ll header: 00000000: ff ff ff ff ff ff 52 54 00 f0 da 2f 08 06        ......RT.../..
[179842.418087] IPv4: martian source IP.VOM.HOS.T from IP.VOM.GAS.T, on dev br0
Das spammt mir die /var/log/messages zu und kommt besonders dann, wenn ich den Gast neu starte.

Ich habe br0 neu gestartet mit ifdown br0 und ifup br0, danach hatte die Bridge wieder die IP die auch der Host hat. Die Route auf dem Host war auch wieder gesetzt, trotzdem kann der Gast keine IP im Internet pingen.

Wenn ich im Gast eine IP pinge kommt auf dem Host:

Code: Alles auswählen

[182135.840644] IPv4: martian source IP.VOM.HOS.T from IP.VOM.GAS.T, on dev vnet0
[182135.855815] ll header: 00000000: ff ff ff ff ff ff 52 54 00 f0 da 2f 08 06        ......RT.../..
[182136.839352] IPv4: martian source IP.VOM.HOS.T from IP.VOM.GAS.T, on dev vnet0
[182136.854522] ll header: 00000000: ff ff ff ff ff ff 52 54 00 f0 da 2f 08 06        ......RT.../..
[182137.839385] IPv4: martian source IP.VOM.HOS.T from IP.VOM.GAS.T, on dev vnet0
[182137.854579] ll header: 00000000: ff ff ff ff ff ff 52 54 00 f0 da 2f 08 06        ......RT.../..
Werde den Server rebooten, eventuell hilft das. Habe gelesen, dass /etc/init.d/network restart wohl veraltet ist und es eventuell nicht alle Devices betrifft.

Edit: ah, da läuft noch ein Prozess

Code: Alles auswählen

22634 ?        Ss     0:01 dhclient -v -pf /run/dhclient.br0.pid -lf /var/lib/dhcp/dhclient.br0.leases br0
könnte sein dass der das war. In der interfaces steht jedenfalls nichts mehr mit dhcp.

Reboot brachte nichts. Host ist erreichbar, Gast nicht. An der Konfiguration habe ich nichts mehr geändert, nachdem es gestern tat. Strange..

dufty2
Beiträge: 1711
Registriert: 22.12.2013 16:41:16

Re: VM über br0 Netzwerk geben

Beitrag von dufty2 » 30.11.2016 18:25:35

Der dhclient-Prozess läuft jetzt - nach dem Reboot - nicht mehr, richtig?

Ansonsten könntest Du nochmal Deine komplette /etc/network/interfaces posten.

Die martian resp. das Logging davon lässt sich in der /etc/sysctl.conf abstellen:

Code: Alles auswählen

# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
Somit wohl auf "= 0" stellen (?).

Evtl. werden jene auch durch die Firewall (iptables) geblockt (?) Bin mir aber nicht sicher, ob ich jetzt "martians" mit den "smurfs" verwechsle.

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: VM über br0 Netzwerk geben

Beitrag von Exxter » 02.12.2016 08:57:15

Es funktioniert jetzt alles, es kommen auch keine Pakete mehr vom Mars.. :D Es lag wohl wirklich an dem DHCP-Prozess der da noch lief.

Nochmals herzlichen Dank für alles! :THX:

Antworten