Как осуществить перенаправление запросов от сервера А к серверу В?

Как можно перенаправить запросы третьего устройства, подключенного к серверу A, через сервер B, учитывая, что сервер A имеет ограниченный доступ к интернету и не может связаться с сервером B, в то время как сервер B имеет полный доступ к интернету и может подключаться к серверу A?
  • 30 октября 2024 г. 4:12
Ответы на вопрос 2
Для того чтобы перенаправить запросы от сервера А к серверу В при описанных вами условиях, потребуется реализовать метод, который будет позволять устройству, подключенному к серверу А, отправлять свои запросы через сервер В. Это можно сделать несколькими способами, в зависимости от ваших требований к производительности и сложности. Рассмотрим один из вариантов.

### Вариант с использованием SSH-туннелирования

1. **Установка SSH-соединения**: Для начала, сервер B должен установить SSH-соединение с сервером A. Используйте команду `ssh` для создания обратного туннеля:

   ```bash
   ssh -R <порт_на_Сервере_B>:localhost:<порт_Сервера_A> user@server_B
   ```

   Здесь `<порт_на_Сервере_B>` — это порт на сервере B, на который будут поступать запросы от устройства, подключенного к серверу A, а `<порт_Сервера_A>` — это порт, который слушает на сервере A.

2. **Настройка устройства**: Устройство, подключенное к серверу A, должно быть настроено так, чтобы отправлять все свои HTTP-запросы на сервер B на указанный порт. 

3. **Проброс портов**: Сервер B будет слушать на `<порт_на_Сервере_B>`, а все запросы, поступающие на этот порт, будут перенаправлены на сервер A по порту `<порт_Сервера_A>` через SSH-туннель.

### Вариант с использованием прокси-сервера

Если SSH-туннелирование по каким-то причинам не подходит, можно рассмотреть возможность настройки серверного прокси:

1. **Установка прокси-сервера на сервере B**: Установите и настройте прокси-сервер, например, `Squid`, на сервере B.

2. **Настройка сервера A**: Сервер A должен иметь скрипт или сервер-прокси, который будет обрабатывать запросы от устройства и перенаправлять их на сервер B через прокси (или напрямую, в зависимости от доступа).

3. **Настройка устройства**: На устройстве, подключенном к серверу A, настройте HTTP-запросы так, чтобы они шли через прокси-сервер на сервере B.

### Вариант с использованием VPN

Ещё один способ — использование VPN:

1. **Настройка VPN на сервере B**: Создайте и настройте VPN-сервер на сервере B.

2. **Подключение сервера A к VPN**: Убедитесь, что сервер A подключен к VPN-серверу.

3. **Настройка маршрутизации**: Настройте маршруты так, чтобы трафик с устройства на сервере A перенаправлялся через VPN на сервер B.

Каждый из этих подходов имеет свои плюсы и минусы, и выбор подходящего будет зависеть от ваших конкретных требований и ограничений.
Если HTTP(S) - то лучше reverse proxy. А если вообще любой трафик - тогда DNAT.
Похожие вопросы