PF - NAT zwischen Interfaces?

Bender86

Lieutenant
Registriert
Jan. 2007
Beiträge
718
Hallo zusammen, (ich arbeite mit OS X, aber das Problem (bzw. dessen Lösung) hängt wohl eher mit FreeBSD/OpenBSD zusammen, daher poste ich lieber im Linux Bereich)

ich habe in einem anderen Thread schon ein Problem beschrieben, bei dem ich versuche einen Android Emulator mit einem (ich nenne es einfach mal) Server zu verbinden. Dabei müssen Pakete von einem Interface (entweder lo0 oder en0) an ein anderes (tap0) weitergeleitet werden und andersherum.

Ich bin nach einigem suchen auf pf und pfctl gestoßen mit denen ich versuchen will Pakete zwischen den Interfaces hin und her zu NATten. Bei der richtigen Verwendung von pf hänge ich jetzt aber und hoffe das mir hier jemand helfen kann, mein bisheriger Weg sieht so aus:

  • Ich hab die Paket-Weiterleitung aktiviert mittels:
    Code:
    sudo sysctl -w net.inet.ip.forwarding=1
  • Zum testen eine möglichst allgemeine NAT Regel geschrieben:
    Code:
    pass in on en0 from any to any rdr-to 127.0.0.1
    (eingetragen in /private/etc/pf.conf)
  • pf aktiviert mittels
    Code:
    sudo pfctl -e

Wenn ich nun in Wireshark das loopback-Interface betrachte sehe ich ... nichts. Eigentlich sollten doch mit der Regel alle Pakete die bei en0 rumschwirren an 127.0.0.1, also lo0 gehen oder nicht? Warum sehe ich davon nichts? Habe ich einen Schritt vergessen, etwas nicht aktiviert, die Regel falsch geschrieben?

Zum testen sende ich von meinem Handy Pakete an meinen Laptop, diese kommen 100% sicher beim Laptop an. (Ich habe eine Test-Client-Server Anwendung und Handy und Laptop reden miteinander) Dennoch sehe ich kein Paket das an lo0 weitergeleitet wird.

Ich hoffe jemand hat Rat.
 
Zuletzt bearbeitet:
en0 und tap0 in ne Bridge zusammenhängen wär dazu wohl die einfachste Lösung. Mit dem Loopback Interface wirste da nicht weiterkommen

Der Command für die Bridge wäre brctl (Linux)

Am MAC geht das ganze mit:
sudo ifconfig bridge0 create
sudo ifconfig bridge0 addm en0 addm tap0
sudo ifconfig bridge0 up
 
Zuletzt bearbeitet:
Danke für die Antwort! Ich hatte Gestern leider keine Zeit mehr das auszuprobieren. Ich bin mir nicht so sicher ob das was ich will mit einer Bridge überhaupt geht, ich habe aber die Bridge mal erzeugt und angesehen was passiert.

ifconfig sagt im Moment (ein bisschen gekürzt):

Code:
$ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
	options=3<RXCSUM,TXCSUM>
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
	inet 127.0.0.1 netmask 0xff000000 
	inet6 ::1 prefixlen 128 
en0: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
	ether 68:a8:6d:01:19:e8 
	inet6 aaaa::aaaa:aaaa:aaaa:aaaa%en0 prefixlen 64 scopeid 0x4 
	inet 111.111.111.111 netmask 0xfffff800 broadcast 111.111.111.255
	media: autoselect
	status: active
tap0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
	ether 06:5a:97:da:9e:e2 
	inet 10.1.1.100 netmask 0xffffffff 
	open (pid 2926)
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	ether ac:de:48:39:dc:ae 
	Configuration:
		priority 0 hellotime 0 fwddelay 0 maxage 0
		ipfilter disabled flags 0x2
	member: en0 flags=3<LEARNING,DISCOVER>
	         port 4 priority 0 path cost 0
	member: tap0 flags=3<LEARNING,DISCOVER>
	         port 7 priority 0 path cost 0

Wenn ich mit dem Handy nun Pakete an 111.111.111.111 (en0) schicke, kann ich die auch mit Wireshark sehen, wenn ich auf en0 horche. Wenn ich auf bridge0 oder tap0 horche sehe ich die aber nicht. Sollte das nicht der Fall sein wenn die Bridge funktioniert?

Ich frage mich auch grade, ob überhaupt jemand Pakete an tap0 entgegen nimmt. Werden automatisch alle Pakete die bei en0 eintreffen durch die Bridge an tap0 geschickt? Es sieht bei mir so aus als wäre das nicht der Fall.
 
Zurück
Oben