Networking 如何将DNS重定向到不同的端口

Networking 如何将DNS重定向到不同的端口,networking,dns,minecraft,Networking,Dns,Minecraft,TL;医生: 域的DNS解析必须映射到IP:port,而不仅仅是IP 例如 sub1.example.com您可以使用: 服务:所需服务的符号名称 协议:所需服务的传输协议;这通常是TCP或UDP 名称:此记录对其有效的域名,以点结尾 TTL:标准DNS生存时间字段 类:标准DNS类字段(该字段始终位于中) 优先级:目标主机的优先级,越低表示越优先 权重:具有相同优先级的记录的相对权重 端口:要在其上找到服务的TCP或UDP端口 Target:提供服务的机器的标准主机名,以点结尾 例如: _si

TL;医生:

域的DNS解析必须映射到
IP:port
,而不仅仅是
IP

例如

sub1.example.com
您可以使用:

服务:所需服务的符号名称

协议:所需服务的传输协议;这通常是TCP或UDP

名称:此记录对其有效的域名,以点结尾

TTL:标准DNS生存时间字段

类:标准DNS类字段(该字段始终位于中)

优先级:目标主机的优先级,越低表示越优先

权重:具有相同优先级的记录的相对权重

端口:要在其上找到服务的TCP或UDP端口

Target:提供服务的机器的标准主机名,以点结尾

例如:

_sip._tcp.example.com. 86400 IN SRV 0 5 5060 sipserver.example.com.
所以我想你想要的是在你的

另一方面,我强烈建议您与托管公司合作,而不是自己托管服务器。这只是在问你的家庭连接问题(DDoS和带宽/连接速度),但这取决于你。

(我做这件事已经有一段时间了。请不要盲目地认为下面的所有细节都是正确的。但我希望我没有错得太尴尬。:)


正如前面的回答所述,Minecraft客户端()支持使用服务名
\u Minecraft
和协议名
\u 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.
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.
在这里,我们自己控制服务器端的负载平衡(通过Nginx),因此我们不再需要担心行为不好的客户机可能更喜欢端口25565而不是其他两个端口。事实上,现在所有的客户都将访问arboristal.com:25565!但该端口上的侦听器不再是Minecraft服务器;它是Nginx,将所有流量秘密代理到同一台机器上的其他三个端口

我们根据客户端IP地址的散列(
IP\u散列
)进行负载平衡,这样,如果客户端断开连接,然后稍后重新连接,它很有可能会重新连接到以前的Minecraft服务器。(我不知道这对Minecraft有多重要,也不知道支持SRV的客户端是如何编程来处理这一方面的。)

注意,我们曾经在端口25565上运行Minecraft服务器;我已将其移动到端口25568,以便我们可以使用端口25565作为负载平衡器

Nginx方法的一个可能缺点是它使Nginx成为系统中的瓶颈。如果Nginx宕机,那么所有三台服务器都将无法访问。如果系统的某些部分无法跟上单个端口25565上的通信量,那么这三台服务器都会变得不稳定。更不用说,Nginx在您的生态系统中是一个巨大的新依赖项。也许你不想再引入另一个拥有复杂配置语言和巨大攻击面的大型软件。我尊重这一点

Nginx方法的一个可能优点是。。。它使Nginx成为您系统中的瓶颈!您可以通过Nginx应用全局策略,例如拒绝超过特定大小的数据包,或者使用静态网页响应端口80上的HTTP连接。您还可以通过防火墙将端口25566、25567和25568从Internet上隔离,因为现在只有Nginx可以通过环回接口与它们通信。这在一定程度上减少了你的攻击面

Nginx还可以更轻松地将新的Minecraft服务器添加到后端;现在,您只需将
服务器
行添加到配置中,然后
服务nginx重新加载
。使用旧的基于端口的方法,您必须向DNS提供商添加一个新的SRV记录(客户端可能需要高达
86400
秒的时间才能注意到更改),然后还要记住编辑防火墙(例如
/etc/iptables.rules
)以允许通过该新端口的外部流量

Nginx还使您在进行ops更改时不必考虑DNS ttl。假设您决定将三台Minecraft服务器拆分到三台具有不同IP地址的不同物理机器上。使用Nginx,您可以完全通过对
服务器
行的配置更改来实现这一点,并且您可以将这些新机器保留在防火墙内(仅通过专用接口连接到Nginx),根据定义,更改将立即生效。然而,使用SRV记录,您必须将区域文件重写为以下内容

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.
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.
arboristal.com。CNAME mc1.arboristal.com上的86400。
mc1.arboristal.com。86400英寸
mc3.arboristal.com。86400在A可能的解决方案中:

  • 在服务器上使用nginx作为代理,它将侦听端口a并多路传输到端口B或C

  • 如果您使用AWS,则可以使用负载平衡器根据请求将请求重定向到特定端口


  • 因为我在理解这篇文章时遇到了困难,这里给像我这样的人一个简单的解释。如果:

    • 您不需要负载平衡
    • 您不想使用nginx进行端口转发
    • 您确实希望使用SRV记录根据特定子域进行端口转发
    下面是您需要做的:

    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>.
    
    \u minecraft.\u SRV 1 100 25567 1.12中的tcp.1.12。。
    _SRV 1 100 25566 1.13中的minecraft._tcp.1.13。。
    
    (我不需要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>
    
    A中的
    1.12
    1.13在A
    1.14
    
    1.12                          IN A      <your server IP>
    1.13                          IN A      <your server IP>
    1.14                          IN A      <your server IP>