![Java 拒绝在 Turnkey 上监听 IPv6](https://linux22.com/image/123768/Java%20%E6%8B%92%E7%BB%9D%E5%9C%A8%20Turnkey%20%E4%B8%8A%E7%9B%91%E5%90%AC%20IPv6.png)
所以我使用 MineOS,这是一个预装了 Node.js WebUI 的交钥匙软件,用于部署 Minecraft 服务器。现在我希望可以通过 IPv6 访问服务器,因为这就是我从 ISP 获得的全部信息。但我的服务器实例只侦听 IPv4。我怎样才能让javaminecraft服务器监听IPv6?
一些 netstat -ntlp 输出,无论我在minecraft中的server.properties如何,它总是相同的:
root@MinecraftServer /etc/default# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 493/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1194/master
tcp 0 0 0.0.0.0:25565 0.0.0.0:* LISTEN 1446/java
tcp 0 0 127.0.0.1:12319 0.0.0.0:* LISTEN 590/shellinaboxd
tcp 0 0 0.0.0.0:12320 0.0.0.0:* LISTEN 598/stunnel4
tcp 0 0 0.0.0.0:12321 0.0.0.0:* LISTEN 598/stunnel4
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 978/mysqld
tcp6 0 0 :::22 :::* LISTEN 493/sshd
tcp6 0 0 :::8443 :::* LISTEN 1026/node
我还尝试使用 -Djava.net.preferIPv6Adresses=true 和 -Djava.net.preferIPv6Stack=true 。没有一点改变。我将 /proc/sys/net/ipv6/bindv6only 的值更改为 1。
这是我的 ip6tables -L:
root@MinecraftServer /etc/default# ip6tables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp anywhere anywhere tcp dpt:25565
ACCEPT tcp anywhere anywhere tcp dpt:25566
ACCEPT tcp anywhere anywhere tcp dpt:8443
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
我能够通过 IPv6 通过互联网访问 Windows 机器上的服务器!我还可以在交钥匙机器上通过 IPv6 访问 WebUI。
我还缺少什么?感谢所有帮助!
解决方案:
《minecraft》的 forge 修改设置了 java.net.preferIPv4Stack=true 到版本 1.12.2-14.23.1.2555,这破坏了每一次 IPv6 尝试。因此,我现在使用 6tunnel,它创建了一个从 IPv6 转发到 IPv4 的端口。我仍然无法从外部访问minecraft服务器,但IPv6正在运行。
答案1
我认为您把属性名称弄错了。根据
属性名称是:
java.net.preferIPv4Stack
- 注意:IPv4
不是IPv6
java.net.preferIPv6Addresses
- 注意:两个d
字符而不是一个。
您还需要检查您是否不受此错误的影响:https://bugs.mojang.com/browse/MC-3776
答案2
罪魁祸首是我在《我的世界》中使用的锻造修改。到版本 1.12.2-14.23.1.2555 为止,它设置 java.net.preferIPv4Stack=true。 6tunnel 是一种解决方法,它将端口从 IPv6 转发到 IPv4。