Abrir Porto para publico Ubuntu Desktop 21.10

Iniciado por PauloGonvalves, 08 de Dezembro de 2021, 09:21

tópico anterior - próximo tópico

PauloGonvalves

Boas gente,

Já estou farto de partir a cabeça e não estou a ter sucesso.
Estou com o  Ubuntu Desktop 21.10 atraves de uma VMWare
* ifconfig
192.168.160.140

A correr -> "nginx" no porto 80
                -> "web api dotnet" no porto 5000

Firewall
--------
* sudo ufw status verbose
Status: active
Logging: on (low)
Default: allow (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
80/tcp                     ALLOW IN    Anywhere                 
443                        ALLOW IN    Anywhere                 
Anywhere                   ALLOW IN    192.168.1.12             (IP do windows)         
Anywhere                   ALLOW IN    192.168.160.140     (IP do Ubuntu)     
5000/tcp                   ALLOW IN    Anywhere                 
80/tcp (v6)                ALLOW IN    Anywhere (v6)             
443 (v6)                   ALLOW IN    Anywhere (v6)             
5000/tcp (v6)              ALLOW IN    Anywhere (v6)

-----------------------------------------------

Chamadas com sucesso no ubuntu:
http://localhost
http://localhost:5000/weatherforecast

** Questão UM:
Porque dentro do Ubuntu tenho erro "Unable to connect" com:
http://192.168.160.140
http://192.168.160.140:5000/weatherforecast

Que me falta abrir ou configurar para o ubuntu aceitar chamadas do proprio IP da maquina ?

** Questão DOIS:
No windows tenho sucesso com:
http://192.168.160.140:80
mas NÃO tenho sucesso com
http://192.168.160.140:5000/weatherforecast

Que me falta abrir ou configurar no ubuntu para aceitar chamadas publicas para o porto 5000 ?


Obrigado
PauloGoncalves

zekkerj

Boa noite Paulo,

Execute o comando abaixo em uma janela de comandos e cole o resultado aqui, por favor.

netstat -atunpe | egrep ":(80|443|5000)"
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

PauloGonvalves

#2
Boas zekkerj,

Aqui vai resposta teu pedido...

# sudo netstat -atunpe | egrep ":(80|443|5000)"
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      0          37074
tcp6     0       0 :::80                         :::     *                    LISTEN      0          37075

*Porque o serviço net6 que está no porto 5000 não recebe pedidos externos e o nginx no porto 80 recebe?

Thanks

zekkerj

Pq o serviço net6 não está ouvindo a porta 5000, nem a porta 443.
Revise a configuração do nginx.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

PauloGonvalves

Boas,

Bolas esqueci-me de correr a App em net6, agora sim, este é o resultado de: # sudo netstat -atunpe | egrep ":(80|443|5000)"

tcp        0      0 127.0.0.1:5000          0.0.0.0:*               LISTEN      1000       55060      3300/./FirstApp     
tcp        0      0 127.0.0.1:5001          0.0.0.0:*               LISTEN      1000       55067      3300/./FirstApp     
tcp        0      0 0.0.0.0:80                    0.0.0.0:*               LISTEN      0              40018      951/nginx: master p
tcp6      0      0 ::1:5000                          :::*                      LISTEN      1000       55066      3300/./FirstApp     
tcp6      0      0 ::1:5001                          :::*                      LISTEN      1000       55068      3300/./FirstApp     
tcp6      0      0 :::80                                 :::*                      LISTEN      0              40019      951/nginx: master p

'nginx:master' dá resposta a pedidos externos ao servidor e  'FirstApp' só responde a pedidos dentro do servidor.


zekkerj

OK.
Veja só: as portas 5000 e 5001 só parecem estar ouvindo em localhost, então você não vai conseguir conexão direta com elas a partir de outras máquinas.
Vc fica dependendo do nginx receber os pedidos e redirecionar para a aplicação em localhost:5000.

Sugiro que vc investigue nos logs do nginx se há alguma pista de porque isso não está acontecendo.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

PauloGonvalves

Obrigado pela ajuda...

Mas eu só instalei o nginx para fazer testes e tentar reduzir o dominio do erro.

Uma WebApi em net6 ela propria é um servidor (Kestrel), assim como uma app em java+spring tem embutido um servidor tomcat (acho).

Quando excuto a aplicação:  ./FirstApp
Mostra na consola o seguinte:
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.

Dizes tu: "Veja só: as portas 5000 e 5001 só parecem estar ouvindo em localhost, então você não vai conseguir conexão direta com elas a partir de outras máquinas."

Então que achas que deveria dizer?
Now listening on: http://localhost:5000 ?!?!?!?!?!
Em vez de "localhost" deveria dizer que IP ou o quê?

Obrigado

zekkerj

Eu não conheço essa aplicação, então não posso opinar sobre como ela deveria estar funcionando.

O que posso afirmar é que, para que você possa fazer conexão direta com a porta 5000, a aplicação precisa estar conectada ou ao IP externo, ou, o que é mais recomendável, ao endereço "0.0.0.0" (ou IPv6 "::"), que significa que ela está "ouvindo" todos os endereços ativos da máquina. Claro que isso tem implicações, e novamente, não conheço a aplicação, então não sei quais implicações seriam essas.

O nginx seria uma boa forma de vc redirecionar pedidos vindos de outras máquinas para essa aplicação sem ter que reconfigurá-la. Outra alternativa, mais pesada, seria o Apache. Mas tanto um quanto o outro vão exigir de você uma configuração para isso funcionar. Acho que no momento é o que está faltando, acertar essa configuração.

Quando estiver correta, você vai conseguir acessar sua aplicação usando algo como "http://192.168.160.140/FirstApp/", ou ainda "https://192.168.160.140/FirstApp/", o que seria ainda melhor.

Minha recomendação/sugestão é que você investigue um pouco mais o nginx, acredito que será de bom proveito para seu projeto.

Dê retornos!!!
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

PauloGonvalves


Boas zekkerj ,

Sucesso, Consegui  :D  :D

com a dica/explicação que me deste encontrei a resposta na net;  keyword -> ip "0.0.0.0" 

Linha de commando:
./FirstApp --urls "http://0.0.0.0:5000;https://0.0.0.0:5001"

consola:
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://0.0.0.0:5000
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://0.0.0.0:5001
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production

E já consigo fazer pedidos fora do servidor  :D

Muito obrigado zekkerj  !!!!
Preciso estudar "redes" para efectivamente perceber a logica dos IPs....   ::)