Swo*_*too 46 dns networking minecraft
我拥有域名"Arboristal.com".我还在arboristal.com上私下拥有所有子域名.例如lg.arboristal或ft.arboristal.com.
在我的DNS设置下,Arboristal.com将设置为我们当前托管我们网站的网站托管服务商.
我家里有三台运行在一个公共IP地址下的服务器.(71.82.237.27)
我还有三个Arboristal.com子域指向我的IP地址.
三台服务器中的每台服务器都在自己的端口上运行(25565,25566,25567)
我希望每个子域指向我的IP地址上的每个开放端口.
不幸的是,当您尝试使用其中一个子域连接到其中一个服务器时,它只连接到您键入端口的服务器.
我的情况:
三台服务器,每台运行在不同的端口上.(所有portforwarded和作为服务器工作)
Minecraft服务器一(25565)
Minecraft服务器二(25566)
Minecraft服务器三(25567)
我在DNS提供商(webs.com)上运行了三个子域
mc.arboristal.com
tekkit.arboristal.com
pvp.artboristal.com
当您使用Minecraft连接到其中一个时,它会自动通过端口25565,这意味着无论您尝试连接到哪个URL,它总是通过端口25565转到我的IP.将您连接到Minecraft服务器之一.您可以手动输入端口,但我希望尽可能保持良好的外观和专业.
那么,既然你了解我的情况,我有没有办法让mc.arboristal.com,tekkit.arboristal.com和pvp.arboristal.com都可以在不同的端口下转到我的IP地址,而无需指定每个端口在提供的URL上连接到用户端?
我可以将MX,A(使用此连接到服务器),CNAME和TXT记录添加到DNS设置
如果我需要使用第三方作为我的DNS提供商,我还可以将名称服务器添加到DNS设置.(如果有必要,我愿意这样做)
如果需要在那里配置任何东西,我也可以在192.168.0.1完全访问我的路由器.
我刚刚了解到互联网在上周是如何运作的,所以我不确定这里是否有任何可行的东西.我也可能没有关于互联网如何实际运作的正确信息.请原谅我有关互联网的任何虚假信息.
Win*_*ter 39
您可以使用SRV记录:
_service._proto.name. TTL class SRV priority weight port target.
Run Code Online (Sandbox Code Playgroud)
服务:所需服务的符号名称.
Proto:所需服务的传输协议; 这通常是TCP或UDP.
名称:此记录有效的域名,以点结尾.
TTL:标准DNS生存时间字段.
类:标准DNS类字段(始终为IN).
优先级:目标主机的优先级,值越低意味着更优先.
权重:具有相同优先级的记录的相对权重.
端口:要在其上找到服务的TCP或UDP端口.
目标:提供服务的机器的规范主机名,以点结尾.
例:
_sip._tcp.example.com. 86400 IN SRV 0 5 5060 sipserver.example.com.
Run Code Online (Sandbox Code Playgroud)
所以我认为你正在寻找的是在你的DNS主机文件中添加这样的东西:
_sip._tcp.arboristal.com. 86400 IN SRV 10 40 25565 mc.arboristal.com.
_sip._tcp.arboristal.com. 86400 IN SRV 10 30 25566 tekkit.arboristal.com.
_sip._tcp.arboristal.com. 86400 IN SRV 10 30 25567 pvp.arboristal.com.
Run Code Online (Sandbox Code Playgroud)
另外,我强烈建议您选择托管公司,而不是自己托管服务器.它只是要求您的家庭连接(DDoS和带宽/连接速度)出现问题,但这取决于您.
Quu*_*one 10
(自从我做了这些事以来已经有一段时间了.请不要盲目地认为下面的所有细节都是正确的.但我希望我不会太尴尬错误.:))
如前面的答案所述,Minecraft客户端(从1.3.1开始)使用服务名称和协议名称支持SRV记录查找,这意味着如果您的区域文件看起来像这样......_minecraft_tcp
arboristal.com. 86400 IN A <your IP address>
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 20 25565 arboristal.com.
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 40 25566 arboristal.com.
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 40 25567 arboristal.com.
Run Code Online (Sandbox Code Playgroud)
...然后在更改日志中暗示执行SRV记录查找的Minecraft客户端将优先使用端口25566和25567(每个端口的40%)通过端口25565(20%的时间).我们可以假设没有找到并尊重这些SRV记录的Minecraft客户端将像往常一样使用端口25565.
但是,我认为使用Nginx等负载均衡器来实现它会更"干净和专业" .(我选择Nginx只是因为我之前已经使用过它.我并不是说它特别适合这项任务.出于某些原因,它甚至可能是一个糟糕的选择.)那么你就不必弄乱你的DNS了,您可以使用相同的方法来对任何服务进行负载平衡,而不仅仅是像Minecraft这样的客户端工作,以便查找和尊重SRV记录.要以Nginx方式执行此操作,您将在arboristal.com计算机上运行Nginx,其中包含以下内容/etc/nginx/sites-enabled/arboristal.com:
upstream minecraft_servers {
ip_hash;
server 127.0.0.1:25566 weight=1;
server 127.0.0.1:25567 weight=1;
server 127.0.0.1:25568 weight=1;
}
server {
listen 25565;
proxy_pass minecraft_servers;
}
Run Code Online (Sandbox Code Playgroud)
在这里,我们在服务器端控制负载平衡(通过Nginx),因此我们不再需要担心行为不端的客户端可能更喜欢端口25565到其他两个端口.事实上,现在所有客户都会与之交谈arboristal.com:25565!但是该端口上的监听器不再是Minecraft服务器; 它是Nginx,秘密地将所有流量代理到同一台机器上的其他三个端口上.
我们根据客户端IP地址(ip_hash)的散列进行负载均衡,这样如果客户端断开然后再重新连接,那么它很有可能会重新连接到之前的Minecraft服务器.(我不知道这对Minecraft有多重要,或者SRV支持的客户如何编程来处理这方面.)
请注意,我们曾经在端口25565上运行Minecraft服务器; 我已将其移至端口25568,以便我们可以将端口25565用于负载均衡器.
Nginx方法的一个可能的缺点是它使Nginx成为系统中的瓶颈.如果Nginx出现故障,则所有三台服务器都无法访问.如果系统的某些部分无法跟上该单个端口上的流量(25565),则所有三个服务器都会变得不稳定.更不用说,Nginx是你生态系统中一个重要的新依赖.也许你不想引入另一个具有复杂配置语言和巨大攻击面的大量软件.我可以尊重这一点.
Nginx方法的一个可能的优点是......它使Nginx成为系统中的瓶颈!您可以通过Nginx应用全局策略,例如拒绝超过特定大小的数据包,或使用静态网页响应端口80上的HTTP连接.您还可以从Internet防火墙端口25566,25567和25568,因为现在它们应该只通过Nginx在loopback接口上讨论.这有点减少你的攻击面.
Nginx还可以更轻松地将新的Minecraft服务器添加到您的后端; 现在你只需server在配置中添加一行即可service nginx reload.使用旧的基于端口的方法,您必须在DNS提供程序中添加新的SRV记录(86400客户端可能需要几秒钟才能注意到更改),然后还记得编辑防火墙(例如/etc/iptables.rules)以允许新端口上的外部流量.
在进行操作更改时,Nginx还可以让您不必考虑DNS TTL.假设您决定将三台Minecraft服务器拆分为三台具有不同IP地址的不同物理机器.使用Nginx,你可以完全通过配置更改到你的server线路,并且你可以将这些新机器保留在防火墙内(通过专用接口仅连接到Nginx),并且根据定义,更改将立即生效.然而,使用SRV记录,您必须将区域文件重写为这样的...
arboristal.com. 86400 IN CNAME mc1.arboristal.com.
mc1.arboristal.com. 86400 IN A <a new machine's IP address>
mc2.arboristal.com. 86400 IN A <a new machine's IP address>
mc3.arboristal.com. 86400 IN A <a new machine's IP address>
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 20 25565 mc1.arboristal.com.
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 40 25565 mc2.arboristal.com.
_minecraft._tcp.arboristal.com. 86400 IN SRV 10 40 25565 mc3.arboristal.com.
Run Code Online (Sandbox Code Playgroud)
...而且你必须将所有三台新机器都放在防火墙之外,以便它们可以从互联网接收连接.而且您必须等待86400几秒钟才能让客户注意到更改,这可能会影响您的部署计划的复杂性.而如果你上运行的任何其他服务(如HTTP服务器)arboristal.com,现在你必须将它们移动到mc1.arboristal.com机器,因为我是怎么做的CNAME.我之所以这样做只是为了那些不尊重SRV记录但仍会尝试连接的假想的Minecraft客户arboristal.com:25565.
因此,我认为两种方式(SRV记录和Nginx负载平衡)都是合理的,您的选择将取决于您的个人偏好.我讽刺的选择是:
arboristal.com了接管世界,或者至少有一天会转向更大的机器.我不怕学习新工具.什么是区域文件?"小智 9
由于我在理解这篇文章时遇到了麻烦,这里是对像我这样的人的简单解释。在以下情况下很有用:
然后这是你需要做的:
SRV 记录:
_minecraft._tcp.1.12 IN SRV 1 100 25567 1.12.<your-domain-name.com>.
_minecraft._tcp.1.13 IN SRV 1 100 25566 1.13.<your-domain-name.com>.
Run Code Online (Sandbox Code Playgroud)
(我不需要 1.14 的 srv 记录,因为我的 1.14 minecraft 服务器已经在 25565 端口上,这是 minecraft 的默认端口。)
A记录:
1.12 IN A <your server IP>
1.13 IN A <your server IP>
1.14 IN A <your server IP>
Run Code Online (Sandbox Code Playgroud)