Linux Bridge: VM und Container mit lokaler IP sehen sich, jedoch ohne Internet-Zugriff

Shutterfly

Enthusiast
Thread Starter
Mitglied seit
30.01.2016
Beiträge
1.499
Moin moin,

ich benötige mal einen Denkanstoß, da ich derzeit versuche eine Bridge per systemd-networkd einzurichten und offenbar grundsätzliches etwas missverstanden haben muss. Folgende "Ist"-Szenario (IP-Adressen beispielhaft):
  • Server mit NIC eno1, besitzt drei direkt zugewiesene IP-Adressen: 1.1.1.1, 1.1.1.2, 1.1.1.3
  • IP 1.1.1.1 ist die SSH-IP des Servers und wird z.B. auch für SMB verwendet
  • IP 1.1.1.2 und 1.1.1.3 werden von zwei Docker-Containern verwendet um z.B. einen reverse proxy zu stellen (ala 1.1.1.2:80->80/tcp, 1.1.1.2:443->443/tcp)
  • Zusätzlich läuft auf dem Server eine VM per KVM mit IP 1.1.1.4, als Network source wird "Host device eno1: macvtap" im Bridge-Mode verwendet

Bild zur Verdeutlichung:
fA5Onnb.png


Code:
root@black-hole ~ # ip addr
[...]
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 0c:c4:7a:7c:a6:64 brd ff:ff:ff:ff:ff:ff
    altname enp1s0
    inet 1.1.1.1/24 brd 10.0.1.255 scope global eno1
       valid_lft forever preferred_lft forever
    inet 1.1.1.2/24 brd 10.0.1.255 scope global secondary eno1
       valid_lft forever preferred_lft forever
    inet 1.1.1.3/24 brd 10.0.1.255 scope global secondary eno1
       valid_lft forever preferred_lft forever
    inet6 fe80::ec4:7aff:fe7c:a664/64 scope link
       valid_lft forever preferred_lft forever
[...]

Auf die zuletzt genannte VM kann vom LAN per SSH zugreifen ohne das die IP eno1 direkt zugewiesen ist und alle genannten Container/VMs können frei aufs Internet zugreifen.

Nun wollte ich mich von Docker lösen und auf LXC/LXD umstellen. Die ich teilweise Container mit eigener dedizierten IP betreiben möchte, wollte ich dies über eine Bridge realisieren. Als Idee habe ich diesen Blog-Artikel genommen.

Im gleichen Zuge habe ich von netctl auf systemd-networkd umgestellt, da ich es einfach mal aufprobieren wollte, da netctl ja eine reine Insel-Lösung von Arch Linux ist.

Also eingelesen und ähnlich wie hier eine Bridge mit systemd-networkd realisiert:
  • Bridge als netdev angelegt
  • eno1 der Bridge zugewiesen
  • IP-Adressen, Gateway etc. der Bridge zugewiesen

Erstes Ergebnis: Host hat nach einem Reboot weiterhin Internet und ist im LAN vollkommen erreichbar.

Nun die Probleme:
  • Docker-Container und VM haben keinen Zugriff auf das Internet, jedoch Zugriffs aufs LAN: So kann ich den reverse proxy aus dem LAN ansprechen, dieser kann auch Anfragen an 1.1.1.4 weiterreichen
  • Die VM mit IP 1.1.1.4, welche nicht als IP der Bridge zugewiesen ist, kann ich vom LAN nun jedoch nicht mehr direkt erreichen. Eine SSH-Verbindung funktioniert z.B. vom Host in die VM aus problemlos

Grundsätzlich scheinen also zwei Probleme vorzulegen:
  • Die Bridge lässt nicht allen Traffic durch
  • Werden IP-Adressen von VMs "hinter der Bridge" genutzt, sind die nur auf dem Host sichtbar/erreichbar

Grundsätzlich vermute ich hier ein Verständnisproblem bei der Bridge, Firewall oder allgemeinen Routing-Angelegenheiten, weswegen ich hier nun um Hilfe bitten muss. Da ich nun nicht weiß, was ich alles posten soll und nicht tausende Zeilen an Logs, Configs etc. posten möchte, würde ich darum bitten, relevante Dinge einfach anzufragen.
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Moin.
Falls du willst das alles einfach funktioniert, kann ich dir nur Proxmox empfehlen. Es ist ein Debian-Fork nur zur Verwaltung von VMs und LXC per Webinterface.
Wenn es dir um den Lerneffekt geht und du alles händisch machen willst, glaube ich das du 1-2 Denkfehler machst.

Eine Bridge ist erst mal nichts anderes als ein Switch. Das hat noch garnichts mit IPs zu tun.
Entgegen deiner Meinung lässt sie Grundsätzlich ALLES durch, weil ein Switch (Layer2) gar nicht nach Paketen (Layer3) filtert
1.1.1.1-4 können sich gegenseitig sehen ohne Internet weil sie hierfür keine erreichbare Route haben.

Du willst jetzt Netze verbinden - dein VM LAN 1.1.1.* mit deinem Heimlan (Fritzboxuser?) 192.168.2.*
Dafür musst du Routing/NAT einrichten. Nach deinem Bild kommt der Host also nach Rechts auf den Stapel mit der .1 und nach Links mit der 192.168.irgendwas deines LANs.
Der Host fungiert als Router mit seiner eigenen Netzwerkkarte im Heimlan und einer virtuellen NIC an der Bridge.

BTW:
Falls du wirklich 1.1.1.*/24 genommen hast stimmen deine Subnetze bzw Broadcast (brd 10.0.1.255) nicht.
Klasse A IPs haben normal dem Standard nach die 255.0.0.0 als SNM.
Der Einfachheit halber und zu Einhaltung von Standards rate ich die lieber zu 192.*.*.*/24
 
Zuletzt bearbeitet:
Ich würde sogar schwer dazu raten einen privaten block zu nutzen.


Der grund dafür ist relativ simple - zB ist deine 1.1.1.1 eine öffentliche IP (CloudFlair DNS server). Versuchst du jetzt aus deinem Internen Netwerk einen solche IP zu erreichen, würde da nicht klappen weil deine route wieder ins Interne leiten würde.

Der 10.*.*.* block ist privat, und bietet absolut ausreichend IPs für soetwas.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh