На этот вопрос, вероятно, уже дан ответ, и есть множество статей, показывающих, как сделать обратный туннель s sh. Однако я застрял на последнем шаге.
У меня есть Linux окно, которое запускает веб-службу на порту 8080. Это за NAT, и я не могу перенести порт с наложенных маршрутизаторов на него.
У меня есть бесплатный sh экземпляр Ubuntu 18 ec2 на AWS, и я использую следующую команду для обратного туннеля из моего Linux окна.
ssh -i "key.pem" -R \*:8080:\*:8080 ubuntu@ec2 -p 45332
EC2 s sh сервер прослушивает порт 45332
На сервере:
$ sudo lsof -i -P -n | grep LISTEN
systemd-r 650 systemd-resolve 13u IPv4 15830 0t0 TCP 127.0.0.53:53 (LISTEN)
sshd 893 root 3u IPv4 18322 0t0 TCP *:45332 (LISTEN)
sshd 893 root 4u IPv6 18333 0t0 TCP *:45332 (LISTEN)
sshd 20731 ubuntu 9u IPv6 75581 0t0 TCP [::1]:8080 (LISTEN)
sshd 20731 ubuntu 10u IPv4 75582 0t0 TCP 127.0.0.1:8080 (LISTEN)
Если я выполняю curl localhost:8080
на Ec2, я получаю правильный веб-сервис ответ.
Но когда я делаю скручивание, используя DNS-имя Publi c IP / Publi c от того же ec2 или совершенно другого устройства, я получаю:
curl: (7) Не удалось подключиться к <<strong> IP > порту 8080: соединение отклонено
Я проверил свой VP C ACL и разрешил ВСЕ входящие и исходящие трафики c в группа безопасности.
Я убедился, что там правила брандмауэра не блокируют его:
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
45332/tcp ALLOW IN Anywhere
45332/udp ALLOW IN Anywhere
8080/tcp ALLOW IN Anywhere
8080/udp ALLOW IN Anywhere
45332/tcp (v6) ALLOW IN Anywhere (v6)
45332/udp (v6) ALLOW IN Anywhere (v6)
8080/tcp (v6) ALLOW IN Anywhere (v6)
8080/udp (v6) ALLOW IN Anywhere (v6)
Когда это не сработало, я удалил s sh tunnel и напрямую запустили один и тот же веб-сервис на ec2. Это отлично работало.
Однако я хочу запустить службу из моего Linux окна.