приветики-пистолетики.
делаю так называемый captive portal, когда клиенты свободно подключаются по wi-fi, но для использования интернетов им необходимо пройти некую проверку (регистрацию) на локальном сайте, тобишь при попытке зайти на любой сайт, их перенаправляет ко мне, а весь прочий трафик попросту дропается.
оно работает. реализация достаточно простая. весь трафик из mangle сперва заворачивается в новое кольцо, затем, если ты «свой» клиент, то сразу выходим из кольца (-j RETURN), а если мы тебя не знаем, тогда делаем пометку (-j MARK). именно этот список в этом кольце подлежит изменению (добавлению/удалению) IP/MAC-адресов через сайт. затем всех помеченных при попытке зайти на 80/443, перенаправляем к себе на локальный сайт, а весь прочий трафик попросту дропаем. ну и в конце концов успешно форвардим если всё ок.
# создаём кольцо
iptables -t mangle -N wlp0s19f2u2_mark
# все пакеты из ви-фи отправляем в это кольцо
iptables -t mangle -A PREROUTING -i wlp0s19f2u2 -j wlp0s19f2u2_mark
# доверенные клиенты из кольца выходят сразу же (адреса инсертим в начало списка)
# iptables -t mangle -I wlp0s19f2u2_mark 1 -m mac --mac-source a8:87:b3:22:60:4d -j RETURN
# iptables -t mangle -I wlp0s19f2u2_mark 1 -s 192.168.0.1 -j RETURN
# этот список редактируется через сайт shell_exec();
# если ты всё ещё в кольце, тогда ставим метку
iptables -t mangle -A wlp0s19f2u2_mark -j MARK --set-mark 1
# всех с меткой перенаправляем к себе, когда они открывают сайты 80/443
iptables -t nat -A PREROUTING -i wlp0s19f2u2 -m mark --mark 1 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80
iptables -t nat -A PREROUTING -i wlp0s19f2u2 -m mark --mark 1 -p tcp --dport 443 -j DNAT --to-destination 10.0.0.1:80
# всех с меткой при прочем трафике просто дропаем
iptables -t filter -A fw-interfaces -i wlp0s19f2u2 -m mark --mark 1 -j DROP
iptables -t filter -A fw-interfaces -i wlp0s19f2u2 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.254.0/16 -o enp3s5 -j MASQUERADE
проблема заключается в том, что при заходе на https-сайты у меня не работает редирект на мой локальный :80 сайт. то есть, если я удалив себя из «вайт-листа», захожу на какой-нибудь быдланет без https, то да, открывается мой локальный :80 сайт спокойно. если же я пытаюсь открыть пrавославный ЛОР по https, то фиг там.
тестирую wi-fi сеть на андроид смартфоне. я считаю, проблема заключается в том, что браузер изначально пытается создать https соединение, а когда iptables пытается ему подсунуть фейковый 80 порт, оно обсирается, простите, и дальше не идёт. и происходит завтык на этом.
можно ли это как-то починить? спасибо.