[linux-l] Netzwerkkonfiguration für Fortgeschrittene

Lutz Willek lutz.willek at belug.de
Di Dez 15 08:19:57 CET 2009


Am Sa, 12.12.2009, 10:37, schrieb Andreas Schott:
> Moin,

Servus,

Michael hat ja schon einige gute Hinweise gegeben, mir geht es ansonsten
wie Ihm, ich verstehe Deinen Aufbau nicht genau: in etwa so?

physikalisch:

[router]>---<eth-red-[KVM-Host]-eth-green>--->|[internes_Lan]

logisch:

[router]<--<virt-red-[IP-Fire(virtuell)]-virt-green>--->|[alle internen
Rechner incl. KVM-Host]

Dann ist das einfach, Du musst natürlich die Namen der Netzwerkkarten
anpassen, ich nehme die Namen von oben. Alles ungetestet und aus dem
Gedächtnis, wenns Probleme gibt bitte manpages lesen oder hier nachfragen.

Los gehts, Annahmen:
* KVM-Host: 192.168.1.2/24
* KVM-IP-Fire,virt-green:192.168.1.1/24
* KVM-IP-Fire,virt-red:192.168.99.2/24
* Router: 192.168.99.1/24
* weitere Maschinen, internes Netz: ab 192.168.1.3 bis 192.168.1.254/24


- erstelle zwei bridges, br-red und br-green (Hilfe gibt Dir die Manpage
von brctrl)

brctrl addbr br-red ; brctrl addbr br-green

- ordne den Bridges die Netzwerkinterfaces zu:

brctrl addif br-red eth-red
brctrl addif br-red virt-red

brctrl addif br-green eth-green

- Fahre die bridges und Netzwerkinterfaces hoch. (Ab hier hilft die
Manpage von ip)

for device in 'br-red br-green eth-red eth-green' ; do ip l set $device up
; done

- Gib Deiner internen bridge eine IP und eine Route. Über diese IP wirst
Du den KVM-Host in Zukunft erreichen:

ip a add 192.168.1.2/24 dev br-green

ip r add 192.168.1.1 dev br-green scope link
ip r add 192.168.1.0/24 dev br-green proto kernel scope link src 192.168.1.2
ip r add default via 192.168.1.1 dev br-green

- Versuche *nicht* vom KVM-Host aus irgendeiner der folgenden Geräte eine
IP und/oder eine Route zu verpassen: br-red, eth-red, virt-red, virt-green

- Blocke auf dem KVM-Host jeglichen Verkehr, der von eth-red kommt und zum
KVM-Host will. Ab hier hilft die Manpage von iptables, ebtables:
iptables -I INPUT -m physdev --physdev-in eth-red -j DROP

- erlaube ip-forwarding
echo 1 > /proc/net/ipv4/ip_forward

- Installiere Deine virtuelle Firewall, gib ihr oben genannte IP's und
versuche mit dieser virtuellen Maschine ins Internet zu kommen, es sollte
klappen.

- Konfiguriere Deine virtuelle Firewall so, das diese ein Masquerading
aller internen IP-Adressen macht, richte NAT ein. Zu diesen Zeitpunkt
solltest Du dann auch mit den internen Maschinen incl. KVM-Host ins Netz
kommen.

- starte Deinen KVM-Host neu und versuche alles so hinzubekommen das es
Neustartfest ist. Wie Du das machst überlasse ich Dir, entweder per
initscript, in /etc/network/interfaces oder wie auch immer Deine
persönliche Präferenz ist.

- Ich würde jetzt hier weitermachen und auf dem KVM-Host noch eine
restriktivere Policy setzen, in etwa so (schematisch,pseudocode nicht
blind abtippen!)

iptables -P {INPUT|OUTPUT|FORWARD} DROP
iptables -I {INPUT|OUTPUT|FORWARD} -dev lo -j ACCEPT
iptables -A {INPUT|OUTPUT} -dev eth-green -j ACCEPT
iptables -A FORWARD {von und zu virtuelle Firewall} -m physdev --physdev
br-red -j ACCEPT
iptables -A FORWARD {von und zu anderen virtuellen Maschinen} -m physdev
--physdev br-green -j ACCEPT


viel Spass.

lg Lutz


>
> ich habe Ubuntu 9.10 als Serverversion installiert um per KVM virtuelle
> Maschinen zu nutzen.
>
> Der Rechner hat zwei Netzwerkkarten, eine direkt am Router (RED) und
> eine im LAN (GREEN). Auf dem Host soll ein virtueller IPFire als
> Firewall laufen und der gesamte Netzwerkverkehr (auch der das Hosts)
> soll natürlich über die Firewall laufen. Die LAN-Schnittstelle habe ich
> gebridged, kein Problem. Aber wie bridge ich die Internet-Schnittstelle
> ohne eine IP zuzuweisen? Der virt-manager stellt auch nur gebridgte
> Netzwerkkarten zur Verfügung.
>
> Meine Vorstellung die Internet-Schnittstelle als PCI-Device zur VM
> durchzureichen klappt allerdings auch nicht. Das wäre wahrscheinlich der
> beste Ansatz.
>
> Wie kann ich die Problematik lösen?
>
> Wie stelle ich eine Bridge her ohne dass darüber Kommunikation an der
> Firewall vorbei läuft? Unter Windows bindet man TCP/IP nicht an die
> Karte aber wie gehts unter Linux?
>
> Andreas