You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker栈中Minecraft服务器用户经代理连接(内部IP)问题求助

排查Docker中Minecraft服务器显示所有用户IP为内部地址的问题

嘿,我完全懂你的困扰——所有连接到你Docker里Minecraft服务器的用户,不管是外部还是内部,都显示同一个内部IP(10.255.0.16),根本没法区分真实用户,甚至连问题关键词都搜不对对吧?别担心,这大概率是Docker网络映射的锅,我给你几个具体的排查和解决方向:

1. 检查Docker的网络模式(最常见的原因)

默认情况下,Docker使用bridge网络模式,这种模式下的端口映射会通过Docker内部的网关转发请求,导致Minecraft服务器看到的源IP都是Docker网关的IP(也就是你看到的10.255.0.16)。解决方法很直接:

  • 改用host网络模式,让容器直接使用宿主机的网络栈,这样服务器就能直接获取用户的真实IP。修改你的docker-compose.yml
    version: '3'
    services:
      skyblock:
        image: ashdev/minecraft-spigot:1.12.2
        network_mode: host  # 添加这一行,使用宿主机网络
        # ports: "25565:25565"  # 用host模式时要注释掉端口映射,因为直接占用宿主机端口
        volumes:
          - ".:/minecraft"
        environment:
          MINECRAFT_EULA: "true"
          DEFAULT_OP: "MattsOnMc"
    
    注意:host模式在Windows/macOS的Docker Desktop上可能有兼容性问题,如果你用的是Linux宿主机,这个方法最有效。

2. 尝试Macvlan网络(替代host模式的方案)

如果你不想用host模式(比如需要隔离容器网络),可以用Macvlan给容器分配一个和宿主机同网段的独立IP,这样服务器就能直接接收用户的真实连接:

  1. 先创建Macvlan网络(替换括号里的参数为你局域网的实际信息):
    docker network create -d macvlan \
      --subnet=192.168.1.0/24 \  # 你的局域网网段
      --gateway=192.168.1.1 \    # 你的路由器网关IP
      -o parent=eth0 \            # 宿主机的网卡名称(比如eth0、enp0s3)
      minecraft-macvlan
    
  2. docker-compose.yml中使用这个网络:
    version: '3'
    services:
      skyblock:
        image: ashdev/minecraft-spigot:1.12.2
        networks:
          - minecraft-macvlan
        volumes:
          - ".:/minecraft"
        environment:
          MINECRAFT_EULA: "true"
          DEFAULT_OP: "MattsOnMc"
    networks:
      minecraft-macvlan:
        external: true
    

3. 排查Minecraft服务器的代理相关配置

虽然你没提到用代理插件,但有些Spigot/Paper服务器的默认配置或插件可能会导致IP被替换:

  • 打开服务器目录下的server.properties,检查online-mode是否设置为true(正版验证不会影响IP显示,但如果是false且用了第三方验证插件,可能有问题)。
  • 如果之前用过Bungeecord等代理插件,确保已经关闭或正确配置了ip_forward选项,避免残留的代理配置影响IP显示。

4. 检查宿主机防火墙与端口转发设置

虽然可能性较低,但还是可以排查下:

  • 检查宿主机的防火墙(比如ufw、iptables),确保没有开启会修改源IP的NAT规则。
  • 如果是通过路由器端口转发到宿主机,检查路由器是否开启了NAT Hairpinning(也叫端口回流),有些路由器会把内部连接的源IP改成路由器自身的IP,但这只会影响内部用户,外部用户应该显示真实IP,所以如果外部用户也显示内部IP,这个可能性不大。

内容的提问来源于stack exchange,提问作者Matt Smeets

火山引擎 最新活动