Я пытаюсь подключить сервер 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-адреса, в дополнение к любым изменениям межсетевого экрана.