At the time of writing this I have 54 Docker containers running on my home lab Unraid server. I find myself accessing the services I’m running from many machines and quickly realized how impossible it is to memorize not only the IP address I assigned the server the all the ports each service is running on. My goal was to have an easy way to remember string map to each port.
This approach requires you have:
- a static IP address, which can be obtained many ways
- DNS name registered
I obtained my static IP address “for free” by leveraging Zerotier as my homelab’s VPN.. For future reference, lets call my Unraid server’s VPN IP address is x.x.x.x
.
Next, I registered a DNS name on Namecheap, lets call this name example.com
.
Now before I move forward, I swap the Unraid’s UI’s port from 80
to 8080
, which can be done in Settings -> Identification -> Management Access
in the Unraid application. That way our new Nginx Proxy Manager application can run on port 80. Now we can install the easy to use Nginx Proxy Manager application on our Unraid server and remember use port 80 for this. I suggest using this Docker container which is available in the Unraid App tab.
Now that Nginx Proxy Manager is installed and running, I create two DNS records with my DNS name registrar (Namecheap).
- a CNAME Record with host
*
and value to our domain nameexample.com
- an A Record with host
@
and valuethe-static-ip-of-my-unraid-server
Note: Changes to one’s DNS name records can take up to an hour to take effect
This will map all visits of example.com
or even foo.example.com
to the Unraid server if we’re on the VPN. This has two useful consequences:
- We can use these easy to remember names when we’re not on our home network by connecting to our VPN.
- We can route the request to Nginx Proxy Manager and have the easy to remember name be mapped to the hard to remember port.
Now all we have to do is load up Nginx Proxy Manager’s web UI and add records that map a name to a port. For example, I have a Proxy Host
that maps pihole.example.com
to the Destination
of http://example.com:1234
, SSL is HTTP only
and Access
is Public
. This works as we’re on our VPN.
And there we have it, we can map easy to remember records to hard to remember port numbers and leverage this outside our home network!