Назад | Перейти на главную страницу

Как перенаправить обмен данными через веб-сервер через промежуточный сервер?

Я пытаюсь подключить сервер websocket (Linux-машина) и клиент (веб-браузер) через промежуточный сервер (размещенный на экземпляре AWS EC2). Экземпляр EC2 предоставляет общедоступный IP-адрес, на который могут ссылаться сервер и клиент веб-сокета.

Мой клиент подключается к ws://<SERVER>:<PORT>, где SERVER это адрес моего экземпляра EC2 и PORT - произвольный порт, который я открыл для переадресации портов (например, 9111).

На сервере websocket я выполняю следующую команду:

  /usr/bin/ssh -f -N -i $KEY -l ubuntu \
                 -R $PORT:127.0.0.1:9090 \
                 -L 9090:$SERVER:$PORT \
                  $SERVER

куда $KEY это закрытый ключ для EC2 и 9090 это порт, который использует мой сервер websocket. Я настроил демон ssh своего экземпляра EC2 для включения портов шлюза, и переадресация портов работает нормально.

Проблема возникает, когда я пытаюсь запустить свой сервер websocket - я получаю Address already in use ошибка, потому что, по-видимому, я не могу запустить сервер websocket на порту, который я перенаправляю. Разве это не стандартное занятие? Что я делаю не так?

Спасибо!

Ваш параметр '-L 9090' для SSH открывает прослушиватель на порту 9090, который конфликтует с вашим сервером веб-сокета. Опция -R должна быть достаточной, и прямое соединение будет двунаправленным, вам не нужно настраивать «обратный маршрут» с помощью -L.

Вам может потребоваться включить опцию GatewayPorts на вашем демоне EC2 SSH, чтобы разрешить настройку портов с помощью -R, которые принимают соединения с любого IP-адреса, в дополнение к любым изменениям межсетевого экрана.