stalker86 Posted October 17, 2018 Понадобилось тут изобразить Captive portal. Взял связку из nginx+ iptables... но что-то не выходит каменный цветок, нужна помощь зала: Завёл на стенде тестовую сеть, на шлюзе сделал (192.168.11.3 выдаётся для wifi клиентов как def gw по dhcp) -A PREROUTING ! -d 192.168.11.3/32 -i ens4 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.11.3 Далее в nginx заведено 2 виртуальных хоста: === server { # # Listening on IP Address. # # This is the website iptables redirects to listen 80 default_server; root /var/www/html/portal; access_log /var/log/nginx/access1.log atop; port_in_redirect off; keepalive_timeout 0; location / { return 302 http://test.ppcom:82; } } server { listen 82; server_name test.ppcom; root /var/www/html/portal; access_log /var/log/nginx/access2.log atop; add_header Cache-Control no-cache; # set the Expires header to 31 December 2037 23:59:59 GMT, and the Cache-Control max-age to 10 years expires 0; location / { try_files $uri $uri/ /index.html; } } === Локальный DNS резолвит test.ppcom так же в 192.168.11.3. Но не выходит каменный цветок. Но если портал повесить на 80 порт сразу,куда заворачивает трафик iptables то на андроидах всё таки рисуется страница от портала. Вопрос - что упускаю их вида,что не отрабатывает вариант с редиректом из nginx на страницу портала? Да..если 1 вхост повесить на 82 порт и сюда заворачивать iptables-ами,а портал перевесить на 80 порт,то не работает с точно такой же диагностикой. До 2 Vhost-а с порталом запросов вообще нет и это видно в дампе трафика. Причём в дампе я вижу, что nginx отдаёт Hypertext Transfer Protocol HTTP/1.1 302 Moved Temporarily\r\n Server: nginx/1.14.0\r\n Date: Sun, 14 Oct 2018 17:07:54 GMT\r\n Content-Type: text/html\r\n Content-Length: 161\r\n Connection: close\r\n Location: http://test.ppcom:82\r\n \r\n Собственно дамп трафика, судя по всему редирект вообще не отрабатывает. Как минимум проверено на 2 телефонах - xiaomi (дамп приложен) и на соньке... симптомы одинаковые dump7_redir.pcap Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
murano Posted October 18, 2018 (edited) Для начала разрешите клиенту ходить на порты эти в инете. Редирект не сработает, если пакет был отклонен. Он должен иметь возможность уйти к получателю и тогда уже перехватываться и редиректиться. Edited October 18, 2018 by murano Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
stalker86 Posted October 18, 2018 Ммм.. на текущий момент в iptables всего 1 правило, котрыое все пакеты на 80 порт заворачивает на локальный веб-сервер., который на этом же роутере сейчас. И test.ppcom:82 доступен из гостевой сети. Собственно если же сразу делаю заворачивание iptables на 82 (вместо 80) порт,где висит портал или меняю вхсоты местами то всё ок. А так в таблесах висит только: [root@host-20 ~]# iptables-save -c # Generated by iptables-save v1.4.21 on Thu Oct 18 12:07:00 2018 *nat :PREROUTING ACCEPT [4460:814094] :INPUT ACCEPT [4425:806706] :OUTPUT ACCEPT [158:12043] :POSTROUTING ACCEPT [54:3235] [20:1200] -A PREROUTING ! -d 192.168.11.3/32 -i ens4 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 80 COMMIT # Completed on Thu Oct 18 12:07:00 2018 # Generated by iptables-save v1.4.21 on Thu Oct 18 12:07:00 2018 *filter :INPUT ACCEPT [5493:906743] :FORWARD ACCEPT [250:43242] :OUTPUT ACCEPT [1023:345545] COMMIT # Completed on Thu Oct 18 12:07:00 2018 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
stalker86 Posted October 18, 2018 Есть смутное ощущение, что оно даже не пытается пройти по 302 редиректу, вернее установить новый коннект со 2 вхостом и работать нужно в рамках единственного вхоста... По крайней мере это объяснило бы почему я не вижу пакетов на 2 vhost куда пытаюсь сделать 302.. То есть на 2 вхост вообще ни 1 пакета. Прикладываю свежие дампики с логами nginx test.conf конфиг вхостов нгинкса direct - таблесам заворачиваю сразу на портал redir - пытаюсь на портал сделать с дефолтного вхоста 302 portal_debug_18102018.tar Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted October 22, 2018 Когда я колхозил похожее, то самым главным было не забыть исключить из редиректа трафик на сам портал — постоянно про это забывал. То есть нужно перепроверить все ACL, в них ошибка. Но сейчас бы я просто взял Chillispot. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
default_vlan Posted October 22, 2018 В 19.10.2018 в 00:59, stalker86 сказал: Есть смутное ощущение Ощущениями настраиваете?) tcpdump что говорит? Логи в nginx отключены? извиняюсь, за такие вопросы, самого в это тыкали "улицы" сетевого администрирования)) Лично мне интересно, каким образом будет работать редирект для того же гугл, с его 443 на внутренний 443/80. Вроде как вообще ничего показать не должно будет ибо ssl, sni и прочее. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
stalker86 Posted October 22, 2018 В общем тут всё оказалось куда интереснее.. Трафик дропала сама wifi точка, хотя настроена была в режиме бриджа. Там среди прочих настроек нашлось - оно по умолчанию дропало трафик со всех серых подсетей. Исключил портал из... и всё заработало 20 минут назад, default_vlan сказал: Ощущениями настраиваете?) tcpdump что говорит? Логи в nginx отключены? разумеется были включены..и по логам/дампам я не видел обращений ко 2 вхосту, на который редиректил. и в дампе видел кучку запросов и по этому складывалось ощущение что androd просто игнорирует редирек и долбит в 1 вхост.. А по факту он просто не мог достучаться до 2 вхоста. И по этой же причине портал работал, если трафик сразу в портал таблесами заворачивался Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...