Ich suche eine Lösung für folgendes Szenario: Ich habe einen Server mit 4 Netzwerkkarten woraud debian läuft, ein externen Router + Model (Fritzbox). Auf diesem Server soll OPNSense in einer virtuellen Maschine (KVM) laufen und ich möchte das mit virt-manager konfigurieren.
OPNSense soll mit der Fritzbox verbunden sein und dem server die Internetverbindung geben. An anderen Ports sollen geräte verbunden sein, die Wahlweise ins Internet können oder auch nicht. Kennt dazu jemand ein Tutorial. Ich verstehe das mit diesen Netzwerkbrücken nicht.
Außen, also im debian, für jedes Interface eine Bridge anlegen, das eth-device da rein, bei denen die nur für die Firewall sind: keine IP konfigurieren, erst recht kein DHCP.
1
# /etc/network/interfaces(.d/...)
2
auto enp0s20f2
3
iface enp0s20f2 inet manual
4
iface enp0s20f2 inet6 manual
5
6
auto br_wan
7
iface br_wan inet manual
8
bridge_ports enp0s20f2
9
bridge_maxwait 8
10
iface br_wan inet6 manual
11
12
auto enp0s20f3
13
iface enp0s20f3 inet manual
14
iface enp0s20f3 inet6 manual
15
16
auto br_office
17
iface br_office inet manual
18
bridge_ports enp0s20f3
19
bridge_maxwait 8
20
iface br_office inet6 manual
21
22
# usw.
Geht auch mit VLANS usw.
Bei neueren Distros ohne "if-up":
Netplan-Config, Networkmanager, systemd-networkd etc analog konfigurieren.
dann für die libvirt/VirtManager-VM:
1
<interface type='bridge'>
2
<source bridge='br_wan'/>
3
<model type='virtio'/>
4
...
Bzw. im VirtManager entsprechend zusammenklicken.
Tipp: Merk dir die MAC-Adressen, die der VirtManager da vergibt, damit findest du die Netzwerk-Devices im OpnSense leichter.
Falls du keine Netzwerkverbindung bekommst: Es kann sein dass die Firewall am Host-Debian das unterbindet. Entweder dort entsprechende Regeln hinterlegen, oder die Bridge auf "Durchzug" schalten:
Danke. Ich vergaß noch zu erwähnen, dass auf dem Host nocht andere virtuelle Maschinen oder Docker Container laufen sollen. Kann ich dann zu denen irgendwie routen?
Warum gebe ich denn zum Beispiel br_wan keine feste IP?
Weil du damit dem Sinn der Firewall verlierst:
Jede Bridge im Host-Linux ist dort auch immer ein Netzwerk-Device. Sobald die eine IP hat, wäre die auch erreichbar. Ungefiltert, an der OPNSense-Firewall vorbei.
Weil du damit dem Sinn der Firewall verlierst:
Jede Bridge im Host-Linux ist dort auch immer ein Netzwerk-Device.
Sobald die eine IP hat, wäre die auch erreichbar. Ungefiltert, an der
OPNSense-Firewall vorbei.
Aber zur Verbindung mit der Fritzbox, die als Gateway dient braucht das ja eine IP oder konfiguriere ich das in opnsense?
Ich will zum Beispiel an einem Port auch unsichere Geräte haben, die zwar mit Geräten aus einem Adressbereich Reden dürfen aber nicht ins Internet sollen. Irgendwelche Gammel China 3D Drucker eben.
Entweder Firewall "für alles", dann darf die Fritzbox nur mit der Firewall und sonst nix kommunizieren.
Oder Firewall "für manches", dann hängt die Firewall einfach als zusätzliches Gerät im Netzwerk der Fritzbox, und kann diverse gefilterte Netzwerke verwalten, die vom Fritz-Netzwerk isoliert sind.
in beiden Fällen kannst du hinter dem OPNsense (mehrere) eigene Netzwerke z.B. ("China-Gadget", "IOT", "TV und FireStick"), und definieren wer mit wem und dem Internet reden darf.
Vielleicht solltest du dir vorher einen Plan machen, was du erreichen willst.
Du solltest Dich mal mit Proxmox beschäftigen. Das hat auch kvm/qemu als Basis für virtuelle Maschinen, aber die Verwaltung ist um zwei Zehnerpotenzen besser. Backups/Restore gehen viel einfacher (ausprobiert). Die haben da inzwischen auch auch Software Defined Networking, was ich aber bislang nicht genutzt habe.
Und zu OpenSense: Wenn Deine Netzwerkinterfaces eigene PCI-Devices sind, kannst Du zumindest das externe Interface in die OpenSense VM ausreichen, so dass selbiges den ausschließlichen Zugriff darauf hat. Der Proxmox-Host hat dann überhaupt keinen Zugriff mehr auf das Interface, und die Abschottung ist dann auch vollkommener. Die anderen Interfaces kannst Du nach Bedarf exportieren.
Manche Leute betreiben auch ein Truenas als VM im Proxmox und exportieren den SAS-Controller in die Truenas-VM. Nur mal so als Idee.
Entweder Firewall "für alles", dann darf die Fritzbox nur mit der
Firewall und sonst nix kommunizieren.
Genau sämtlicher Traffic vom Internet und zum Internet soll über opnsense gehen ohne Ausnahme.
Ich habe mal das Bild angehängt wie ich es mir vorstelle. PC und Drucker sollen ins Internet können (Vielleicht mit bestimmten Sperren) und mit den China Gadgets eine TCP Verbindung aufbauen können aber die China Gadgets sollen nicht ins Internet können oder von sich aus mit anderen Dingen im Netzwerk kommunizieren können.
Die Docker/VM Instanzen sollen variabel entweder ins Internet können oder nicht und PCs sollen zu diesen eine Verbindung aufbauen können. Der Server selbst soll ins Internet dürfen aber über die Firewall.
Von außen sollen Portfreigaben an Docker/VM Instanzen erlaubt sein.
Weil der Preis dafür pro Jahr einfach da ist. Ich will das jetzt einmal einrichten ohne laufende Lizenzkosten. Habe dazu einen HPE DL380 recht günstig gebraucht bekommen.
Weil der Preis dafür pro Jahr einfach da ist. Ich will das jetzt einmal
einrichten ohne laufende Lizenzkosten. Habe dazu einen HPE DL380 recht
günstig gebraucht bekommen.
Noe. Du gekommst zwar eine Warnung, wenn Du die kostenpflichtigen Archive benutzen willst, aber trotzdem funktioniert alles. Update gibt es natuerlich nicht, nur Update des zugrundeliegenden Debians bekommst (fuer umsonst).
Zudem ist der Preis von ca. 110EUR/Jahr mehr symbolisch zu sehen (Einmal Essen gehen mit zwei Personen sind z.z. 60 - 80 EUR in Berlin).
Weil der Preis dafür pro Jahr einfach da ist. Ich will das jetzt einmal
einrichten ohne laufende Lizenzkosten. Habe dazu einen HPE DL380 recht
günstig gebraucht bekommen.
Du weißt aber schon, dass Du NICHT unbedingt eine Subscription kaufen musst, auch wenn das Proxmox freuen würde? Du darfst das auch ohne Subscription verwenden.
Das einzige ist das Repos für Updates. Da musst Du dann eben das No-Subscription Repo nehmen.
Genau sämtlicher Traffic vom Internet und zum Internet soll über
opnsense gehen ohne Ausnahme.
Anmerkungen zu deinem Plan:
eth0 sollte am Debian keine IP haben, um zu verhindern dass da Docker oder sonstwas dran bindet, Routen darauf gelegt werden usw.
br_lan mit eth1 braucht eine passende IP aus deinem Heim/LAN-Netz.
Für eth2 brauchst du auch eine Bridge, um das Device an OPNsense zu verbinden. Hab die mal einfach "br_gadget" genannt.
OPNsense kommuniziert über die br_lan und dessen IP mit den Docker-Containern. Deine zusätzlich eingezeichneten Direktverbindungen lässt du lieber bleiben.
Auch die Verbindungen zwischen Docker und br_lan würde ich erstmal nicht als bridge-membership der virtuellen Interfaces im Docker-Container machen, sondern klassisch über exposed ports und routing.
Wenn die China-Gadgets irgendwas direkt am Debian-Server/Docker erreichen sollen, braucht die br_gadget Bridge auch eine IP, diesmal aus dem "Gadget"-Netzwerk.
Ohne br_gadget IP müssen die über OPNsense gehen, das kann dann die Verbindungen auf die IP am br_lan um-NAT-en.
Danke für deine Anmerkungen. Ich habe das jetzt einmal überarbeitet mit Adressen, die ich dann innerhalb von opnsense vergebe.
Fritzbox bekommt eine statische IP und ist das Gateway zum Internet, was ich auch so in opnsense konfigurieren kann. Innerhalb der opnsense Maschine bekommt der Port dann eben die 192.168.1.2 als Adresse.
Für die drei anderen Ports setze ich eben im virt-manager die verbindung zu den anderen Brücken und vergebe in opnsense dann auch eine feste Adresse.
Innerhalb der firewall kann ich dann Regeln erstellen (sofern das so einfach geht), damit ich die Kommunikation bestimmen kann. Erster schritt wäre einfach mal DHCP, docker und einen Zugriff der PCs zum Internet zu ermöglichen.
Ein erreichbarer SSH Server wäre noch sinnvoll. Da muss ich openssh dann nur mitteilen, dass es auf z.B. 192.168.2.1 horchen soll, oder?
Ich habe zu dem letzten Diagramm noch eine Frage. Kann ich denn zum Beispiel den Docker container docker0 von PC1 aus erreichen? eth1 muss dazu noch eine ip haben, oder?
Kann ich denn zum
Beispiel den Docker container docker0 von PC1 aus erreichen? eth1 muss
dazu noch eine ip haben, oder?
Deswegen meinte ich: Lass das Docker "normal" laufen, also ohne dass du da irgendwelche Super-Sonder-Spezial-Netzwerkconfigs anwendest, und direkt die Bridges da reinverbindest.
Kann man zwar machen, wenn man sich da reinfuchst, aber ist eher nix für Anfänger.
Standard-Config von Docker wäre: Die Container innen kriegen eine Adresse aus dem 172.16.0.0/12-Bereich, vergeben von Docker.
Docker verbindet Ports von Außen (z.B. 192.168.2.1:80) in den Docker-Container hinein, und kümmert sich selber um die dafür nötigen Netzwerk/NAT/Firewall-Geschichten.
Allerdings: Wenn du's nicht explizit angibst, bindet Docker den "äußeren" Port an 0.0.0.0:80, das wäre dann auch aus "unsafe" und "wifi" erreichbar.
Standard-Config von Docker wäre: Die Container innen kriegen eine
Adresse aus dem 172.16.0.0/12-Bereich, vergeben von Docker.
Docker verbindet Ports von Außen (z.B. 192.168.2.1:80) in den
Docker-Container hinein, und kümmert sich selber um die dafür nötigen
Netzwerk/NAT/Firewall-Geschichten.
Allerdings: Wenn du's nicht explizit angibst, bindet Docker den
"äußeren" Port an 0.0.0.0:80, das wäre dann auch aus "unsafe" und "wifi"
erreichbar.
Es kann ja folgendes Szenario sein, dass mehrere Docker Container einen Webserver laufen haben, der auf Port 80 hört. Das würde doch kollidieren wenn ich den Server von PC1 erreichen möchte.
Es kann ja folgendes Szenario sein, dass mehrere Docker Container einen
Webserver laufen haben, der auf Port 80 hört. Das würde doch kollidieren
wenn ich den Server von PC1 erreichen möchte.
Die Ports innerhalb und ausserhalb vom Docker-Container müssen nicht gleich sein.
Du kannst 10 Webserver-Docker-Container starten, und die z.B. auf
192.168.2.1:80, :81, :82 ... :90 verteilen.
Oder du kannst AM br_office Alias-IPs vergeben, und die Webserver über
192.168.2.1:80, 192.168.2.2:80, 192.168.2.3:80 usw. erreichbar machen.
Oder du kannst beides mischen.
Aber: Dabei ist nie eine 192.168.2er IP IM Docker-Container. Die sind immer Außerhalb.
Ich habe das bei mir exakt so am laufen, allerdings mit 4 VLANs, da ich nur 1 Netzwerkkarte mit 1 Kabel haben will.
Über das Glasfaserkabel kommt auf VLAN 10 das WAN rein. Dort ist eine Linux Bridge, br10. Diese ist auf die opnsense Firewall durchgereicht und erscheint in der VM wie eine echte Netzwerkkarte.
Dann habe ich noch br20, br30 und br100 für Gästenetz, DMZ und LAN. Jede dieser Bridges ist zur opnsense VM durchgereicht und erscheint genauso wie WAN als Netzwerkkarte.
Wenn ich einen Container oder VM anlege, dann muss ich entsprechend diesen mit br20, br30 oder br100 verbinden und der landet dann im richtigen Netz.
Die Bridges dürfen, wie weiter oben gesagt wurde, ausser dem Namen überhaupt nichts konfiguriert haben, damit durch diese der Host nicht erreichbar ist!
Es gibt eine Ausnahme, auf br100 habe ich eine IP konfiguriert auf dem Host, dadurch wird dieser über VLAN 100 ansprechbar.
Bei dir dementsprechend auf dem zugehörigen Netzwerkport, da du ja mehrere Ports hast. Einfach für jeden Port eine Bridge anlegen und diese sowohl mit der opnsense als auch mit dem physikalischen Port verbinden!
Oder du kannst AM br_office Alias-IPs vergeben, und die Webserver über
192.168.2.1:80, 192.168.2.2:80, 192.168.2.3:80 usw. erreichbar machen.
Oder du kannst beides mischen.
Wenn ich in einem Docker compose file einfach nichts für network konfiguriere wie erreiche ich diesen Container dann und wie kenne ich dessen IP Adresse? Mit ip address sehe ich die Bridges, die Docker anlegt mit den Adressen 172.x.x.1. Das mit dem Alias verstehe ich überhaupt nicht.
Bei dir dementsprechend auf dem zugehörigen Netzwerkport, da du ja
mehrere Ports hast. Einfach für jeden Port eine Bridge anlegen und diese
sowohl mit der opnsense als auch mit dem physikalischen Port verbinden!
Die bridge mit dem physikalischen Port verbinden heißt, dass ich in /etc/network/interfaces die bridge anlege? Muss eth0-eth4 denn nun eine IP Adresse haben?
Die bridge mit dem physikalischen Port verbinden heißt, dass ich in
/etc/network/interfaces die bridge anlege? Muss eth0-eth4 denn nun eine
IP Adresse haben?
du musst bei "bridge-ports" den physikalischen Port angeben, zb so
Wichtig ist auch der Teil mit dem disable IPv6: wenn du einen Router betreibst, der IPv6 Router Advertisements herum schickt, dann wird dein Host diese empfangen, auswerten und sich mit IPv6 konfigurieren. Das möchtest du für das WAN Interface AUF KEINEN FALL, weil dann sonst dein Host per IPv6 aus dem WAN direkt ansprechbar wäre, unter Umgehung der Firewall!
Ob deine Bridge richtig konfiguriert ist, musst du unbedingt überprüfen, zb mit idconfig oder ip a. Die bridge selbst darf nur eine MAC Adresse aufgelistet haben, keine IPv4, keine IPv4, keine Netzmasken, keine Routen, einfach nichts. Andernfalls kann der Host über diese Adresse erreicht werden, wie gesagt, beim WAN Port wäre das fahrlässig.
Alles klar das habe ich verstanden. Eine Bridge ist im Grunde ein virtueller Switch, womit ich alles verbinden kann. Wo ist jetzt der Unterschied dieser Brige eine IP zu geben oder nicht? Wenn ich zum Beispiel eine Bridge mit eth0 verbinde und der Brücke eine Adresse gebe, sagen wir 192.168.1.1/24, kann sich dann eth1 mit etwas in diesem Adressbereich verbinden? Ich denke nicht, denn dazu bräuchte es eine Route.
Die Frage ist aber dennoch wie ich Docker container im host erreichbar mache und wie diese für PCs erreichbar sind, wenn die alle einen Webserver laufen haben.
Wo ist jetzt der Unterschied dieser Brige eine IP zu geben oder nicht?
Wenn ich zum Beispiel eine Bridge mit eth0 verbinde und der Brücke eine
Adresse gebe, sagen wir 192.168.1.1/24, kann sich dann eth1 mit etwas in
diesem Adressbereich verbinden? Ich denke nicht, denn dazu bräuchte es
eine Route.
im Prinzip ja. Aber ich würde es trotzdem nicht machen. Wenn einer in dein Netzwerk einbricht und da irgend was rum fummelt, kann er dann vielleicht doch dein Interface ansprechen.
Es genügt ja, wenn man die IP kennt, dann kann man auch ohne Route kommunizieren, wenn man im selben Subnet ist.
Ausserdem möchtest du genau definieren, auf welchem Interface dein Host erreichbar ist - wenn jede Bridge eine IP hat, erreichst du den selben Host mit mit mehreren IPs, das kann erwünscht sein, kann aber auch eine Sicherheitslücke sein - zB aus dem DMZ Netz soll man ausser dem Internet gar nichts erreichen können. ZB dein Webserver läuft im DMZ Netz; wenn ein Scriptkiddie in deinen Webserver einbricht, dann könnte er deinen Host ansprechen. Das möchte man u.U. nicht. Deshalb den Bridges keine IP geben, AUSSER man will da auch den Host drüber erreichen.
Ich habe das jetzt so am laufen und es funktioniert. Zumindest für ipv4. Auf der wan bridge bekomme ich allerdings die IPV6 Adresse nicht komplett weg. Es bleibt immer eine scope link adresse.
Außerdem bekomme ich lokal mit OPNSense dhcpv6 nicht ans laufen. Ich habe dem LAN Interface eine static IPv6 Adresse gegeben aber alle dhcpv6 requests bekommen keine Antwort. Das habe ich mit wireshark auf meinem client herausgefunden.
ich habe nach einigem Herumpröbeln komplett alles zum Laufen gebracht, incl. IPv6 PD. Und dhcp und ubound DNS und Werbeblocker und Portforward für meinen Nextcloud Server und GeoIP Blocklists und Wireguard VPN und Duck DNS und so weiter.
Wenn du einen Hint für deine Config brauchst, kann ich vielleicht versuchen, dir Tips zu geben die Tage, oder Screenprints von meiner Config. Es läuft nun mehrere Wochen alles zuverlässig bei mir, aber das OpnSense Forum war nicht hilfreich, wenn man nicht Informatiker ist und diese Dinge alle sowieso weiss, kommt man nicht umhin, leider sich alles selber aus den Fingern zu saugen.
Das wäre echt super nett von dir. Ich habe das allerdings nicht so ganz standard als vm laufen und die vm ist an die netzwerbrücke angebunden.
Ich habe in der Fritzbox an die IP Adresse der VM einen exposed host eingerichtet.
Port forwarding an eine Maschine, in dem fall das debian auf dem server, an br_office läuft schon allerdings hat mich opnsense da wahnsinnig gemacht weil ich immer als quelle wan address oder wan net angeben wollte aber das hat nie funktioniert. mit any allerdings schon.
Ich muss eigentlich im moment primär wissen ob das kritisch ist die scope link adresse an der wan bridge zu haben.
Generell möchte ich ipv6 komplett ans laufen bekommen aber ich habe nur eine statische ipv4 adresse. Dennoch ipv6 nach außen soll immer möglich sein.