Port forwarding
Port forwarding is necessary for any applications to access computing devices on a protected internal network.
There are step-by-step instructions for configuring port forwarding for every commonly used router.
A program on a LAN can use Internet Gateway Device Protocol (IGD) to configure port forwarding. This greatly eases the use of many application requiring port forwarding for users who are not tech savvy. and uncomfortable with configuring routers.
There is an open source Java project called portmapper that implements IGD of UPnP.