我是 Linux 新手,但作为商业项目的一部分,我需要将防火墙配置为通过 NAT 和 DNS 进行重定向。
例如,我有流量前往www.A_DOMAIN.com:9000
(DNS 转换为我的服务器)并重定向到hw.ANOTHER_DOMAIN.io:9998
我怎样才能实现这个目标?
谢谢
皮特
答案1
使用 DNS,您可以创建www.A_DOMAIN.com
的别名hw.ANOTHER_DOMAIN.io
,但这对端口号没有任何作用。因此,除非此服务不是常规 HTTP/HTTPS,否则 DNS 欺骗不会满足您的需要。
您可以设置防火墙 DNAT 规则,该规则将接受服务器端口 9000 处的传入流量。该规则会将寻址从 更改为original_client:some port -> your_server's_IP:9000
,your_server's_IP:some port -> other_server's_IP:9998
并且还会自动对任何答案进行反向映射,以便对于原始客户端来说,答案似乎来自客户端发送查询的位置。在 TCP 协议级别,这对于将答案识别为原始连接的一部分相当重要。
但简单的防火墙规则不会对请求本身做任何事情,因此,如果您使用 HTTP,服务器hw.ANOTHER_DOMAIN.io
将看到请求仍然被发送到www.A_DOMAIN.com
,并且可能会也可能不会响应一条错误消息,有效地说明“我是hw.ANOTHER_DOMAIN.io
,我对“一无所知www.A_DOMAIN.com
”。同样,客户端的 Web 浏览器也可能显示有关服务器主机名与客户端认为其请求的内容不匹配的警告。
如果使用 TLS 安全连接(例如 HTTPS),客户端将确实请注意,生成答案的服务器的证书与客户端请求的地址不匹配,并且肯定会显示一个可怕的警告。
更高级的方法是设置一个反向代理,将www.A_DOMAIN.com:9000
任何传入请求重新提交给hw.ANOTHER_DOMAIN.io:9998
,修改协议标头并根据需要解密和重新加密数据包。
从可用选项来看,这是最无缝地使 hw.ANOTHER_DOMAIN.io:9998 的内容出现在 www.A_DOMAIN.com:9000 上的解决方案,但这也需要服务器的最大处理能力。
如果您不关心客户端实际上会看到连接被重定向到hw.ANOTHER_DOMAIN.io:9998
,那么 HTTP/HTTPS 还有一种可能性:您可以设置一个小型 Web 服务器,www.A_DOMAIN.com:9000
它只会通过重定向回复所有请求到相应的 URL 处hw.ANOTHER_DOMAIN.io:9998
。基本上,只需告诉网络浏览器“改为转至 hw.ANOTHER_DOMAIN.io:9998”。
这通常意味着客户端只会向您的服务器发出一个请求,而所有后续请求都直接向另一台服务器发出,因此它可能是 HTTP/HTTPS 最有效的解决方案。但客户端会看到网络浏览器地址栏中的地址已更新为,hw.ANOTHER_DOMAIN.io:9998
因此如果您希望对转发保密,这将不是您的解决方案。如果客户端无法直接连接到hw.ANOTHER_DOMAIN.io:9998
.
正如您所看到的,有多种解决方案可能适用也可能不适用,具体取决于您的用例的各种细节。每个解决方案都有其自身的局限性,这对您来说可能重要也可能不重要。
按照您当前提出问题的方式,该问题实际上没有任何特定于 Unix/Linux 的内容。如果您愿意,您可以执行我在 Windows 中概述的所有解决方案;如果 TCP 级 NAT 适用于您的问题,您可以在企业网络路由器或硬件防火墙设备中完成此操作,而无需使用任何服务器。您可能有一个 Linux 服务器,但您没有指定发行版的名称和版本,因此很难给出准确的建议。您的问题目前面临着开始获得“需要更多关注”类型的接近投票的风险。
而且,如果我可以这么说,您甚至必须以如此不集中的方式提出问题,这一事实表明您可能不仅对 Linux 不熟悉,而且可能对一般的 TCP/IP 网络也很陌生。如果您确实在做一个商业项目,那么您可能没有时间学习足够的知识,甚至开始询问有关您自己的环境的正确问题:我认为您应该认识到自己当前的局限性,并在可能的情况下向组织中能够在更技术层面了解您的具体情况的人员寻求帮助。
在我看来,您似乎需要某种“IP 网络基础知识”课程,以便对 DNS、防火墙和反向代理等技术是什么以及它们能做什么和不能做什么有一个基本的了解。这样的基础知识就是基本的以便您能够评估不同的解决方案并了解什么适用于特定问题,什么不适用。