iptables为ipv6地址端口转发到localhost端口

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

如何用iptables做到这一点?

更新

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

您可能会因为使用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 

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

你不能用iptables来做,因为iptables只处理IPv4而不处理IPv6。 你也不能用ip6tables来做,因为ip6tables只处理IPv6,而不是IPv4。

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

结合一个协议转换器来改变iptables的IP地址来改变端口号是可能的。 但我不会build议使用这种组合,特别是不知道有关您的具体需求的细节。

无论哪种方式,服务器将不能立即访问有关客户端IPv6地址的信息,因为无法将整个IPv6地址embedded到服务器可见的客户端IPv4地址中。

基于所提供的信息有限,我会给出迈克尔·汉普顿所做的同样的build议,只要在正确的端口上运行服务。 如果这不是一个选项,那么问一个更好的问题。 解释你试图运行的服务,你试图如何让它在正确的端口上进行监听,以及它是如何失败的。

这个为我工作,类似于@Sander Steffann但没有硬编码的IP地址,只是接口

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