Como usar regras de iptables NAT para hostapd

9

Meu PC está equipado com duas interfaces de rede, wlan0& eth0, e eu quero usar a porta WiFi como um ponto de acesso wlan0.

  • Eu usei o hostapdrecurso e ele funciona corretamente no modo de roteamento na rede local; os usuários podem se conectar ao ponto de acesso e o DHCP funciona corretamente nos dois segmentos.
  • O PC com hostapdnão possui firewalls ou iptablesregras ( iptablese firewalls desativados), pois eu quero usar apenas o firewall interno do roteador ADSL.

Minha configuração de rede é a seguinte:

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

Como faço para configurar uma configuração NAT simples iptablesno PC?

  • Desejo que todos os usuários conectados à rede via hostapd(rede 192.168.10.X) tenham acesso à e da Internet
  • Eu não quero filtrar nenhum tráfego, apenas apenas NAT.

Não consigo obter uma conexão à Internet a partir do segmento WiFi:

  • O cliente conectado ao WiFi tem endereço DHCP 192.168.10.48e o único tráfego está no eth0endereço:
    16:50:14.671587 ARP, Request who-has 192.168.0.48 tell 192.168.0.1, length 46
    
    Nota: Como o endereço 192.168.0.48não é 192.168.10.48, o Masquerade parece funcionar.
  • Não consigo mais executar ping no 192.168.0.1[roteador ADSL], o que era possível antes.
  • E o acesso da Internet aos usuários WIFI? É claro que irei configurar no roteador ADSL, encaminhando um pool de portas IP específico da Internet para um endereço IP específico desse usuário WiFi.

EDIT 1:

  • systemctlmostra iptablescomo:
    iptables.service          loaded active exited
    
    Mesmo que eu corri:
    systemctl enable iptables.service
    systemctl start iptables.service
    

EDIT 2:

  • Funciona, mas sempre que eu inicializo o computador, é normal adicionar manualmente o seguinte por meio de um script de inicialização?
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
mackowiakp
fonte
Veja minha resposta atualizada abaixo ...
MLu 08/07/13

Respostas:

6

Na forma mais simples:

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

Isso vai permitir que todos os utilizadores de WiFi acessar a Internet.

Obviamente, supondo que sua outra configuração de roteamento já esteja concluída, a saber:

  1. Encaminhamento ativado no kernel

    sysctl net.ipv4.ip_forward=1
    
  2. Encaminhamento ativado em iptables:

    iptables -P FORWARD ACCEPT
    iptables -F FORWARD
    

Use tcpdump -nn -i eth0para assistir o tráfego, eth0em caso de problemas, para ver se o NAT é adequado corretamente, se a resposta está voltando etc.

EDIT: "Eu tenho que adicionar manualmente sempre que inicializar o computador (a partir do script de inicialização) ..." Depende da distribuição do Linux que você possui. Infelizmente, praticamente todas as distros têm sua própria ferramenta de firewall - no final, elas estão apenas ligando, iptablesmas por algum motivo os autores acreditam que ofuscar a maneira como o iptables funciona é o que os usuários desejam.

Para responder à sua pergunta - o mais provável é que o seu firewall possa ser configurado para adicionar essa regra NAT automaticamente. Entretanto, a maneira exata varia entre as distribuições do Linux sem uma boa razão. Triste mas verdadeiro.

MLu
fonte
Todos os firewalls no PC estão desativados. O serviço só correr é iptables
mackowiakp
iptables == firewall - De alguma forma, você precisa configurar o iptables para emitir a regra MASQUERADE. Quão? Depende da sua distribuição Linux. Deve haver um arquivo de configuração em algum lugar. Onde? Depende da sua distribuição Linux.
MLU
Então você tem mu iptables determinou:
mackowiakp
Portanto, você deve ter muitas regras: [root @ media ~] # iptables -L Destino da origem da entrada de cadeia INPUT (política ACCEPT) de destino de proteção da origem Destino da cadeia FORWARD (política de aceitação) para destino da opção de destino da cadeia de saída (destino da política) . E eu e essa linha na inicialização: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE. Assim, a minha implementação do iptables é de facto "transparente" firewall - ou não firewall
mackowiakp
5

Eu escrevi um firewall para todas as ocasiões. Por favor, leia o README e o SCRIPT antes de usá-lo. Incluí as regras necessárias para o HOSTAP

Peças essenciais:

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

O HostAP exige que as linhas abaixo sejam ACEITAS 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
fonte