I wanted to write a captive portal from scratch using the following:
hostapd v2.10
to setup my wlan0
as an AP and eth0
is connected to the internet router.
#/etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=MyWIFI
hw_mode=g
channel=11
dnsmasq v2.86
as DHCP & DNS
#/etc/dnsmasq.conf
interface=wlan0
dhcp-range=10.0.0.2,10.0.0.250,24h
dhcp-option=3,10.0.0.1
dhcp-option=6,10.0.0.1
domain-needed
bogus-priv
no-resolv
address=/#/10.0.0.1
iptables
to share internet of eth0
to wlan0
sysctl -w net.ipv4.ip_forward=1
sysctl -p
iptables -X
iptables -F
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t mangle
iptables -X
iptables -t nat -X
iptables -t nat -F
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
Ubuntu 22.04 Server
Apache v2.4.52
as my webserver
#Added below config in /etc/apache2/sites-available/000-default.conf. Just right
#below the </VirtualHost>
<Directory "/var/www/html">
RewriteEngine On
RewriteBase /
RewriteCond ${HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ / [L,QSA]
</Directory>
Angular
is used to write the Captive Portal
nodejs
is used to write the APIs for the Captive Portal
I managed to trigger the Sign-in to network for Android which when tapped redirects to the Captive Portal
& for iOS the redirection is automatic.
In the Captive Portal, I have a button to accept a Voucher Code that is validated in the backend (nodejs
). My objective is to allow the device with a valid Voucher Code to access the internet with a limited time and should not be redirected anymore to the Captive Portal.
But I don't know how to proceed since in my dnsmasq.conf
I have configured address=/#/10.0.0.1
and as far as I know this will redirect back network traffic to my dnsmasq
server where apache
is configured to redirect the request to the Captive Portal
.
Hope someone could lead me to the right direction. Thank you very much.