Configurei uma VM de servidor Debian no Parallels Desktop. Eu configurei para usar a rede Bridge. O DHCP está ativado, porém configurei a VM para usar um IP estático.
No Debian dentro da minha VM, o servidor web é executado ( 127.0.0.1:5000
) e a rede está configurada corretamente:
$ sudo cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug enp0s5
# iface enp0s5 inet dhcp
iface enp0s5 inet static
address 10.211.55.201
netmask 255.255.255.0
gateway 10.211.55.1
$ sudo ifconfig
enp0s5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.211.55.201 netmask 255.255.255.0 broadcast 10.211.55.255
inet6 fe80::21c:42ff:fedf:37b prefixlen 64 scopeid 0x20<link>
ether 00:1c:42:df:03:7b txqueuelen 1000 (Ethernet)
RX packets 564 bytes 78327 (76.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 308 bytes 49738 (48.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 15 bytes 1394 (1.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 15 bytes 1394 (1.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
$ netstat -pln
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 899/python3
tcp6 0 0 :::22 :::* LISTEN -
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 13667 840/systemd /run/user/1000/systemd/private
unix 2 [ ACC ] STREAM LISTENING 13673 840/systemd /run/user/1000/gnupg/S.dirmngr
unix 2 [ ACC ] STREAM LISTENING 13675 840/systemd /run/user/1000/gnupg/S.gpg-agent.browser
unix 2 [ ACC ] STREAM LISTENING 13677 840/systemd /run/user/1000/gnupg/S.gpg-agent.extra
unix 2 [ ACC ] STREAM LISTENING 13679 840/systemd /run/user/1000/gnupg/S.gpg-agent.ssh
unix 2 [ ACC ] STREAM LISTENING 13681 840/systemd /run/user/1000/gnupg/S.gpg-agent
unix 2 [ ACC ] STREAM LISTENING 11990 - /run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 13009 - /run/systemd/private
unix 2 [ ACC ] STREAM LISTENING 13011 - /run/systemd/userdb/io.systemd.DynamicUser
unix 2 [ ACC ] STREAM LISTENING 13012 - /run/systemd/io.system.ManagedOOM
unix 2 [ ACC ] STREAM LISTENING 13020 - /run/lvm/lvmpolld.socket
unix 2 [ ACC ] STREAM LISTENING 13024 - /run/systemd/fsck.progress
unix 2 [ ACC ] STREAM LISTENING 13032 - /run/systemd/journal/stdout
unix 2 [ ACC ] SEQPACKET LISTENING 13034 - /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 10664 - /run/systemd/journal/io.systemd.journal
$ curl http://127.0.0.1:5000
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
...
Agora tento acessar o servidor web do host (MacOS):
> ping 10.211.55.201
PING 10.211.55.201 (10.211.55.201): 56 data bytes
64 bytes from 10.211.55.201: icmp_seq=0 ttl=64 time=1.425 ms
64 bytes from 10.211.55.201: icmp_seq=1 ttl=64 time=0.317 ms
64 bytes from 10.211.55.201: icmp_seq=2 ttl=64 time=0.290 ms
64 bytes from 10.211.55.201: icmp_seq=3 ttl=64 time=0.386 ms
^C
--- 10.211.55.201 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.290/0.605/1.425/0.475 ms
> ssh [email protected] echo test
test
> curl http://10.211.55.201:5000
curl: (7) Failed to connect to 10.211.55.201 port 5000 after 1011 ms: Connection refused
O servidor web na porta 5000 é oxen-io/oxen-observer . Instalei todas as dependências e iniciei o servidor usando FLASK_APP=observer flask run --reload --debugger
. É um projeto Python que usa Flask para hospedar um servidor da web e quero iniciá-lo para fins de depuração. Não alterei nenhuma configuração do Flask, apenas atualizei meu contrib/devnet-observer.ini
:
[uwsgi]
chdir = /home/marty/proj/oxen/observer
socket = devnet.wsgi
plugins = python3,logfile
processes = 6
manage-script-name = true
mount = /=observer:app
logger = file:logfile=/home/marty/proj/oxen/observer/uwsgi.log,maxsize=1048576
Definitivamente, é uma configuração incorreta, pois o servidor da web retorna 500, mas isso não deve impedir que meu host recupere o código de status. Quero acessar o servidor da Web do meu host antes de passar para outros problemas. O servidor da web é claramente acessível a partir do host local, então qual poderia ser o problema de não conseguir alcançá-lo do meu host?
Este é o comportamento padrão do Flask (e se você estiver executando no modo de depuração, deve ser cauteloso ao alterá-lo, pois ele o abre para ataques, exceto se você ainda não permitir isso na Internet).
Veja na documentação do Flask sobre isso e como permitir o acesso externo configurando a porta de escuta para todas as interfaces: