LINUX.ORG.RU

Проброс HTTP-сессии в зависимости от подключенного пользователя

 ,


1

1

Ребят, привет. Пришел за советом. Надеюсь, кто-то сталкивался с такой задачей. В общем, у меня есть сервер, к которому по VPN подключены несколько компьютеров у которых запущен HTTP-сервер. Нужно сделать, чтобы залогинившись на сервере, можно было бы увидеть web с клиентского компьютера.

Много текста, постарался изобразить на картинке. В общем, если я захожу под user1, я хочу видеть web-морду компа device1. Так, если бы я локально ввёл его адрес в браузер. user2 -> device2. Надеюсь, не сумбурно написал. Возможно подскажете советом или хотя бы пнете что гуглить. Спасибо!

самый очевидный вариант, как мне кажется, это давать каждому клиенту фиксированный IP и уже в зависимости от него делать редирект на сервере средствами iptables

r0ck3r ★★★★★
()
Ответ на: комментарий от r0ck3r

Если я правильно понял что нужно - то клиент коннкетится не по VPN, а авторизируется в веб-морде например.

Тогда нужно играться с nginx-овыми proxy_pass-ами

Balantay
()
Ответ на: комментарий от Balantay

Если я правильно понял что нужно - то клиент коннкетится не по VPN, а авторизируется в веб-морде например.

а таки да, извиняюсь

r0ck3r ★★★★★
()
Ответ на: комментарий от Balantay

Клиентский комп к серверу - средствами VPN. Вообще, можно предположить, что клиентские компы будут в одной сети с сервером. И нужно чтобы пользователь введя логин/пароль на серверной вебморде (фронтенд я сделаю) попадал на веб-морду нужного компьютера. Редирект портов не получится.

Тогда нужно играться с nginx-овыми proxy_pass-ами

Не понял о чём вы, посмотрю. Если кинете информацию полезную - буду благодарен.

art_yomov
() автор топика
Ответ на: комментарий от art_yomov
iptables -t nat -I PREROUTING --src IP_КЛИЕНТА_№1 --dst IP_СЕРВЕРА_№1 -p tcp --dport 80 -j REDIRECT --to-ports 80
iptables -t nat -I PREROUTING --src IP_КЛИЕНТА_№2 --dst IP_СЕРВЕРА_№2 -p tcp --dport 80 -j REDIRECT --to-ports 80

Вроде так должно работать

r0ck3r ★★★★★
()
Последнее исправление: r0ck3r (всего исправлений: 2)

А как процесс «залогинивания» происходит?

Если это какая-то аутентификация на серверной стороне, можно делать header("Location: http://192.168.1.X/"); (или аналог) для разных пользователей. Или перенаправлять JavaScript'ом.

Deleted
()
Ответ на: комментарий от Deleted

Перенаправлять джаваскриптом нельзя - у юзера нет прямого доступа к компу (см. схему)

art_yomov
() автор топика
Ответ на: комментарий от Deleted

Аутентификация - самописанный скрипт на php или python. Это не проблема. Ваш вариант не подходит, у пользователя нет прямого доступа к компу. Он ведь нужен в вашем примере?

art_yomov
() автор топика
Ответ на: комментарий от art_yomov

Так, если бы я локально ввёл его адрес в браузер

у пользователя нет прямого доступа к компу

Что-то сложновата получается.

header("Location: ..."); как раз «локально вводит адрес в браузер». Был на странице http://192.168.1.1/, стал на странице http://192.168.1.X/

Если нужно сервером ходить на другие узлы и показывать их содержимое, то уже подсказали nginx proxy_pass. Но как это сделать красиво и просто навскидку не могу сказать.

Сколько у вас узлов («клиентов»)? У них статические адреса? Если немного, можно руками прописать location'ы, типа http://192.168.1.1/device1 будет проксировать на http://192.168.1.2/ и т.д. И при удачном логине редиректить пользователя на нужный урл

Deleted
()
Ответ на: комментарий от Deleted

Вот именно это решение сейчас и делаю, через proxy_pass. Пытаюсь всё же понять как сделать прокси через переменную, пока не гуглится. Спасибо

art_yomov
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.