Я пытаюсь подключить сервер веб-сокета (Linux-машина) и клиент (веб-браузер) через промежуточный сервер (размещенный на экземпляре AWS EC2). Экземпляр EC2 предоставляет общедоступный IP-адрес, на который могут ссылаться сервер и клиент websocket.
Мой клиент подключается к ws: //
, где СЕРВЕР
- это адрес моего экземпляра EC2, а ПОРТ
- произвольный порт, который я открыл для переадресации портов (например, 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 для включения портов шлюза, и переадресация портов работает нормально.
Проблема возникает, когда я пытаюсь запустить свой сервер веб-сокетов - я получаю ошибку Адрес уже используется
, потому что, по-видимому, я не могу запустить сервер веб-сокетов на порту, который я пересылаю. Разве это не стандартное занятие? Что я делаю не так?
Спасибо!
Ваш параметр '-L 9090' для SSH открывает прослушиватель на порту 9090, что конфликтует с вашим сервером веб-сокетов. Опция -R должна быть достаточной, и прямое соединение будет двунаправленным, вам не нужно настраивать «обратный маршрут» с помощью -L.
Вам может потребоваться включить опцию GatewayPorts на вашем демоне EC2 SSH чтобы иметь возможность настраивать порты с помощью -R, которые принимают соединения с любого IP-адреса в дополнение к любым изменениям межсетевого экрана.