Verwendung der NAT iptables-Regeln für hostapd

9

Mein PC ist mit zwei Netzschnittstellen wlan0& ausgestattet eth0, und ich möchte den WLAN-Anschluss als Zugangspunkt verwenden wlan0.

  • Ich habe die hostapdEinrichtung verwendet und sie funktioniert im Routing-Modus innerhalb des lokalen Netzwerks ordnungsgemäß. Benutzer können eine Verbindung zum Access Point herstellen, und DHCP funktioniert in beiden Segmenten ordnungsgemäß.
  • Der PC mit hostapdhat keine Firewalls oder iptablesRegeln ( iptablesund Firewalls deaktiviert), da ich nur die eingebaute Firewall des ADSL-Routers verwenden möchte.

Meine Netzkonfiguration lautet wie folgt:

  • PC with hostapd -> cable connection -> ADSL router
  • wlan0 -> eth0 <-> 192.168.0.1 <-> internet
  • 192.168.10.1 -> 192.168.0.7 -> static routing to 192.168.10.X

PC ifconfig:

eth0  Link encap:Ethernet  HWaddr 00:12:3F:F2:31:65
      inet addr:192.168.0.7  Bcast:192.168.0.255  Mask:255.255.255.0
      inet6 addr: fe80::212:3fff:fef2:3165/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:2169539 errors:0 dropped:0 overruns:0 frame:0
      TX packets:1008097 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:3056198487 (2.8 GiB)  TX bytes:72727161 (69.3 MiB)
      Interrupt:16

lo    Link encap:Local Loopback
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:65536  Metric:1
      RX packets:3398 errors:0 dropped:0 overruns:0 frame:0
      TX packets:3398 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:495444 (483.8 KiB)  TX bytes:495444 (483.8 KiB)

mon.wlan0  Link encap:UNSPEC  HWaddr 00-14-A5-04-94-3C-90-F0-00-00-00-00-00-00-00-00
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:151 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:17092 (16.6 KiB)  TX bytes:0 (0.0 b)

wlan0 Link encap:Ethernet  HWaddr 00:14:A5:04:94:3C
      inet addr:192.168.10.1  Bcast:192.168.10.255  Mask:255.255.255.0
      inet6 addr: fe80::214:a5ff:fe04:943c/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:1502 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:0 (0.0 b)  TX bytes:279392 (272.8 KiB)

Wie konfiguriere ich eine einfache NAT- iptablesKonfiguration auf dem PC?

  • Ich möchte, dass alle Benutzer, die über hostapd(Netzwerk 192.168.10.X) mit dem Netzwerk verbunden sind, Zugang zum und vom Internet haben
  • Ich möchte keinen Datenverkehr filtern, nur NAT.

Ich kann vom WiFi-Segment keine Verbindung zum Internet herstellen:

  • Der mit WiFi verbundene Client hat eine DHCP-Adresse 192.168.10.48, und der einzige Datenverkehr ist eth0von der Adresse aus aktiv:
    16:50:14.671587 ARP, Request who-has 192.168.0.48 tell 192.168.0.1, length 46
    
    Hinweis: Die Adresse ist 192.168.0.48nicht 192.168.10.48, daher funktioniert Masquerade.
  • Ich kann 192.168.0.1[ADSL-Router] nicht mehr pingen , was vorher möglich war.
  • Was ist mit dem Zugang des Internets zu den WIFI-Benutzern? Natürlich werde ich im ADSL-Router einrichten und bestimmte IP-Port-Pools vom Internet an bestimmte IP-Adressen eines solchen WiFi-Benutzers weiterleiten.

EDIT 1:

  • systemctlzeigt iptablesals:
    iptables.service          loaded active exited
    
    Obwohl ich gelaufen bin:
    systemctl enable iptables.service
    systemctl start iptables.service
    

EDIT 2:

  • Es funktioniert, aber ist es normal, jedes Mal, wenn ich den Computer starte, Folgendes manuell über ein Startskript hinzufügen zu müssen?
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Mackowiakp
quelle
Siehe meine aktualisierte Antwort unten ...
MLu

Antworten:

6

In der einfachsten Form:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Dadurch können alle WLAN-Benutzer auf das Internet zugreifen .

Vorausgesetzt natürlich, Ihr anderes Routing-Setup ist bereits abgeschlossen, nämlich:

  1. Weiterleitung im Kernel aktiviert

    sysctl net.ipv4.ip_forward=1
    
  2. Weiterleitung aktiviert in iptables:

    iptables -P FORWARD ACCEPT
    iptables -F FORWARD
    

Verwenden Sie diese Option, tcpdump -nn -i eth0um den Datenverkehr eth0bei Problemen zu überwachen und festzustellen, ob er ordnungsgemäß NAT-fähig ist, ob die Antwort zurückkommt usw.

BEARBEITEN: "Ich muss jedes Mal manuell hinzufügen, wenn ich den Computer starte (vom Startskript) ..." Es hängt davon ab, welche Linux-Distribution Sie haben. Leider hat so ziemlich jede Distribution ihr eigenes Firewall-Tool - am Ende rufen sie nur an, iptablesaber aus irgendeinem Grund glauben die Autoren, dass die Benutzer die Funktionsweise von iptables verschleiern wollen.

Um Ihre Frage zu beantworten: Ihre Firewall kann höchstwahrscheinlich so konfiguriert werden, dass diese NAT-Regel automatisch hinzugefügt wird. Der genaue Weg variiert jedoch zwischen Linux-Distributionen ohne guten Grund. Traurig aber wahr.

MLu
quelle
Alle Firewalls auf dem PC sind deaktiviert. Der einzige laufende Dienst ist iptables
mackowiakp
iptables == Firewall - Irgendwie müssen Sie iptables konfigurieren, um diese MASQUERADE-Regel auszugeben. Wie? Dies hängt von Ihrer Linux-Distribution ab. Es muss irgendwo eine Konfigurationsdatei geben. Wo? Dies hängt von Ihrer Linux-Distribution ab.
MLu
Sie haben also entschieden:
Mackowiakp
Sie haben also mehrere Optionen festgelegt: [root @ media ~] # iptables -L Chain INPUT (Richtlinie ACCEPT) Zielprotopt-Quellziel Chain FORWARD (Richtlinie ACCEPT) Zielprotopt-Quellziel Chain OUTPUT (Richtlinie ACCEPT) Zielprotopt-Quellziel . Und ich und eine solche Zeile beim Start: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE. Meine Implementierung von iptables ist also de facto "transparente" Firewall - oder keine Firewall
Mackowiakp
5

Ich habe für alle Gelegenheiten eine Firewall geschrieben. Bitte lesen Sie die README-Datei und das SCRIPT, bevor Sie es verwenden. Ich habe die notwendigen Regeln für HOSTAP aufgenommen

Wesentliche Teile:

HostAP

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

Für HostAP müssen die folgenden Zeilen AKZEPTIERT sein, damit sie funktionieren

iptables -A INPUT -j ACCEPT >> /dev/null 2>&1 
iptables -A OUTPUT -j ACCEPT >> /dev/null 2>&1

https://github.com/diveyez/fw.sh

Ricky Neff
quelle