Cómo usar las reglas de iptables NAT para hostapd

9

Mi PC está equipado con dos interfaces de red, wlan0y eth0, y quiero usar el puerto Wi-Fi como un punto de acceso en wlan0.

  • Utilicé la hostapdinstalación y funciona correctamente en modo de enrutamiento dentro de la red local; los usuarios pueden conectarse al punto de acceso y DHCP funciona correctamente en ambos segmentos.
  • La PC con hostapdno tiene ningún cortafuegos o iptablesreglas ( iptablesy cortafuegos deshabilitados), ya que solo quiero usar el cortafuegos incorporado del enrutador ADSL.

Mi configuración de red es la siguiente:

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

¿Cómo configuro una configuración NAT simple iptablesen la PC?

  • Quiero que todos los usuarios conectados a la red a través de hostapd(network 192.168.10.X) tengan acceso ay desde internet
  • No quiero filtrar ningún tráfico, solo NAT.

No puedo obtener una conexión a Internet desde el segmento WiFi:

  • El cliente conectado a WiFi tiene dirección DHCP 192.168.10.48, y el único tráfico está activado eth0desde la dirección:
    16:50:14.671587 ARP, Request who-has 192.168.0.48 tell 192.168.0.1, length 46
    
    Nota: La dirección 192.168.0.48no es 192.168.10.48, así que Masquerade parece funcionar.
  • Ya no puedo hacer ping 192.168.0.1[enrutador ADSL], que era posible antes.
  • ¿Qué pasa con el acceso desde Internet a los usuarios de WIFI? Por supuesto, lo configuraré en el enrutador ADSL, reenviando la agrupación de puertos IP particulares de Internet a la dirección IP particular de dicho usuario de WiFi.

EDITAR 1:

  • systemctlse muestra iptablescomo:
    iptables.service          loaded active exited
    
    Aunque corrí:
    systemctl enable iptables.service
    systemctl start iptables.service
    

EDITAR 2:

  • Funciona, pero cada vez que inicio la computadora, ¿es normal tener que agregar manualmente lo siguiente a través de un script de inicio?
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
mackowiakp
fuente
Vea mi respuesta actualizada a continuación ...
MLu

Respuestas:

6

En la forma más simple:

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

Eso permitirá a todos los usuarios de WiFi acceder a Internet.

Por supuesto, suponiendo que su otra configuración de enrutamiento ya esté hecha, a saber:

  1. Reenvío habilitado en el núcleo

    sysctl net.ipv4.ip_forward=1
    
  2. Reenvío habilitado en iptables:

    iptables -P FORWARD ACCEPT
    iptables -F FORWARD
    

Úselo tcpdump -nn -i eth0para observar el tráfico eth0en caso de problemas para ver si obtiene NAT correctamente, si la respuesta regresa, etc.

EDITAR: "Tengo que agregar manualmente cada vez que inicio la computadora (desde el script de inicio) ..." Depende de la distribución de Linux que tenga. Lamentablemente, cada distribución tiene su propia herramienta de Firewall: al final solo llaman, iptablespero por alguna razón los autores creen que ofuscar la forma en que funcionan las iptables es lo que los usuarios quieren.

Para responder a su pregunta, lo más probable es que su firewall se pueda configurar para agregar esta regla NAT automáticamente. Sin embargo, la forma exacta varía entre las distribuciones de Linux sin una buena razón. Triste pero cierto.

MLu
fuente
Todos los firewalls en la PC están deshabilitados. El único servicio en ejecución es iptables
mackowiakp
iptables == firewall: de alguna manera necesita configurar iptables para emitir esa regla MASQUERADE. ¿Cómo? Depende de su distribución de Linux. Debe haber un archivo de configuración en alguna parte. ¿Dónde? Depende de su distribución de Linux.
MLu
Así que has gobernado mu iptables:
mackowiakp
Por lo tanto, ha gobernado mu iptables: [root @ media ~] # iptables -L Chain INPUT (política ACCEPT) destino prot opt ​​origen destino Chain FORWARD (política ACCEPT) objetivo prot opt ​​origen destino Chain OUTPUT (política ACCEPT) destino prot opt ​​origen destino . Y yo y tal línea en el inicio: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE. Por lo tanto, mi implementación de iptables es un firewall "transparente" de facto - o sin firewall
mackowiakp
5

Escribí un firewall para todas las ocasiones. Lea el archivo README y el SCRIPT antes de usarlo. Incluí las reglas necesarias para HOSTAP

Partes esenciales:

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 requiere que las líneas siguientes sean ambas ACEPTADAS para funcionar

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
fuente