DNSMASQ config para portal cativo

4

Estou tentando criar um hotspot wifi de portal cativo.

Objetivo da configuração:

  1. Os usuários que se conectarem ao hotspot por meio do wlan0 nunca devem ter permissão para acessar a Internet através da eth1.

  2. Para o "Entrar na rede wifi" para aparecer no android, iphone e qualquer dispositivo que se conecte, eu estou tentando encaminhar as solicitações que vão para o link e outro URL para outros sistemas operacionais, ainda não descobri, para meu servidor local e retornei o que os servidores reais retornariam.

Eu uso dnsmasq e hostapd para conseguir isso.

O problema: quando eu uso o endereço = / # / 127.24.2.1 no dnsmasq.conf, os pedidos da Internet que saem de scripts internos também falham. Acho que estou seguindo a man page do dnsmasq que diz como usar o dnsmasq para filtrar somente o tráfego da interface wlan0.

o que devo fazer ainda mais?

A máquina tem essas interfaces

    eth1      Link encap:Ethernet  HWaddr 00:1e:06:30:5b:03
          inet addr:192.168.0.107  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::21e:6ff:fe30:5b03/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:37047 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1752 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3351437 (3.1 MiB)  TX bytes:176100 (171.9 KiB)

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:796 errors:0 dropped:0 overruns:0 frame:0
          TX packets:796 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:284838 (278.1 KiB)  TX bytes:284838 (278.1 KiB)

wlan0     Link encap:Ethernet  HWaddr 98:de:d0:1b:95:5a
          inet addr:172.24.1.1  Bcast:172.24.1.255  Mask:255.255.255.0
          inet6 addr: fe80::9ade:d0ff:fe1b:955a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:576 (576.0 B)

O DNSMASQ se parece com isso

interface=wlan0      # Use interface wlan0
listen-address=172.24.1.1 # Explicitly specify the address to listen on
#bind-interfaces      # Bind to the interface to make sure we aren't sending things elsewher$
server=8.8.8.8       # Forward DNS requests to Google DNS
domain-needed        # Don't forward short names
bogus-priv           # Never forward addresses in the non-routed address spaces.
dhcp-range=172.24.1.50,172.24.1.150,12h # Assign IP addresses between 172.24.1.50 and 172.24$
address=/#/172.24.1.1
except-interface=eth1

Eu uso um servidor expresso nodejs e faço isso

 app.get('/generate_204', function(req, res) {
        console.log('generate 204 hit');
        res.statusCode = 302;
        res.setHeader("Location", "/");
        res.end();
    });

Eu criei o hotspot usando hostapd, a configuração é

    # This is the name of the WiFi interface we configured above
interface=wlan0

# Use the nl80211 driver with the brcmfmac driver
driver=nl80211

# This is the name of the network
ssid=Pi3-AP

# Use the 2.4GHz band
hw_mode=g

# Use channel 6
channel=6

# Enable 802.11n
ieee80211n=1

# Enable WMM
wmm_enabled=1

# Enable 40MHz channels with 20ns guard interval
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]

# Accept all MAC addresses
macaddr_acl=0

# Use WPA authentication
auth_algs=1

# Require clients to know the network name
ignore_broadcast_ssid=0

# Use WPA2
wpa=2

# Use a pre-shared key
wpa_key_mgmt=WPA-PSK

# The network passphrase
wpa_passphrase=raspberry

# Use AES, instead of TKIP
rsn_pairwise=CCMP

Eu tentei explicar o requisito, não tenho certeza se fiz bem a parte explicativa. Há outra questão que eu levantei aqui no serverfault para o mesmo problema, que ficou marcado fora do tópico, a leitura vai fazer você entender claramente o requisito. link

    
por 55597 11.01.2017 / 16:10

2 respostas

3

when I use address=/#/127.24.2.1, the internet requests that go from internal scripts also fail

Parece que os seus scripts internos usam para resolver os nomes DNS do mesmo servidor dnsmasq local que os seus clientes wifi.

Verifique sua configuração de /etc/resolv.conf e, se houver, o endereço do servidor dnsmasq ( 127.24.2.1 ou 127.0.0.1 ou outro) - remova-o. Em vez disso, use seus servidores DNS do ISP, ou o DNS do Google, ou qualquer outro que você preferir, que não substitua nenhum endereço para 127.24.2.1 .

Nota. Se você usar o resolvconf para gerar /etc/resolv.conf (no resolv.conf aviso atual como # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN ), então você precisa editar as configurações em /etc/resolvconf/resolv.conf.d/ e depois gerar novamente /etc/resolv.conf (reiniciar a rede ou melhor - reiniciar o sistema inteiro)

Outra possibilidade: remover o pacote resolvconf e editar /etc/resolv.conf

    
por 16.01.2017 / 11:07
1

Caso alguém esteja curioso sobre uma atualização (em 2017) para essa pergunta, consegui recriar o problema e descobrir uma solução.

Desative o dnsmasq para resolver a interface de loopback (em /etc/dnsmasq.conf ):

except-interface=lo

Adicione ao arquivo final do resolvconf (em /etc/resolvconf/resolvconf.conf.d/tail )

nameserver 8.8.8.8

Reiniciar serviços

sudo systemctl restart dnsmasq
sudo resolvconf -u

O que isso faz

dnsmasq agora rejeitará qualquer solicitação de DNS feita no localhost, e o localhost terá que recorrer ao uso do segundo Servidor de Nomes na linha (que é agora 8.8.8.8)

E se não houver um diretório /etc/resolvconf/resolvconf.conf.d/ ?

Você pode ter o openresolv instalado ... Eu desinstalei o openresolv e instalei o resolvconf. Você encontrará outros problemas, mas isso provavelmente não é relevante para essa resposta.

    
por 09.07.2017 / 14:14