OSX: Mimic Ubuntu IP Masquerading über iptables mit ipfw

3474
DevNull

Schönen Tag,

Ich versuche, ein Setup zu replizieren, das ich zwischen einem Router und einem Ubuntu-PC habe, und das gleiche Setup funktioniert auf meinem MacBook (10.6, Snow Leopard).

Erstens habe ich einen Router, der über einen USB-Anschluss verfügt. Wenn ich es an meinen Ubuntu-PC anschließe, wird eine RNDIS-Verbindung hergestellt, sodass ich über das USB-Kabel über eine IP-Verbindung eine Verbindung zum Router herstellen kann. Wenn ich es über USB an meinen Computer anschließe, wird ihm die IP-Adresse 172.16.84.1 zugewiesen. Beim Eingeben wird ein neuer Adapter angezeigt ifconfig. Ich kann dann über SSH in das Gerät einsteigen ssh admin@172.16.84.1.

Wenn ich mich am Gerät anmelde, spüle ich die Routen ab und erstelle die Standardroute:

admin@localhost> route -f admin@localhost> route add default 172.16.84.2 

In meinem Ubuntu-Rechner verwende ich jetzt iptables, um das IP-Masquerading zu aktivieren:

root@Valhalla> sudo iptables -t nat -A POSTROUTING -s 172.16.84.2 -j MASQUERADE 

Sobald dies erledigt ist, hat der Router einen Internetzugang über die USB-Verbindung zu meinem PC.

Ich versuche, dieses exakte Setup jetzt auf meinem MacBook (Snow Leopard) zu replizieren, aber es iptablesgibt es nicht für OSX, nicht einmal eine Macports-Version. Ich habe andere Fragen zu StackOverflow durchforstet, die sich auf die Verwendung des ipfwBefehls beziehen, der anscheinend als Drop-In-Ersatz für funktioniert iptables. Die Syntax unterscheidet sich jedoch erheblich und ich bin ziemlich verloren.

Hat jemand mit einiger Erfahrung ipfweinige Vorschläge, wie ich dies erreichen und eine NAT-Verbindung über IP-Masquerading erstellen könnte, wie ich es mit meinem Ubuntu-PC könnte?

Vielen Dank für Ihre Hilfe.

2

2 Antworten auf die Frage

1
NauT

Warum benutzen Sie nicht einfach das Internet-Sharing auf Ihrem Macosx? Systemeinstellungen> Freigabe> Internetfreigabe

für ipfw sind nat regeln (Lats sagen, dass dein Internet en0 ist und lokale Schnittstelle en1)

  1. sysctl -w net.inet.ip.fw.one_pass = 1 (Sie müssen root sein)
  2. sysctl -w net.inet.ip.forwarding = 1
  3. / sbin / ipfw add 1040 erlaubt ip von jedem zu beliebigen über en1 (alles zulassen, was über die lokale Schnittstelle geleitet wird)
  4. / sbin / ipfw add Umleitung natd all von any zu any via en0
  5. / sbin / ipfw add alles von einem beliebigen zu einem beliebigen natd -interface en0 übergeben (wo das ausgehende Interface en0 ist)
  6. / usr / sbin / natd -interface en0 (nat selbst)
Dies ist nahe an dem, was ich versuche zu tun, aber die Schritte 3 und 4 haben "Fehler in Befehl / Datei nicht gefunden" generiert. Sind dies sysctl- oder ipfw-Befehle? DevNull vor 11 Jahren 0
das sind ipfw-Befehle NauT vor 11 Jahren 0
Die ersten drei Befehle funktionieren, aber der vierte hat Probleme: local $> ipfw nat 1 Konfigurationsprotokoll, wenn en1 same_ports deny_in ipfw zurücksetzt: bad command 'nat' DevNull vor 11 Jahren 0
ok, anscheinend habe ich einen Fehler gemacht, indem ich versucht habe, die gleichen Regeln wie bei BSD unter OSX zu verwenden. Hier gehen wir mit gültigem Befehl / sbin / ipfw add divat natd all von jedem beliebigen über en0 / sbin / ipfw add all von jedem zu einem beliebigen natd -Interface en0 (wobei en0 das ausgehende Interface ist) NauT vor 11 Jahren 0
Mit Ausnahme von Schritt 5 funktionierten alle:> sudo / sbin / ipfw add alles von einem beliebigen natd -Interface übergeben de0 ipfw: nicht erkannte Option [-1] -interface \ n DevNull vor 11 Jahren 0
ohne schritt 5 aber mit schritt 6 sollte nat wohl funktionieren? Hat es geklappt? NauT vor 11 Jahren 0
Kein Glück. Der Router konnte weder bestimmte IP-Adressen noch Hostnamen per Ping senden. DevNull vor 11 Jahren 0
lassen Sie uns [diese Diskussion im Chat fortsetzen] (http://chat.stackexchange.com/rooms/6730/discussion-between-naut-and-dogbert) NauT vor 11 Jahren 0
Könnte es Ihnen möglich sein, die endgültige Lösung hier zu veröffentlichen? Vielen Dank sukhvir vor 10 Jahren 0
1
zmo

well, the easiest way to do it using OSX is simply by using the System Preferences->Sharing->Internet Sharing. You check Internet Sharing, and configure it so it states Share your connection from Ethernet 2 (as I suppose your USB network device appears as), To computers using Ethernet (as I suppose you want your local network to be on Ethernet, otherwise choose airport or anything relevant).

The bearded way to do it is to indeed use ipfw and route. A simple google search gives a good tutorial on both methods at the following URL:

http://www.ibiblio.org/macsupport/ipfw/ (the commandline way is after the GUI way)

HTH

Ich bin nicht mit dem Begriff "bärtiger Weg" vertraut. Was bedeutet das? Ich suche nach einem programmatischen Ansatz ohne GUI. DevNull vor 11 Jahren 0
"bärtig" ist ein Witz zu sagen "für echte Männer, die einen Bart haben" :-) Für den Nicht-GUI-Ansatz können Sie den Link verwenden, den ich Ihnen gegeben habe. In diesem Link wird Ihnen sogar gezeigt, wie Sie die Dinge über die Benutzeroberfläche einrichten und dann die Regeln ausdrucken können, um sie später wiedergeben zu können. zmo vor 11 Jahren 0