![如何将特定的 IPv6 地址和端口路由到另一个端口?](https://linux22.com/image/804767/%E5%A6%82%E4%BD%95%E5%B0%86%E7%89%B9%E5%AE%9A%E7%9A%84%20IPv6%20%E5%9C%B0%E5%9D%80%E5%92%8C%E7%AB%AF%E5%8F%A3%E8%B7%AF%E7%94%B1%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%AB%AF%E5%8F%A3%EF%BC%9F.png)
我刚刚获得了一个配置了 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
}