Vielen Dank schonmal an beide!
Ich werde bei den Quellen nachlesen, mir nochmal Gedanken dazu machen und dann probieren. Ich berichte dann wieder.
Update / Zwischenstand:
Nachdem ich jetzt viel hin und her probiert habe (Aliase, direkt, Bridge, NAT, ... und ne Menge gelernt habe, möchte ich behaupten), habe ich viele Quellen verworfen und mich erst hierhin orientiert.
Da das aber immernoch nicht wirklich gut klar war, bzw. mich nur bedingt weiterbrachte, habe ich noch weitergesucht und eine sehr gute Quelle gefunden, die Klartext redet. Da bleiben eigentlich keine Fragen offen, wenn man das ganze manuell machen möchte.
Bei der Replikation dessen was KVM eigentlich im Hintergrund macht, habe ich aber noch einige Dinge angepasst, so dass dann letztendlich Folgendes dabei herauskam (IPs, etc. angepasst für die Veröffentlichung hier).
Hardware-Adresse generieren wie KVM sie erwartet:
hexdump -vn3 -e '/3 "52:54:00"' -e '/1 ":%02x"' -e '"\n"' /dev/urandom
Beispiel hier: 52:54:00:19:85:96
/etc/network/interfaces anpassen:
auto lo
iface lo inet loopback
# Netzwerkkarte
auto eth0
iface eth0 inet static
address 192.168.0.10
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 192.168.0.1
# Dummy-Interface
auto virbr10-dummy
iface virbr10-dummy inet manual
pre-up /sbin/ip link add virbr10-dummy type dummy
up /sbin/ip link set virbr10-dummy address 52:54:00:19:85:96
# Die eigentliche Netzwerkbrücke
auto virbr10
iface virbr10 inet static
bridge_ports virbr10-dummy
bridge_stp on
bridge_fd 2
address 192.168.100.1
netmask 255.255.255.0
Erklärung: eth0 ist die Netzwerkschnittstelle, virbr10 ist die virtuelle Brücke, die KVM dann verwenden kann und diese Brücke greift auf ein Dummy-Interface zu. Diese Interfaces werden beim Systemstart erzeugt, mit den Einstellungen geladen und das Netzwerk so hochgefahren.
Das Ganze geht mit NAT natürlich nur, wenn man in /etc/sysctl.conf Anpassungen macht (damit im Netfilter des Kernels das Feature funktioniert):
net.ipv4.ip_forward=1
net.ipv4.conf.all.forwarding=1
Der erste Eintrag muss nur einfach einkommentiert werden, den zweiten muss man hinzufügen.
Da im weiteren Verlauf Iptables verwendet wird um NAT und Forwarding zu regeln, muss man auch da was hinzufügen. In der /etc/iptables.up.rules (wird automatische mittels iptables-restore beim Systemstart geladen, egal ob UFW läuft oder nicht):
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# Inbound-Traffic zu dem privaten Subnetz akzeptieren.
-A FORWARD -d 192.168.100.0/24 -i eth0 -o virbr10 -j ACCEPT
# Outbound-Traffic von dem privaten Subnetz akzeptieren
-A FORWARD -s 192.168.100.0/24 -i virbr10 -o eth0 -j ACCEPT
# Von VMs DNS (53) und DHCP (67) akzeptieren.
-A INPUT -i virbr10 -p udp -m udp -m multiport --dports 53,67 -j ACCEPT
-A INPUT -i virbr10 -p tcp -m tcp -m multiport --dports 53,67 -j ACCEPT
# Alles andere zurückweisen
-A FORWARD -i virbr10 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -o virbr10 -j REJECT --reject-with icmp-port-unreachable
COMMIT
Andere Dinge wie Kommunikation unter mehreren VMs, Masquerading, etc. habe ich jetzt erstmal weggelassen. Mit dieser Konfiguration kann die VM mittels statischer IP (/etc/network/interfaces im VM-Ubuntu) nach draußen (Internet) und mittels statisch eingetragener Route im Router, die zwischen den zwei Subnetzen vermittelt auch in die anderen Subnetze. Ein Neustart oder Netzwerk-Restart des Servers auf dem die Modifikationen eingepflegt wurden, sind natürlich Bedingung dafür, dass das dann auch richtig läuft.
In Virt-Manager oder halt via virsh muss man dann die VM so konfigurieren, dass man kein virtuelles Netzwerk verwendet, sondern direkt die virbr10-Brücke, die jetzt erzeugt ist.
Das ist jetzt erstmal die Basis auf der ich weiter vorgehen werde. Das alles zu verstehen und nachzulesen hat mich jetzt viel viel mehr Zeit gekostet als man anhand dieser knappen Ausführungen erahnen könnte, aber ich bilde mir ein, dass es zumindest mein Verständnis von Netzwerken, Netzwerkschnittstellen, Netfilter, Iptables, etc. vergrößert hat, was als Basis besser ist als nicht zu wissen was man da gerade tut.
Die nächsten Schritte sind jetzt, herauszufinden welche Dienste, IPs, Ports, etc. auf der VM gebraucht werden und dann endgültig das Vorhaben durchzuziehen, virbr10 so per Iptables zu reglementieren, dass nur noch diese Dienste ins Netz dürfen, aber nicht von außen erreichbar sind, sowie SSH nur vom Host aus zu ermöglichen. Dann kann ich die VM endlich dem eigentlichen Zweck zuführen, gewisse Dienste für mich bereitzustellen, was dann wieder ein anderes Thema ist.
Wenn jemand noch Ideen zur Verbindungsdatenüberwachung gleich nach dem Boot hat, dann bitte gerne da reinschreiben. So wirklich war das für mich noch nicht dabei was ich wollte, also direktes Logging mit Abfrage über journalctl oder so.
Weiteres sobald ich hier weiter bin.