HTML page returned: Confirms app is running inside the VM
Listening Port Check:
netstat -tulnp | grep 3000
Output: 0.0.0.0:3000 is listening with node as the process — app is correctly bound to all interfaces
Conclusions
App is running and accessible via localhost:3000
Listening on 0.0.0.0:3000 — correct for internal and external binding
Flycast internal IPv6 address for the server is reachable (via ping6 )
Flycast DNS is resolving correctly
Access to internal IPv6 address from client fails (connection reset)
Public direct IP tests fail
Requests to Flycast IP (fdaa:a:ac95:0:1::3) still fail with Connection reset by peer
So I am understand that if all three machines the client the server and NGX configured on cold
start, then you have to use the flycast, So I have understood.
Similar Behavior I have on the Express server
Flycast Failure Indications with Server (Port 8000)
Flycast IPv6 Ping
ping6 fdaa:a:ac95:0:1::2
Successful: Server responds to ICMPv6 echo requests
DNS Resolution via Flycast
dig x-realestate-server.internal AAAA
Resolved: Flycast private IPv6 address is correctly registered
HTTP Request via Flycast IPv6
curl http://[fdaa:a:ac95:0:1::2]:8000
Failed: Connection reset by peer error indicates the server is not handling or is prematurely closing incoming requests on port 8000 via Flycast.
Port Binding Test (from within server)
netstat -tulnp | grep 8000
Confirms port 8000 is listening
Server Summary: Although Flycast network-level connectivity and DNS resolution to the server are functional, the application is rejecting HTTP connections via Flycast address, pointing to an application-level issue or misconfiguration on port 8000.
You actually want this to be :80 instead of :3000, due to the Fly Proxy sitting in the middle. (The [http_service] block in fly.toml implicitly tells it to listen on port 80.)
curl → Fly Proxy → Machine
/ \
/ \
port 80 port 3000
(In contrast, if it was a .internal address instead of Flycast, then you would need :3000—since it’d be going directly to the Machine.)
You generally wouldn’t expect HTTPS requests to work with numeric IP addresses, so this part isn’t unusual.
A plain HTTP request to the second address does work for me:
Thank very much for participating, if I have understood you correctly {internal: 3000, external: 80}
fly machines start 48e355eb39d008 -a x-realestate-client
48e355eb39d008 has been started
PS C:\> curl http://[fdaa:a:ac95:0:1::3]:80
curl: (7) Failed to connect to fdaa:a:ac95:0:1::3 port 80 after 1 ms: Could not connect to server
You want this to be false, now, since Flycast doesn’t support SSL.
If you use curl -i http://[fdaa:a:ac95:0:1::2]:80, with the -i flag to explicitly show HTTP headers, then you’ll probably see it redirecting to https://. (The Fly Proxy doesn’t include the customary “Redirecting to…” HTTP body, which is why curl was outputting nothing—in the absence of -i.)