Трудности в чем ?
Например любой роутер в режиме бриджа, vlan идет до сервера софт hotspot ubuntu :)
На сервере dhcp сервер например dnsmasq выдает ip, mask, gw, dns
В iptables
1. Выпускаем всех кто в ipset
2. Редирект всех на нашу страницу
-A PREROUTING -m set --match-set goodip src -j ACCEPT
-A PREROUTING -i eth2 -s 10.0.0.0/8 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80
На web сервере ловим все - показываем страничку с запросом сотового и кода
При вводе сотового, если в сервер например вставлена флешка отправляем код доступа с помощью gnokii
/usr/bin/echo \"$code\" | /usr/bin/gnokii --config /etc/sms.conf --sendsms \"$phone\"
Если код совпадает , то добавляем правило в ipset (можно создать список со временем устаревания записей в N часов
/usr/sbin/ipset -N goodip hash:ip timeout 43200)
На коленке пишется за день с перекурами.