I have some subdomains that go to my home address (I know I should put it through a VPS first but I’ll get to that when I have time).
If I connect to example.domain.tld and DNS records point back to my own IP, where does that data go to reach back to my device?
Edit: thanks for the responses everyone
You can see every hop an IP packet takes at IP level with
tracerouteormtr.DNS request will go to the DNS server but from what I can tell the packet wont go anywhere else. At least on my own network, traceroute gives only one entry and its the final destination. I assume this is because the router knows its own public IP and as such knows the packet doesnt need to be sent anywhere else.
Modern routers have a feature that’s typically known as “hairpin NAT” or “NAT loopback”. This means that if the DNS lookup resolves to the router’s public IP, it routes the packet internally instead of passing it out to the internet. So for your subdomains all of the traffic should stay local. Typically this feature is enabled by default, but you may want to check just to be sure.
This is something you can easily do from the command terminal. For Windows, use Tracert. Linux and Mac, maybe even iPhone and Android have their own commands to run a trace route, too (I don’t know them off the top of my head).
It’s called “traceroute” on Linux and Mac because there was never a 8.3 filename limitation on them.
Microsoft had to put it on a diet. It was getting a little FAT.
Daaamn that was the nerd version of a KenM rejoinder! Well played.
Take my upvote and get out.
Depends, you can set it up a few different ways.
-
you can set the dns so each subdomain resolves to a different port with your ip, in which case your router can forward that port to any local address on your network with port forwarding rules.
-
reverse proxy, this is most common. You use a service to do the translating for you. Your router forwards all requests on port 80 and 443 to your reverse proxy. The reverse proxy takes requests for subdomain1 and forwards it to the associated ip/port locally.
Can you set a port on DNS services that don’t typically use an SRV record (like Minecraft does, for example)?
I think I tired to figure this out once but couldn’t get it to work with web browsers. Ended up just looking at the HTTP request to find the subdomain and then routed from a reverse proxy as appropriate…
I have a reverse proxy set up already. The path from the outside goes:
DNS -> my IP -> reverse proxy -> server
I’m just wondering what happens when my own devices on the same network go to the domain.
You already have a bunch of NAT-level suggestions, so I wanted to mention there’s an alternative solution: split-horizon DNS, or simply split DNS. Basically, you run a DNS server in your LAN (like pi-hole) which resolves to the private IP, so resolving externally and internally give different results. This way packets don’t hit the router at all. You can also do a wildcard like
*.something.lanto avoid having to add a record for every service, and only configure your reverse proxy.
-
With IPv4, assuming you have a residential contract without cgnat, your router has your ip. Loosely your device calls your public ip, realizes it is not on your local network, and sends it to your router. The router will nat it, and send it to its own internet-facing networking side, where the same router will realize that the target ip is the ip of it’s own interface and will immediately accept it. Then it is handled like any other packet arriving from the internet, presumably port forwarded to some internal machine.
So we expect one hop to the router, then one internal hop from the private to the internet-facing interface of the router, and then presumably another internal hop back to the private network interface and another proper hop to the server on your lan.




