我有一个域名(例如) 、example.com
静态 IP 地址(例如212.5.5.5
)和本地设备,位于、、、、192.168.0.1:80
(这不是网站)。192.168.0.2:80
192.168.0.3:80
192.168.0.4:80
192.168.0.4:47
如何使用子域名(例如device1.example.com
、device2.example.com
等)访问这些设备?
目前我只能让example.com:80
和example.com:47
工作,指向192.168.0.4:80
和192.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 服务器。在这种情况下,其他答案中建议的反向代理解决方案适用。
它们可能是准备/打算使用SRV
DNS 中的条目运行的服务。这个想法是,您解析服务的已知记录,这反过来会为您提供要连接的名称:端口。以 Minecraft 为例:
- 你设置你的客户端连接到
minecraft.example.com
- 您的客户端知道它可以查询
_minecraft._tcp.minecraft.example.com.
以获取要连接的实际 IP 和端口。
这是一个非常有用的功能,但它必须在客户您正在访问的服务