There are two pages in D-Link router to setup access to internal network from outside: Port Forwarding
and Virtual Server
. Both allows to map external port to internal one, except latter page also allows to change port.
I found that if I have service in my internal network and set it up in any of two pages, I can easily access it from outside.
But if it try to access my internal service from inside by external IP address, I succeed only if service is setup by Virtual Server
page.
Why?
Is this D-Link bug or that behavior should occur because of Internet protocols? In latter case please provide some explanations.
You need NAT loopback, also known as NAT reflection, NAT hairpinning, and possibly a few other names.
There is a good explaination on wikipedia of what NAT lookback does and why it's needed in your case.
Basically without it, your router isn't expecting requests destined for your public IP to come from the LAN, and the address translation doesn't work properly.
This post confirms that D-link routers only setup NAT loopback on the virtual server entries, not the port forwarding entries.