我有一个域名、静态 IP 地址和许多我想在屋外访问的设备。我该如何路由它们?

我有一个域名、静态 IP 地址和许多我想在屋外访问的设备。我该如何路由它们?

我有一个域名(例如) 、example.com静态 IP 地址(例如212.5.5.5)和本地设备,位于、、、、192.168.0.1:80(这不是网站)。192.168.0.2:80192.168.0.3:80192.168.0.4:80192.168.0.4:47

如何使用子域名(例如device1.example.comdevice2.example.com等)访问这些设备?

目前我只能让example.com:80example.com:47工作,指向192.168.0.4:80192.168.0.4:47

我知道您无法在 DNS 服务器上设置端口。

我该如何克服我的问题?

答案1

您可以拥有一个运行 nginx 反向代理的面向公众的服务器,该服务器根据子域将流量重定向到正确的服务器。

“主”服务器上的 nginx 配置:

server {
  server_name device1.example.com;
  location / {
    proxy_pass http://192.168.0.1:80;
  }
}
server {
  server_name device2.example.com;
  location / {
    proxy_pass http://192.168.0.2:80;
  }
}
server {
  server_name device3.example.com;
  location / {
    proxy_pass http://192.168.0.3:80;
  }
}

答案2

您需要对除其中一个端口之外的所有端口使用备用端口。例如,212.5.5.5:80 将转发到 192.168.0.1:80,但 212.5.5.5:81 将转发到 192.168.0.2:80,212.5.5.5:82 将转发到 192.168.0.3:80,依此类推。这在大多数现代 NAT 设备上都应该是可配置的。

另一种方法是,如果您愿意使用 IPv6,只需在 NAT 设备或路由器上打开 IPv6 直通即可。这基本上会将 LAN 上的每个 IPv6 地址暴露给公共互联网,让您直接从外部访问它们。正如您可能想象的那样,这样做存在一些风险。由您来决定是否可以容忍这种风险。

答案3

您不应将这些服务直接暴露在互联网上。您无法审核这些设备以确保它们的安全,而仅仅暴露它们会泄露有关内部网络状态的信息。

正确的解决方案是设置一个 VPN 服务器,授予您远程访问内部网络的权限。理想情况下,内部网络应与您的主网络隔离,仅用于这些暴露的设备。这样可以限制被黑客入侵时造成的损害。

开源 VPN 软件成熟、经过审核,并且安全问题易于理解。您可以将自己限制在较小的攻击范围内。

答案4

您首先应该确保每个人都需要从 Internet 访问这些服务(= 这些服务确实旨在公开)。否则,您可以考虑设置 VPN 服务器并访问网络内的服务。

我假设端口上的服务80是提供典型 Web 服务的 Web 服务器。在这种情况下,其他答案中建议的反向代理解决方案适用。

它们可能是准备/打算使用SRVDNS 中的条目运行的服务。这个想法是,您解析服务的已知记录,这反过来会为您提供要连接的名称:端口。以 Minecraft 为例:

  • 你设置你的客户端连接到minecraft.example.com
  • 您的客户端知道它可以查询_minecraft._tcp.minecraft.example.com.以获取要连接的实际 IP 和端口。

这是一个非常有用的功能,但它必须在客户您正在访问的服务

相关内容