是否可以在 Linux 上对 IPv4 进行重定向的同时对 IPv6 进行一些端口重定向?
重点是使在单独的主机 / 虚拟系统上运行的所有各种服务可在 example.com 以及 sumehost.example.com 上使用(无论如何,通过针对 IPv4 的 iptables 预路由,它基本上可以以这种方式工作)。
在理想情况下,这将类似于 ICMP 消息“此主机上的此端口连接到该主机”,但我不知道在 IPv6 中是否可行。
答案1
让我以示例的形式重新表述您的问题,以确保我理解正确。
您有各种服务,比如 HTTP、IMAP、LDAP 等……并且您希望通过连接到“example.com”(无子域)来访问它们。但这些服务并不都在同一台主机上。如果客户端使用“www.example.com”、“imap.example.com”等子域会更好,因为这样您就可以在 DNS 中将这些名称映射到适当的地址,但它们不会这样做(至少有时不会),它们将使用普通的“example.com”。因此,无论主机在“example.com”上应答什么,都必须将请求分派到处理每个服务的实际主机。
您可以使用普通的 TCP 转发器,例如 xinetd 重定向西雷克斯建议,但随之而来的是 TCP 转发器的所有常见问题:在服务请求的主机上,IP 连接似乎来自转发服务器,而不是原始客户端,因此日志和其他内容最终是错误的。
对于具有这些功能的协议,应用程序级代理服务器(反向代理)也是一种选择。但您实际上想将整个 TCP/UDP 连接发送到另一台服务器,而不是引入代理服务器。对。
嗯,现在Linux 支持 IPv6 的 DNAT你可能只想使用它。
或者,如果您使用某种硬件负载平衡器,它可能可以为您完成这项工作。
更好的选择是 DNSSRV 记录。这些允许客户端在 DNS 中查找主机名,而不是主机名 + 服务名,并返回原始主机名或 IP 地址以及它们可以连接的端口号。这允许您将 HTTP 的“example.com”映射到一个 IP 地址,将 LDAP 的“example.com”映射到不同的 IP 地址。
不幸的是,尽管 SRV 记录标准已有 15 多年的历史,但它从未得到广泛采用,客户端根本不使用它。所以它不是一个选择。实际上,它经常与 SIP 等少数协议一起使用,但几乎所有 Web 浏览器和 IMAP 客户端以及大多数其他协议的客户端都完全忽略了它。