我刚刚获得了一个配置了 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
}