First of all you need to understand how things actually work, so take a look here: NAT. This is how your router currently makes internet communication for all your hosts possible.
So, everything is behind a NAT, and that's exactly why you can't access any host using your public IP address. If you want a machine inside your private home network to be publicly available (I mean its services) you would have to give it access to it. In order to do that you would have either to forward some ports from your router to a specific machine inside your network or add the whole machine to the DMZ.
Example 1: I run a webserver at 192.168.1.30:80, so in order to make it accessible from the outside (using my public IP) I need to add a forwarding rule into my router configuration, so that port 80 would be "redirected" to 192.168.1.30:80. So if someone was to browse to http://my_public_ip:80 (you don't have to actually type ":80" here), his request would arrive to my router and it would be forwarded to my 192.168.1.30 machine, eventually showing whatever web page I was running on it. The same applies to every other service you want to make accessible to the public, let's say a FTP server. You can forward specific ports or ranges of them. Sample image:
Example 2: As you realise the above scenario is not always practical. Sometimes you just want to make an entire machine/internal IP the default receiver of all outside requests. This is where the DMZ comes in. If I want every outside request to bypass my router and always arrive to a specific host I would add its IP (eg 192.168.1.123) to my DMZ. Sample image:
Take a look at this question too, for more insights concerning the use of DMZ. Don't be afraid to use it for your purposes though.
As you realise both of the above configurations are done inside your router interface.