AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1592050
Accepted
LeRouteur
LeRouteur
Asked: 2020-10-10 06:41:36 +0800 CST2020-10-10 06:41:36 +0800 CST 2020-10-10 06:41:36 +0800 CST

如何只为多个 Minecraft 服务器打开 TCP 端口 25565?

  • 772

我想创建多个 Minecraft 服务器,它们将在我的网络中的多个服务器上运行。

主要目标是只有一个端口 (TCP 25565) 面向 Internet,然后将请求主机名 (mc.example.com) 传递给正确的后端服务器。

有什么办法可以做到这一点?我知道可以使用反向代理,但它是用于 HTTP 的,所以有什么方法可以为 Minecraft 做到这一点?

编辑:正如@a​​ttie 所说,不可能将单个 IF 端口用于多个 Minecraft 服务器。

所以现在,假设我为这些服务器打开了 10 个端口(25565 到 25575)。下一步我应该怎么做才能使这更加用户友好?我的意思是,当他进入 mc.example.com 时,直接将用户重定向到 IF 端口?

networking proxy
  • 3 3 个回答
  • 925 Views

3 个回答

  • Voted
  1. sLunda
    2021-03-29T09:36:36+08:002021-03-29T09:36:36+08:00

    您可以尝试使用带有SVR Records的 Linux 的Bind9(我使用 Debian 和 raspberrypi [Raspbian])。

    • 在 Linux 中安装 Bind9: sudo apt-get install bind9 bind9-doc -y
    • 并在完成安装后重新启动 Bind9 的守护进程: /etc/init.d/bind9 restart

    你需要做你的第一个域,为此你需要这样做:

    zone "origensone.net" {
            type master;
            file "/var/lib/bind/origensone.net.hosts";
    };
    

    up 文本是此域 DNS 数据库的配置文件链接。(这是您需要在文件中输入我告诉您继续的内容)
    例如我的域是:origensone.net

    文件: /etc/bind/named.conf.local
    //
    // Do any local configuration here
    //
    
    // Consider adding the 1918 zones here, if they are not used in your
    // organization
    //include "/etc/bind/zones.rfc1918";
    
    // This is a new area for our domain:
    zone "origensone.net" {
            type master;
            file "/var/lib/bind/origensone.net.hosts";
    };
    
    • 文件“/var/lib/bind/origensone.net.hosts”;是带有子域的 DNS 在哪里,是该域和子域、别名、CNAME 等的 DNS 数据库。

    这就是我在本地 DNS 服务器中拥有 Minecraft 服务器的方式:

    文件: /var/lib/bind/origensone.net.hosts
    $ttl 3600
    origensone.net.    IN    SOA    DnsServer. (
                1616892692 ; Serial
                3600 ; Refresh
                600 ; Retry
                1209600  ; Expire
                3600 ) ; Minimum
    origensone.net.    IN    NS    DnsServer. ; --// DnsServer is the hostname of the machine == 127.0.0.1 or 192.168.1.10 == DnsServer.local //--
    origensone.net.    IN    A    <PublicIP (of IP Router)>
    
    ; --// Subdomain to IP Directions: //--
    dnsservidor        IN    A    <PrivateIP-1_for_DNSServerHosting> ; --// 192.168.1.10 for example for the DNSServer. //--
    mcservidor        IN    A    <PrivateIP-2_for_MinecraftServerHosting>  ; --// 192.168.1.11 for the server of minecraft hosting servers. //--
    mcservidortorouter        IN    A    <PublicIP (of IP Router)>
    
    ; --// The Canonical Names: //--
    mcmods                    IN    CNAME    mcservidor
    mcsurvi                    IN    CNAME    mcservidor
    
    ; --// This're the SVR records: //--
    _minecraft._tcp.mcsurvi.origensone.net. SRV 0 5 25566 mcservidortorouter.origensone.net. 
    _minecraft._tcp.mcmods.origensone.net. SRV 0 5 25567 mcservidortorouter.origensone.net.
    

    _服务。_protocol.name。 TTL 类 SRV 优先权 重 端口 目标: _minecraft。_tcp。mcsurvi.origensone.net。 SRV 0 5 25566 mcservidortorouter.origensone.net。

    1. _service = _minecraft
    2. _protocol.name = _tcp
    3. TTL 与生存时间相同(默认为)。
    4. 类 = mcsurvi.origensone.net
    5. SRV
    6. 优先级 = 0
    7. 重量 = 5
    8. 端口 = 25566
    9. 目标 → mcservidortorouter.origensone.net。

    本地主机是 IP: 127。0 . 0 . 1

    这是SVR 记录中的一个例子;在这种情况下,我在ALIAS中使用两个子域以获得两个服务器: origensone.net(域):

    1. mcsurvi(子域)→ 生存 = mcsurvi。原始松网
    2. mcmods(子域)→ 对于 mods = mcmods。原始松网

    当您使用 Bind9 DNS 服务器完成此操作并完成所有部分时,请在此处查找说明,以确认此处的 DNS 到端口的工作原理!.

    或者当你完成确认一切都很好时,你需要这样做:

    1. 在 Linux 的终端中输入以下命令:
    • nslookup
       # Press Enter.
      set query=srv
      _minecraft._tcp.mcsurvi.origensone.net
      

    这是在 Windows CMD 中: [灰色空间是我的公共 IP,因此受到谴责] 在此处输入图像描述

    这是在 Raspbian (DnsServer.) 中: [灰色块是我的名字,因此受到谴责] 在此处输入图像描述

    要尝试执行此操作,您可以在同一台服务器或在该主机的网卡中连接了该 DNS 服务器的其他计算机中执行此操作)。

    如果这可行,当我们将对这个 subdomain.domain 进行 PING 时,控制台会正确地向我们提供192.168.1.11的 ping,或者与 Minecraft 托管服务器的 IP 相同。

    • 2
  2. Best Answer
    Attie
    2020-10-10T06:52:51+08:002020-10-10T06:52:51+08:00

    这适用于 HTTP 的唯一原因是Host:协议中有一个可以检查的标头。如果协议中没有指示连接应路由到何处的内容,则无法通过侦听单个端口来执行此操作。

    我不相信 Minecraft 协议中包含这些额外信息......如果您绝对 100% 受限于单个面向互联网的端口,那么您的选择对用户不友好:

    • 隧道(例如:VPN / SSH / SOCKS) - 用户需要自己安装软件。连接后,他们可以连接到实际的 Minecraft 服务器。注意:这也可能会影响可玩性(即:延迟增加)
    • 基于源的数据包路由 - 每个用户可以访问一个服务器,但他们可能会看到不同的服务器,具体取决于该用户从哪里连接。

    我建议您监听多个端口。

    • 1
  3. Ohjurot
    2021-12-24T01:47:25+08:002021-12-24T01:47:25+08:00

    有一个名为“Minecraft Redirect Proxy”(https://github.com/RenegadeEagle/minecraft-redirect-proxy)的项目正在做你想做的事。

    @attie Minecraft 协议确实包含请求的主机名。它与服务器接收的第一个数据包一起发送。

    配置也很容易。这是一个未经测试的示例:

    {
      "versionName": "ProxyCup",
      "maxPlayers": 0,
      "onlinePlayers": 0,
      "motd": "Couldnt connect to requested backend server. If you believe this to be an issue, contact the administrator of this proxy.",
      "port": 25565,
      "nodes": [
        {
          "hostname": "domain1.com",
          "remoteHostname": "localhost",
          "remoteHostPort": 25566
        },
        {
          "hostname": "domain2.com",
          "remoteHostname": "localhost",
          "remoteHostPort": 25567
        }
      ]
    }
    
    • 0

相关问题

  • 用户使用 FileZilla 连接到 SFTP 服务器拒绝连接

  • 如何强制chrome在macos中使用pac文件?

  • NAT 后面的 NAT 如何工作(路由器的 NAT 和 ISP 的 NAT)?

  • Win10 1803:如何让移动热点成为专用网络?

  • nc如何识别服务名称

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    fixer1234 “HTTPS Everywhere”仍然相关吗? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve