如何将特定的 IPv6 地址和端口路由到另一个端口?

如何将特定的 IPv6 地址和端口路由到另一个端口?

我刚刚获得了一个配置了 IPv4 地址和一堆 IPv6 地址的 VPS,并且我还不熟悉 Ubuntu/Linux 中的路由。我想将以特定 IPv6 和端口(即端口 80)为目标的请求路由到该地址上的特定端口(即端口 8000)。

用伪代码来说,我想要的是以下内容:

if($DESTINATION_IP == [specific IPv6-address]:80)
    route to port: 8000

当应用程序正在侦听 [特定 IPv6 地址]:8000 时,它将接收发送到 [特定 IP 地址]:80 的请求。但是当我使用 [另一个 IPv6 地址]:80 时,它不会路由到该端口。

这看起来很简单,我想我必须使用 ip6tables 来完成这项工作,但我不知道如何实现这一点。

非常感谢。

答案1

您无法使用 ip6tables 转发端口,因为相关的 netfilter 目标仅限于 IPv4(因为它们与IPv6 消除了 NAT)。

当然,最好的解决方案是让应用程序首先监听正确的地址和端口,然后放弃权限。

如果您确实需要这样做,因为您的应用程序编写得不好,无法侦听 1024 以下的端口,请设置 xinetd 来执行端口转发。例如(未经测试):

service dumb-app
{
    flags       = IPv6
    type        = UNLISTED
    socket_type = stream
    protocol    = tcp
    wait        = no
    user        = root
    bind        = 2001:db8::f04d
    port        = 80
    redirect    = ::1 8000
}

相关内容