更新

更新

假设我想将端口 443 上的 2a00:1450:400c:c01::71 重定向到本地主机端口 12345。

如何使用 Iptables 来实现这一点?

更新

好的,这是 Weechat,它在 >=1000 的端口上运行 SSL 中继。它可以在此端口上与 IPv4 和 IPv6 建立连接。因此,我想将定义的 IPv6:端口 [2a00:1450:400c:c01::71]:443 绑定到 IPv6 本地主机端口 [::1]:12345

答案1

您可能会遇到问题,因为使用 IPv6 您不应该进行 NAT,但是从 Linux 内核 3.8 开始您可以执行以下操作:

ip6tables -t nat -A PREROUTING -p tcp -m tcp \
          -d 2a00:1450:400c:c01::71 --dport 443 -j REDIRECT --to-ports 12345

答案2

此答案适用于编辑前的原始问题版本。对于更新后的问题,@SanderSteffann 给出的答案适用。

您无法使用 执行此操作iptables,因为iptables仅处理 IPv4 而不处理 IPv6。 您无法使用 执行此操作ip6tables,因为ip6tables仅处理 IPv6 而不处理 IPv4。

确实存在可以在 IPv4 和 IPv6 之间进行转换的协议转换器。但是这些转换器可能会限制它们可以转换的 IP,因为 IPv4 和 IPv6 的 IP 地址数量不同。

结合使用协议转换器来更改 IP 地址和iptables更改端口号也许是可行的。但我不建议使用这样的组合,尤其是在不了解您的具体需求的情况下。

无论哪种方式,服务器都无法立即访问有关客户端 IPv6 地址的信息,因为无法将整个 IPv6 地址嵌入服务器可见的客户端 IPv4 地址内。

根据提供的有限信息,我会给出与@MichaelHampton相同的建议,首先在正确的端口上运行服务。如果这不是一个选择,那么请提出一个更好的问题。解释一下您尝试运行的服务,您如何尝试让它在正确的端口上监听,以及它是如何失败的。

答案3

这个对我有用,类似于@Sander Steffann,但没有硬编码的 ip 地址,只有接口

ip6tables -t nat -I PREROUTING -i eth0 -p tcp -m tcp --dport 22 -j REDIRECT --to-ports 2222

相关内容