使用iptables将ipv6转发到ipv4?

Eli*_*Eli 22 iptables port-forwarding

目前我有一个设置,由于配置需要永远修复,我有一个只能通过 ipv4 访问的服务器。但是,我也有一台可以通过 ipv6 访问的服务器。我想知道是否可以使用 iptables 将某个端口上的 ipv6 流量从一台服务器转发到另一台使用 ipv4 流量的服务器。

mgo*_*ven 23

IPtables 目前无法做到这一点,因此您需要一个用户空间进程来代理连接。socat是一个合适的工具:

socat TCP6-LISTEN:1234,fork TCP4:1.2.3.4:1234
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这很有帮助!如果有人正在寻找 UDP 解决方案:socat UDP6-RECVFROM:64444,fork UDP4-SENDTO:localhost:64443 为我工作 (3认同)

Léo*_*Lam 12

正如对您的问题的评论中所指出,即使在 3 年后,NAT64 还远未准备好。

但是,您可以尝试6tunnel,正如困惑所建议的那样。

幸运的是,它存在于 Debian 和 Ubuntu 存储库中,因此您可以使用sudo apt-get install 6tunnel. 如果您使用的是其他系统,则必须从source构建它。

从源代码构建并不难,只需运行一些命令(以 root 身份):

git clone https://github.com/wojtekka/6tunnel && cd 6tunnel && ./autogen.sh && make && make install
Run Code Online (Sandbox Code Playgroud)

这是它的语法,简化了:

6tunnel [-4|-6] [-l local-host] original-port destination-host destination-port
Run Code Online (Sandbox Code Playgroud)
  • [-4|-6]是可选的,您可以指定是否将绑定(听)在IPv4或IPv6(分别)。
  • -l也是可选的。它允许您选择要绑定的地址(IPv4 或 IPv6)。
  • 原来的端口是即您绑定的端口。
  • 目标主机是在这里您可以转发流量。它可以在任何地方:本地主机,或您的网络或 Internet 上的其他地方。
  • 目的端口是目标主机将收到您的转发流量的端口。

例如,如果要允许通过 IPv6 访问仅侦听端口 1337 的 IPv4 服务器,请使用:

6tunnel -6 1337 localhost 1337
Run Code Online (Sandbox Code Playgroud)

上述命令将在 IPv6 上侦听端口 1337,并通过 IPv4 将流量转发到同一台机器上的端口 1337。然后它会在后台运行,所以你不必担心它。

实际上,您应该设置一个 cron 作业以确保它仍在运行。为您提供方便6tunnel的示例!在启动时运行它也不应该是一个坏主意。

有关更多文档,请运行6tunnel -hman 6tunnel


Mic*_*ton 5

的最新版本xinetd还可以侦听 IPv6,然后将连接转发到 IPv4 地址。

在端口 3389 上侦听 IPv6 连接并将它们转发到内部 IPv4 地址的端口 3389 的示例配置:

service rdp_port_forward
{
    flags           = IPv6
    disable         = no
    type            = UNLISTED
    socket_type     = stream
    protocol        = tcp
    user            = nobody
    wait            = no
    redirect        = 10.187.20.42 3389
    port            = 3389
}
Run Code Online (Sandbox Code Playgroud)

这在更受限制的环境xinetd中可能很有用,因为它可能与您的基本系统一起安装或在批准的供应商存储库中可用。


puz*_*ent 2

更多的是为了人们找到这个页面而不是OP(我来到这里寻找IPv4(Twisted)应用程序的IPv6连接解决方​​案),一种可能性是应用程序6tunnel,侦听IPv6并将请求转发到另一个接口,港口。