Code:
sudo iptables -n -v -L -t nat # NAT Tabelle anzeigen
sudo iptables -n -v -L # Standardtabellen zeigen
Beispiel:
(Hinweis, die Routen und netfilter-Regeln unten wurden durch KVM automatisch erstellt, mit default.xml)
Code:
$ sudo iptables -n -v -L -t nat
Chain PREROUTING (policy ACCEPT ... packets, ... bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT ... packets, ... bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE
tcp -- * * 192.168.x.0/24 !192.168.x.0/24 masq ports: 1024-65535
0 0 MASQUERADE udp -- * * 192.168.x.0/24 !192.168.x.0/24 masq ports: 1024-65535
0 0 MASQUERADE all -- * * 192.168.x.0/24 !192.168.x.0/24
Chain OUTPUT (policy ACCEPT ... packets, ... bytes)
pkts bytes target prot opt in out source destination
Auf dem besagten Rechner läuft KVM (es ist also der Host). Wie du sehen kannst, wird für die drei Protokolle (bzw. zwei plus Pseudoprotokoll
all) festgelegt, daß sie für ausgehende Anforderungen ge-NAT-tet werden. Sprich, wenn sie nicht untereinander schwatzen wollen (im eigenen Subnetz), handelt es sich um so eine ausgehende Anforderung und daher wird die
IP maskiert (nach außen erscheint ein Paket der VM als Paket des Hosts).
Code:
$ sudo
ip route
[...]
192.168.x.0/24 dev virbr0 proto kernel scope link src 192.168.x.1
[...]
Die Route sagt nur daß für das gezeigte Netzwerk (192.168.x.0/24) die Bridge zum Einsatz kommen soll.
Bridged und NAT ist eigentlich eine unsinnige Unterscheidung (siehe deine Fragestellung). Mit entsprechenden Routen und netfilter-Regeln kannste SNAT/DNAT (oder volles NAT und PNAT) machen oder eben an eine andere
IP durchrouten. Die virbr0 Bridge wurde im Übrigen automatisch von KVM erstellt (default.xml).
Ich habe bei mir bspw. 4 "externe" IPs, die hinter dem Host stecken. Intern habe ich für jede
IP eine eigene Bridge und ein Subnetz reserviert (das Subnetz dient dabei anderen Zwecken). Einerlei, die Routen sind so gesetzt, daß der Host weiß, daß eine Anforderung an eine dieser externen IPs hinter dem jeweiligen internen Subnetz liegt. Dazu kommt noch das Subnetz welches sich KVM mit virbr0 grabscht. Die vier VMs welche an die externen IPs angebunden sind, werden auch an dieses Netz angebunden für internen Traffic (also bspw. von Host zu VMs). Außerdem verstecke ich in diesem Netz noch weitere Hosts deren einzelne Dienste ich über PNAT-Regeln (in Netfilter) zu einer der externen IPs (Host hat auch eine) durchreiche.