Unity multiplayer over internet does not work using port forwarding

I have tried multiplayer over LAN and it works perfectly fine.
Then I tried multiplayer over internet using this tutorial.

It worked absolutely fine.

The key statements on server are

 Network.InitializeServer(4, 25000, !Network.HavePublicAddress());
    MasterServer.RegisterHost("typeName", "gameName");

While key statements on Client are

 MasterServer.RequestHostList("typeName");
void OnMasterServerEvent(MasterServerEvent msEvent)
{
    if (msEvent == MasterServerEvent.HostListReceived)
        hostList = MasterServer.PollHostList();
}
private void JoinServer(HostData hostData)
{
    Network.Connect(hostData);
}

Well in this process, using NAT punchthrough is used where Masterserver refers client and server and the connection continues via Network facilitator.

But I want to connect server and client without any intermediate server. Where in client, we just put the public ip address of the other computer and port no. on which game is running. Popular games like ‘Terraria’, ‘Minecraft’ work without intermediate servers
. I have allowed the app through firewall and forwarded the port in router settings and still cannot see any service running on the port. I checked whether service was running using www.canyouseeme.org
but it shows error: no service running.

Does unity provide such feature for connecting over internet without intermediate server?

Similar problem, but with HTTP.
If I run a plain old C# app with an HttpListener, and port forwarding, I can see an open port from yougetsignal. But the same exact code, running an HttpListener via Unity editor doesn’t create an open port. I know my Unity HttpListener is listening on the port, because it can be verified with PowerShell.

What else do I need to do, to get an HttpListener inside Unity to receive external requests?