OpenVPN AS服务器下将用户真实IP转发至Minecraft服务器的解决方案咨询
Hey,我之前碰到过几乎一模一样的问题,给你分享几个可行的解决思路:
首先得明确你遇到的核心问题:正如你从OpenVPN官网看到的,默认配置下OpenVPN AS会对所有客户端流量做NAT转换,把源IP统一改成VPN网关的IP(也就是你说的172.27.224.1),这就导致Minecraft服务器那边只能看到这个单一IP,AuthMe插件自然会判定所有用户是同一个人,没法正常注册。
引用你找到的官方说明:
Both the source and destination IP addresses are routed with NAT. The destination address of incoming packets is translated to the VPN IP address of the client. The source address is translated to the VPN gateway IP address of the first OpenVPN daemon of the Access Server. This means assuming a default configuration of 172.27.224.0/20 for the VPN subnet, the packets will have source IP 172.27.224.1.
下面是具体的解决步骤:
方法一:修改OpenVPN AS的NAT规则,针对MC服务器端口禁用源NAT
这是最直接的方式,让OpenVPN AS不对访问MC服务器的流量做IP替换:
- 登录OpenVPN AS的管理后台(通常是
https://你的服务器IP:943/admin) - 进入「VPN Settings」→「Routing」板块
- 找到「NAT Exceptions」或者类似的配置项,添加一条规则:指定你的Minecraft服务器IP(比如
192.168.1.100)和端口(默认25565),设置为不进行源NAT转换 - 如果Web后台没有这个选项,就登录服务器的SSH终端,执行以下命令(替换成你的MC服务器IP):
sacli --key "vpn.server.nat_exclude" --value "192.168.1.100/32:25565" ConfigPut - 重启OpenVPN AS服务生效:
service openvpnas restart
方法二:用Minecraft插件识别真实IP(适合无法修改OpenVPN配置的情况)
如果上面的方法操作有困难,还可以从MC服务器端入手:
- 如果你用的是Spigot/Paper这类服务器,先安装
ProtocolLib插件,再搭配RealIP插件 - 配置
RealIP插件,把OpenVPN网关的IP(172.27.224.1)加入信任列表,插件就会从VPN传递的请求里提取用户的真实IP - 要是你用了Velocity/Bungeecord代理,还可以在代理端开启
proxy-protocol,同时在OpenVPN AS里配置对应端口转发时启用Proxy Protocol,让代理直接获取真实IP
方法三:备选方案——让MC流量不走VPN(不符合需求的话可以忽略)
如果你的需求只是让用户能正常注册,不强制MC流量走VPN,可以给OpenVPN客户端添加路由例外:
- 在OpenVPN AS的客户端配置里,添加一条规则,让用户访问MC服务器IP时直接使用本地网络,不走VPN通道,这样MC服务器就能直接看到用户的真实IP了
如果还有细节问题,比如OpenVPN AS的版本、MC服务器的类型,都可以补充出来,我再帮你细化方案~
备注:内容来源于stack exchange,提问作者Bulcsű Édes




