this post was submitted on 31 Oct 2024
15 points (94.1% liked)

Selfhosted

40296 readers
213 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 1 year ago
MODERATORS
 

I use Crafty Controller for Minecraft. I have a server running at 192.168.50.16:25540. I want it to resolve to minecraft.example.com. I have Nginx Proxy Manager setup for my domain and can access it from inside my network, but it'd be nice to be able to use a domain instead.

NPM only has options for http and https, so is this even possible using NPM?

EDIT: this is for only internal access I have external access via tailscale.

all 20 comments
sorted by: hot top controversial new old
[–] possiblylinux127@lemmy.zip 12 points 3 weeks ago (1 children)

No

Reverse proxies like you are talking about are only for http connections. For more information look at the OSI model. (The proxy is operating on the application layer while Minecraft is on the transport layer)

Instead use DNS to resolve the domain name to an IP. Better yet, just set a static IP.

[–] redxef 6 points 3 weeks ago (1 children)

There are minecraft reverse proxies, so, yes, a http proxy will not work, but the general idea is still viable and doable with very little effort.

Set up a few domains all resolving to one IP. Run itzg/minecraft-router and use that to proxy the traffic to different servers based on the domain.

Also, they don't even need a reverse proxy, but just resolve the domain name to the IP (in the simple case of one domain name per I0). That can be accomplished by hosting their own dns server, editing the hosts file or just pointing a public dns record at the private ip address, which will only work in their network,l.

[–] Dust0741@lemmy.world 2 points 3 weeks ago (1 children)

Thanks for the help. This is enough to get me started

You could also use nginx if you wanted; it'll do arbitrary tcp data with the stream plugin.

[–] edb_fyr@lemmy.world 7 points 3 weeks ago (1 children)

If you were using the default port 25565, you could simply have a DNS A record pointing to the server IP. But since that is not the case, you have to additionally set up a SRV record in your DNS. NOIP describes what this is and how to set it up on their service here, but it will of course differ for your DNS provider.

This still requires that the Minecraft server port is directly accessible from the other clients, but it sounds like that is not the problem

[–] possiblylinux127@lemmy.zip 4 points 3 weeks ago

Technically they could use a Nginx stream to forward traffic but I wouldn't recommend that as it adds latency and overhead.

[–] jake_jake_jake_@lemmy.world 1 points 3 weeks ago (1 children)

i have used gate for my internal and external, works very well and i do exactly what you are asking and separate different versions and modpacks by name https://github.com/minekube/gate

[–] Semi_Hemi_Demigod@lemmy.world 1 points 3 weeks ago (1 children)

Does this work for Bedrock as well as Java edition? I can get Java to work with infrared proxy but I’m not sure how to do Bedrock

[–] jake_jake_jake_@lemmy.world 2 points 3 weeks ago

it looks like there is a bedrock branch, but i personally have no experience with bedrock.

see this issue for more details: https://github.com/minekube/gate/issues/11

[–] zelifcam@lemmy.world 1 points 3 weeks ago (1 children)

it'd be nice to be able to use a domain instead.

If your looking to access it outside your LAN, you’re gonna want to open up the correct ports on your router’s firewall.

[–] Dust0741@lemmy.world 1 points 3 weeks ago* (last edited 3 weeks ago) (2 children)

No I'm not.

I have tailscale setup for external access. (I have dns records already in my domain provider pointing to a tailscale ip, so a device on my tailnet can access my domain. ie an authorized tailscale device can access nginx.example.com)

I want to know what I have to do to get minecraft.example.com to resolve interenally.

[–] zelifcam@lemmy.world 2 points 3 weeks ago* (last edited 3 weeks ago)

I have to admit, I’m a bit confused.

I have dns records already in my domain provider pointing to a tailscale ip

I want to know what I have to do to get minecraft.example.com to resolve interenally.

Since your domain resolves to an internal private Tailscale IP and your question is how to access using the domain, locally…. I feel like there’s an error in your architecture here. Wouldn’t any device that is on your Tailscale private network already have access using the domain name? If by “resolve internally” you mean hosts on your LAN, not connected to Tailscale scale? How would that be possible if it resolves to a Tailscale IP. If you have control of your DNS on your LAN, you could simply add an override and point it to the LAN address of the Minecraft server.

[–] bjoern_tantau@swg-empire.de 1 points 3 weeks ago (1 children)

NPM won't help you here. As you said, it's only for http. You will have to set up port forwarding in your router. But as far as I recall Minecraft changes its port with every game. So you could either change that in your router every time you start another game.

But it would be better (for security as well) to set up a VPN. Many routers actually have that built in.

That is, if your goal is to have your Minecraft server reachable through the internet.

For DNS you will need a Dynamic DNS service to let the name always point to your public IP. For this as well many routers have built-in functionality. Maybe even a preferred service.

[–] Dust0741@lemmy.world 1 points 3 weeks ago (2 children)

With Crafty you can bind a specific port.

I use tailscale for public access, and have set it up so tailscale users can access the domain.

I guess what I'm asking for is NPM but for tcp.

[–] catloaf@lemm.ee 4 points 3 weeks ago

Regular nginx does this just fine https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/

Keep in mind that you can't route tcp by hostname, because hostname is not a property of tcp. It only knows IP addresses. Host routing requires a protocol like HTTP.

[–] bjoern_tantau@swg-empire.de 1 points 3 weeks ago* (last edited 3 weeks ago)

Port forwarding is what you're looking for. You almost certainly can configure that in your router. You tell it what the port in the outside should be and to what IP and port in your LAN it should go.

Edit: Just saw your other comments. I'm a bit at a loss.

[–] roofuskit@lemmy.world 1 points 3 weeks ago* (last edited 3 weeks ago)
[–] just_another_person@lemmy.world 0 points 3 weeks ago

You need a public DNS record that points to your public IP of your server.