iptables Weiterleitung zwischen zwei Schnittstellen

26

Ich habe also eine Linux-Box mit zwei drahtlosen Schnittstellen, eine ist eine Station und die andere ein AP.

wlan0 (station) - Verbunden mit der Internetverbindung

wlan1 (AP) - Andere Clients stellen eine Verbindung her.

Ich möchte, dass Clients, die mit wlan1 verbunden sind, über wlan0 auf das Internet zugreifen können. Und ich würde das gerne mit iptables machen, da mein Kernel keine Bridging-Unterstützung hat ...

Folgendes habe ich bisher mit iptables versucht, aber es funktioniert nicht:

iptables -A FORWARD -i wlan0 -o wlan1 -j ACCEPT
iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT

Ich würde mich über jede Hilfe freuen.

grübeln
quelle
1
IPTABLES ist ein Stateful Packet-Filter, der Pakete erlaubt / droppt / mangelt. Es ist kein Router oder eine Bridge. Ihre Befehle passen die Firewall an, um den Datenverkehr zuzulassen, sie tun jedoch nichts, um ihn tatsächlich weiterzuleiten.
Zoredache
Ersetzen Sie also den Kernel durch einen, der die Funktionen bietet, die Sie benötigen. Es ist schließlich "eine Linux-Box".
Michael Hampton
Kann ich erreichen, was ich mit "Route" zu tun versuche? Ich werde auch den Kernel mit Bridge-Unterstützung neu erstellen, mich aber fragen, ob es noch andere Optionen gibt.
Broody
Die Route gibt an, wohin sie gehen soll, sobald sie aktiviert ist. Michael hat Ihnen erklärt, was Sie tun müssen, um das Routing zu unterstützen. DANN müssen Sie es über sysctl einschalten.
Magellan

Antworten:

35

Damit Hosts, die eine Verbindung zu Ihrer privaten Schnittstelle herstellen, ins Internet gelangen können, müssen Sie die Schnittstellen nicht überbrücken. Sie müssen Pakete, die auf einer Schnittstelle eingehen, an die andere weiterleiten, wo sie ins Freie gehen.

Um das zu tun, müssen Sie nur:

  1. Aktivieren Sie die Weiterleitung auf Ihrer Linux-Box:
  2. Erlauben Sie bestimmten (oder allen) Paketen, Ihren Router zu durchqueren
  3. Da netfilter eine zustandslose Firewall ist, sollten Sie, wie bereits erwähnt, Datenverkehr für bereits hergestellte Verbindungen zulassen
  4. Ändern Sie die Quelladresse für Pakete, die ins Internet gehen
    echo 1> / proc / sys / net / ipv4 / ip_forward
    iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT
    iptables -A FORWARD -i wlan0 -o wlan1 -m state --state ESTABLISHED, RELATED \
             -j AKZEPTIEREN
    iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

Das sollte es tun.

Torian
quelle
Ich denke, Sie meinen wahrscheinlich: echo 1 >/proc/sys/net/ipv4/ip_forwardfür die erste Zeile
Jason Tan
das war's ... ich weiß nicht, was mit dem letzten Teil dieser Zeile passiert ist ... korrigiert.
Torian
Ich denke, Sie müssten auch die Clients so einstellen, dass sie die Linux-Box als Gateway verwenden.
Jason Tan
Und damit die Weiterleitung auch nach einem Neustart erhalten bleibt, möchten Sie Folgendes tun: 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'
Jason Tan
1
@StudentsTea Ja, Sie tun, es sei denn , Ihre iptables' FORWARDTabelle ist zu einer global akzeptieren Richtlinie festgelegt. Sie würden aber trotzdem die natTabellenregeln brauchen .
Thomas Ward