LINUX.ORG.RU
решено ФорумAdmin

Подключение к одному серверу в зависимости от сети

 , , ,


0

1

Дома находится файлопомойка на rasberry pi, доступ в глобальную сеть реализуется через сервер, на котором стоит реверс-прокси. Нужно чтобы когда я нахожусь в локальной сети, запросы шли напрямую в rasberry, если же доступа через локальный ip нет, - переключиться на глобальний ip с сохранением соединения. На данный момент настроил с помощью nginx(на ноутбуке) и его reverse proxy

stream {
  upstream ssh_rpi {
    server ip1:22 max_fails=0 fail_timeout=1s;
    server ip2:3256 backup;
  }

  server {
    listen localhost:7822;
    proxy_pass ssh_rpi;
  }
}

Если устанавливать новое соединение - все работает, но если переключиться на другую сеть (с активным соединением по локальной сети) - соединение не переключается

Именно вопрос: Можно ли настроить nginx(на клиенте, с которого будет подключение к rasberry), чтобы соединение перенеслось на другой ip (тестирую сечас с ssh), или куда копать? Думал также попытаться настроить с помощью ifenslave но тогда на телефоне я не смогу это реализовать

p.s. nginx сечас стоит на ноутбуке, подключаюсь через локалку, на каждом девайсе (который должен иметь доступ к rasberry) хочу сделать отдельный прокси

P.P.S. Очень желательно чтобы сервис находился на устройстве, с которого будет выполнятся подключение. Nginx не обязателен, но желателен (на телефон он просто уже есть, не нужно ничего придумывать)


Вам не проще будет поднять DNS на сервере, который будет отдавать локальный адрес? Или обязательно сделать это через nginx? В качестве бонуса если у вас будет "локальный" кэширующий dns-сервер для клиентов домашней сети получите еще и укорение загрузки страничек.

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

Желательно, чтобы сервис работал именно на том девайсе, с которого будут подключаться Тогда если я правильно понимаю мне придется на уровне DNS-сервера проверять на доступность через локальное соединение?

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

Не понял. Давайте я попробую объяснить что я предлагаю - у вас есть локальная сеть 192.168.0.0/24, сервером для связи с внешним миром выступает 192.168.0.1, адрес малины 192.168.0.2. На 192.168.0.1 я предлагаю поставить и dns-сервер и прописать его в параметрах всех устройств домашней сети (это не будет проблемой, адреса же вы и так по dhcp раздаете). Предположим что у вас есть домен, скажем example.com, и клиенты подключаются как раз по этому домену.

Клиент из внешней сети обращается к какому-нибудь там гугловому dns, и тот говорит что у example.com ip 1.1.1.1. Клиент идет по этому адресу, попадает на внешний интерфейс вашего сервера (ну или на роутер а оттуда на сервер, не важно) и сервер проксирует запрос на малину. Клиент из домашней сети спрашивает адрес у локального dns (192.168.0.1), и тот возвращает ему уже 192.168.0.2 - клиент идет туда и попадает сразу на малину. То есть вроде как все то, что вам и нужно.

К слову сказать, не обязательно проксировать запросы через nginx из вне если он вам не нужен - можете это сделать через iptables по порту например.

Желательно, чтобы сервис работал именно на том девайсе, с которого будут подключаться

Вот этот момент я не совсем понял, вы же пишете что сервис работает на малине.

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

Сама проблема:

  1. С ноутбука через локальную сеть подключаюсь к малинке через ssh (localhost:7822) [Соединение1]
  2. Подключаюсь к другой сети Соединение1 не работает, пока или не кильнуть, или пока таймаут не пройдет. Нужно это исправить
yitet ()
Ответ на: комментарий от yitet

DNS не решит проблемы автоматического переключения

Если из домашней сети вы переходите во внешнюю то должно решить, локальный адрес же не будет доступен, клиент должен попробовать переключиться.

При переходе из внешней сети в домашнюю - да, тут будут проблемы, надо как-то разорвать соединение чтоб клиент переподключился заново.

Вообще я пропустил "Нужно чтобы когда я нахожусь в локальной сети, запросы шли напрямую в rasberry, если же доступа через локальный ip нет, - переключиться на глобальний ip с сохранением соединения." - у вас не получится это сделать в том же соединении в любом случае, как бы и на каком уровне вы не настроили.

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

Тогда спасибо, значит поставлю на соединение таймаут гдето 10 секунд, и пусть разрывает соединение, затем восстановится или вручную или автоматически

yitet ()