A solução é um pouco longa.
-
Use hostapd para criar um ponto de acesso em wlan1 . Existem guias sobre como fazer isso em toda a Internet, você pode encontrar qualquer um que você gosta. Você pode omitir a declaração bridge = br0 conforme a sugestão de Daniel B.
-
Agora, você pode fornecer um endereço IP à sua interface e apresentá-lo:
ip addr add 192.168.1.111/24 dev wlan1 ip link set dev wlan1 up
onde 192.168.1.111 é um endereço fora do seu pool DHCP do roteador, mas dentro da mesma sub-rede.
-
Agora temos que decidir sobre um intervalo de endereços IP para os clientes do seu hotspot. Isso é necessário não por motivos de DHCP, mas por causa de roteamento (veja o próximo marcador). Escolha uma pequena sub-rede da sua LAN principal que não seja não usada pelo seu roteador principal. Por exemplo, se o roteador distribui endereços IP no intervalo 192.168.1.2-192.168.1.100 , você pode usar algo como 192.168.1.112/28 , que inclui todos os endereços em o intervalo 192.168.1.112-192.168.127 .
-
Agora adicione a rota importantíssima :
ip route add 192.168.1.112/28 dev wlan1
Isso instrui seu kernel a enviar pacotes para seus clientes wifi através da interface correta, não através de sua interface padrão wlan0 onde você já tem uma regra
ip route add 192.168.1.0/24 dev wlan0
que vem do seu DHCP. Deixe-me repetir, porque é importante: a primeira rota tem precedência sobre a segunda porque é mais específica, então seu kernel saberá como alcançar seus clientes wifi usando a interface wlan1 .
-
Agora você precisa configurar o dnsmasq para trabalhar na interface wlan1 para distribuir endereços no intervalo 192.168.1.112/28 ; use o seguinte arquivo /etc/dnsmasq.conf :
domain-needed bogus-priv dhcp-authoritative interface=wlan1 server=8.8.8.8 server=8.8.4.4 expand-hosts domain=YourLanName.lan dhcp-range=192.168.1.112,192.168.1.127,12h dhcp-option=3,192.168.1.1 dhcp-host=4C:E6:76:00:11:22,PC_NAME,192.168.1.119,12h
que deve ser autoexplicativo. A próxima linha até a última instrução instrui dnsmasq a passar como o gateway não o IP da máquina na qual dnsmasq está em execução, mas o endereço IP do roteador / gateway true de sua LAN. Se você não quiser que os clientes de Wi-Fi possam acessar a Internet, você pode pular a linha de penúltimo. Inicie o dnsmasq,
systemctl start dnsmasq
Eu presumo que você está no systemd, caso contrário, o acima deve ser substituído por
service dnsmasq start
A última linha mostra como distribuir endereços reservados (= estáticos). Se você deseja atribuir a um dos seus clientes wifi e endereço IP fora do intervalo 192.168.1.112/28 , você pode fazê-lo, lembre-se de instruir o kernel onde esse endereço pode ser encontrado: por exemplo ,
ip route add 192.168.1.200/32 dev wlan1
-
Lembre-se de permitir o tráfego IPv4 através de suas interfaces,
echo 1 > /proc/sys/net/ipv4/ip_forward
e para MASQUERADE seu tráfego,
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Este último comando assegura que todo o tráfego que sai da interface wlan0 parece ter se originado do seu RPI, o que significa que seus clientes obterão as respostas às suas consultas; não se preocupe em saber quais pacotes retornados pertencem ao RPI e quais para um dos clientes, o kernel faz isso automaticamente para você.
-
Por fim, permitimos somente o tráfego IP entre wlan0 e wlan1 (este é o significado do encaminhamento IPv4), o que exclui os protocolos da Camada 2, como o ARP . Se desejar compensar essa deficiência, você pode usar o proxy-arp :
echo 1 > /proc/sys/net/ipv4/conf/wlan0/proxy_arp echo 1 > /proc/sys/net/ipv4/conf/wlan1/proxy_arp