Come utilizzare le regole NAT iptables per hostapd


9

Il mio PC è dotato di due interfacce di rete, wlan0e eth0, e voglio usare la porta WiFi come punto di accesso wlan0.

  • Ho usato la hostapdfunzione e funziona correttamente in modalità di routing all'interno della rete locale; gli utenti possono connettersi al punto di accesso e DHCP funziona correttamente in entrambi i segmenti.
  • Il PC con hostapdnon ha firewall o iptablesregole ( iptablese firewall disattivati), poiché desidero utilizzare solo il firewall integrato del router ADSL.

La mia configurazione di rete è la seguente:

  • 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)

Come posso configurare una semplice iptablesconfigurazione NAT su di essa sul PC?

  • Voglio che tutti gli utenti connessi alla rete tramite hostapd(rete 192.168.10.X) abbiano accesso ae da Internet
  • Non voglio filtrare alcun traffico, solo NAT.

Non riesco a ottenere una connessione a Internet dal segmento WiFi:

  • Il client connesso al WiFi ha un indirizzo DHCP 192.168.10.48e l'unico traffico è eth0attivo dall'indirizzo:
    16:50:14.671587 ARP, Request who-has 192.168.0.48 tell 192.168.0.1, length 46
    
    Nota: l'indirizzo 192.168.0.48non lo è 192.168.10.48, quindi le cuciture in maschera per funzionare.
  • Non riesco più a eseguire il ping 192.168.0.1[router ADSL], cosa che prima era possibile.
  • Che dire dell'accesso da Internet agli utenti WIFI? Naturalmente installerò nel router ADSL, inoltrando un particolare pooling di porte IP da Internet a un determinato indirizzo IP di tale utente WiFi.

MODIFICA 1:

  • systemctlmostra iptablescome:
    iptables.service          loaded active exited
    
    Anche se ho corso:
    systemctl enable iptables.service
    systemctl start iptables.service
    

MODIFICA 2:

  • Funziona, ma ogni volta che avvio il computer, è normale aggiungere manualmente quanto segue tramite uno script di avvio?
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Vedi la mia risposta aggiornata di seguito ...
MLu

Risposte:


6

Nella forma più semplice:

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

Ciò consentirà a tutti gli utenti WiFi l'accesso a Internet.

Ovviamente supponendo che l'altra configurazione del routing sia già stata eseguita, vale a dire:

  1. Inoltro abilitato nel kernel

    sysctl net.ipv4.ip_forward=1
    
  2. Inoltro abilitato in iptables:

    iptables -P FORWARD ACCEPT
    iptables -F FORWARD
    

Utilizzare tcpdump -nn -i eth0per controllare il traffico eth0in caso di problemi per vedere se viene NATed correttamente, se la risposta sta tornando, ecc.

EDIT: "Devo aggiungere manualmente ogni volta che avvio il computer (dallo script di avvio) ..." Dipende dalla distribuzione Linux che hai. Purtroppo praticamente ogni distro ha il suo strumento Firewall - alla fine chiamano solo iptablesma per qualche ragione gli autori credono che offuscare il modo in cui iptables funziona sia ciò che gli utenti vogliono.

Per rispondere alla tua domanda: è molto probabile che il tuo firewall possa essere configurato per aggiungere automaticamente questa regola NAT. Il modo esatto tuttavia varia tra le distribuzioni Linux senza una buona ragione. Triste ma vero.


Tutti i firewall su PC sono disabilitati. L'unico servizio in esecuzione è iptables
mackowiakp l'

iptables == firewall - In qualche modo è necessario configurare iptables per emettere quella regola MASQUERADE. Come? Dipende dalla tua distribuzione di Linux. Deve esserci un file di configurazione da qualche parte. Dove? Dipende dalla tua distribuzione di Linux.
MLu,

Quindi hai governato mu iptables:
mackowiakp il

Quindi hai governato mu iptables: [root @ media ~] # iptables -L Chain INPUT (policy ACCEPT) target prot opt ​​source source Chain FORWARD (policy ACCEPT) target prot opt ​​source source Chain OUTPUT (policy ACCEPT) target prot opt ​​source source . E io e tale linea all'avvio: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE. Quindi la mia implementazione di iptables è di fatto un firewall "trasparente" - o no-firewall
mackowiakp

5

Ho scritto un firewall per tutte le occasioni. Leggere il file README e lo SCRIPT prima di utilizzarlo. Ho incluso le regole necessarie per HOSTAP

Parti essenziali:

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

HostAP richiede che le linee sottostanti siano entrambe ACCETTATE per funzionare

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

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.